diff --git a/.env.example b/.env.example deleted file mode 100644 index 93fcbc16aa..0000000000 --- a/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -APPLICATION_ID= -API_KEY= diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 23fdc99025..ac32576f4b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,8 +1,2 @@ # Default owners of the repository -* @dyte-in/docs - -# Owners for JS, JSX, TS, and TSX files -*.js @dyte-in/web -*.jsx @dyte-in/web -*.ts @dyte-in/web -*.tsx @dyte-in/web +* @BrickeVD diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 88b7f454f0..1daab6aab1 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -4,7 +4,7 @@ body: - type: checkboxes attributes: label: Are you certain it's a bug? - description: If you're uncertain, feel free to ping us at support@dyte.io + description: If you're uncertain, open a discussion instead of a bug report. options: - label: Yes, it looks like a bug required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 20171557f9..69fea2c529 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - name: Question - url: mailto:support@dyte.io - about: Please ask and answer questions on our support email. + url: https://github.com/BrickeVD/OSPI-APIdocs/discussions + about: Please ask and answer questions here. diff --git a/.github/workflows/docsearch.yml b/.github/workflows/docsearch.yml deleted file mode 100644 index d42a708227..0000000000 --- a/.github/workflows/docsearch.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Run algolia docsearch - -on: - push: - branches: - - 'ci/docsearch' - - main - schedule: - - cron: '0 12 * * 1' -jobs: - docsearch: - runs-on: ubuntu-latest - if: github.repository == 'dyte-io/docs' - steps: - - uses: actions/checkout@v2 - - - name: Setup environment - run: | - echo "APPLICATION_ID=$APPLICATION_ID" >> .env - echo "API_KEY=$API_KEY" >> .env - chmod +x ./bin/crawl.sh - env: - APPLICATION_ID: ${{ secrets.ALGOLIA_DOCSEARCH_APP_ID }} - API_KEY: ${{ secrets.ALGOLIA_DOCSEARCH_API_KEY }} - - - name: Run docsearch - continue-on-error: true - run: | - ./bin/crawl.sh diff --git a/.prettierignore b/.prettierignore index f8b0e4cf88..40aa93e81f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,4 @@ # autogenerated files -docs/*ui-kit/reference/**/*.md *.min.css LICENSE diff --git a/CHANGELOG.md b/CHANGELOG.md index 0abbfb1f53..a1305688a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,784 +1,10 @@ -# [1.20.0](https://github.com/dyte-in/docs/compare/v1.19.1...v1.20.0) (2022-07-26) +# Changelog -### Bug Fixes +All notable changes to this documentation site are recorded here. -- typo for react-sdk name ([a19881c](https://github.com/dyte-in/docs/commit/a19881c9140a8bb2353acf86373a739845144628)) -- **ui:** sections-menu design fixed for version dropdown ([e90f738](https://github.com/dyte-in/docs/commit/e90f73876303a8971f1371899915f96b1c57a36d)) +## [0.1.0] - 2026-08-20 -### Features - -- re-added posthog analytics ([e906aa1](https://github.com/dyte-in/docs/commit/e906aa11e27817ba2000f09088f769c68d7973aa)) - -## [1.19.1](https://github.com/dyte-in/docs/compare/v1.19.0...v1.19.1) (2022-07-21) - -### Bug Fixes - -- broken links and link color in api ref ([adf4de7](https://github.com/dyte-in/docs/commit/adf4de718400cf114bdf7fce4269253b176feb5e)) - -# [1.19.0](https://github.com/dyte-in/docs/compare/v1.18.0...v1.19.0) (2022-07-20) - -### Bug Fixes - -- added media permission error file ([c6cbf96](https://github.com/dyte-in/docs/commit/c6cbf961422e0dc6e61a8f17bfe817875aaed2b6)) -- added spacing ([6b91a70](https://github.com/dyte-in/docs/commit/6b91a70a02cb32443954b3bf4c95151ce6b5dd39)) -- cz-cli and commitizen ([1b35e51](https://github.com/dyte-in/docs/commit/1b35e512f84f58c605ebf614e224db9f262dcb57)) -- quote the branch name ([058cca6](https://github.com/dyte-in/docs/commit/058cca6b285f71e75ca8e56fef273dd9dda39e09)) -- remove web-core v0.2 ([#38](https://github.com/dyte-in/docs/issues/38)) ([55bb8c7](https://github.com/dyte-in/docs/commit/55bb8c77c387a8b6fa9dc40deb34faf23ad24fec)) -- removed `joined` from meta ([10d4b6f](https://github.com/dyte-in/docs/commit/10d4b6fe67b1f10e3e574df120fb34a5c22cf28f)) -- run action also on push ([ac5b3b4](https://github.com/dyte-in/docs/commit/ac5b3b448d9fcbbb4ebc4426e231d59cced7fdbc)) -- run cron ([a5d508d](https://github.com/dyte-in/docs/commit/a5d508dce4dc6e74b8f6d0dd48874a03f1ee5dc7)) -- sidebars updated, removed warnings ([#41](https://github.com/dyte-in/docs/issues/41)) ([951f1ab](https://github.com/dyte-in/docs/commit/951f1ab2484143536f0e41d6152cbefd0e10895b)) - -### Features - -- **recording:** changed recording timeout value ([#43](https://github.com/dyte-in/docs/issues/43)) ([978b0b3](https://github.com/dyte-in/docs/commit/978b0b3962ab35159c2a08597207b8f4f456a030)) -- **webhooks:** Include outputFileName in UPLOADED recording status update webhook ([bf9d60d](https://github.com/dyte-in/docs/commit/bf9d60dc6b5f5e1fbd9bd192fae94ae19a0d39dd)) - -# [1.18.0](https://github.com/dyte-in/docs/compare/v1.17.0...v1.18.0) (2022-07-20) - -### Features - -- add react, javascript sections to docsearch to crawl ([7ee93a6](https://github.com/dyte-in/docs/commit/7ee93a62b94f082c68af39bc023f8e83a0a53a8a)) - -# [1.17.0](https://github.com/dyte-in/docs/compare/v1.16.0...v1.17.0) (2022-07-18) - -### Bug Fixes - -- remove redundant title in homepage ([80b827c](https://github.com/dyte-in/docs/commit/80b827c4bdfaeb1968fc4c703d4f0fcef8d931b7)) - -### Features - -- search ([17424d5](https://github.com/dyte-in/docs/commit/17424d5a93196cbc1f4832b331bda3b36146ed80)) -- search crawl action ([00bc234](https://github.com/dyte-in/docs/commit/00bc2341afa6bca0a9532e6d784df761b494ae3a)) - -# [1.16.0](https://github.com/dyte-in/docs/compare/v1.15.3...v1.16.0) (2022-07-18) - -### Bug Fixes - -- revert needed github workflows ([b6af542](https://github.com/dyte-in/docs/commit/b6af5422bf22244fd9f48314296e51e68079296c)) - -### Features - -- new docs update ([f0499d1](https://github.com/dyte-in/docs/commit/f0499d116158d9d4fdac365c17f12abc59c67aa5)) - -## [1.15.3](https://github.com/dyte-in/docs/compare/v1.15.2...v1.15.3) (2022-07-05) - -### Bug Fixes - -- trailing slash config and paths changed ([edc7915](https://github.com/dyte-in/docs/commit/edc79151f0450fdac63e372d11e2d25cef75dc00)) - -## [1.15.2](https://github.com/dyte-in/docs/compare/v1.15.1...v1.15.2) (2022-07-04) - -### Bug Fixes - -- disable `trailingSlash` ([164825c](https://github.com/dyte-in/docs/commit/164825c65b01d99edc40be3f045c729de3aa21a8)) - -## [1.15.1](https://github.com/dyte-in/docs/compare/v1.15.0...v1.15.1) (2022-06-27) - -### Bug Fixes - -- **content:** fix docs content ([22d2b18](https://github.com/dyte-in/docs/commit/22d2b188e58e1779e52d3f7ad59faaaef647a631)) - -# [1.15.0](https://github.com/dyte-in/docs/compare/v1.14.3...v1.15.0) (2022-06-25) - -### Bug Fixes - -- all -> the ([ac7cffa](https://github.com/dyte-in/docs/commit/ac7cffadb3428399964038024a46e5035b5b7ca4)) -- participant docs ([f1a7344](https://github.com/dyte-in/docs/commit/f1a7344eed4645ff552065da1086538a63fedffc)) -- participants documentation ([715af4e](https://github.com/dyte-in/docs/commit/715af4e8b590f0a5f13e4ae9be60337766bde809)) -- recording properties ([99a9d21](https://github.com/dyte-in/docs/commit/99a9d21592e044e2ce4056ad2e435be1206e6bd8)) -- update participant docs ([30249d6](https://github.com/dyte-in/docs/commit/30249d606e65ddb6616b3ce542a299ca3145fed6)) -- update reference for react-native-core and react-web-core ([#31](https://github.com/dyte-in/docs/issues/31)) ([a651305](https://github.com/dyte-in/docs/commit/a651305636557e268c3af068ad948aa27107779f)) -- web-core docs ([#35](https://github.com/dyte-in/docs/issues/35)) ([28ca549](https://github.com/dyte-in/docs/commit/28ca5499e0e1f6aee7ba197afe5a6139a61d1646)), closes [#58](https://github.com/dyte-in/docs/issues/58) [#58](https://github.com/dyte-in/docs/issues/58) - -### Features - -- add workflow to reject pr if api-specs is updated ([39ba452](https://github.com/dyte-in/docs/commit/39ba4529d0ca3a3e28b934f48f706a9f72cb91a7)) -- release web-core 0.27.x ([4a4dcc3](https://github.com/dyte-in/docs/commit/4a4dcc36dabc9206a7231a5f64907bd177082a22)) - -## [1.14.3](https://github.com/dyte-in/docs/compare/v1.14.2...v1.14.3) (2022-06-24) - -### Bug Fixes - -- replace Old SDKs from sidebar ([0d2bff0](https://github.com/dyte-in/docs/commit/0d2bff015eaf3fe172ce833e657f0283c1140368)) - -## [1.14.2](https://github.com/dyte-in/docs/compare/v1.14.1...v1.14.2) (2022-06-24) - -### Bug Fixes - -- hide old SDKs from the navigation ([2633a15](https://github.com/dyte-in/docs/commit/2633a15a75bca2b3af22e375d3b8f291a78898c9)) -- linting ([bc372a8](https://github.com/dyte-in/docs/commit/bc372a86ada5fc95b290a74b2510bd79281cc287)) -- navbar icon links placement in mobile ([a3b25e9](https://github.com/dyte-in/docs/commit/a3b25e9f9a39ff9c33a1171717eb8fda92346047)) - -## [1.14.1](https://github.com/dyte-in/docs/compare/v1.14.0...v1.14.1) (2022-06-23) - -### Bug Fixes - -- **src/theme/navbar/index.js:** fix the wrong validation for mobile sdks in navbar ([f0a98d6](https://github.com/dyte-in/docs/commit/f0a98d614b64632f3a1144af580159246c31dc42)), closes [#58](https://github.com/dyte-in/docs/issues/58) - -# [1.14.0](https://github.com/dyte-in/docs/compare/v1.13.1...v1.14.0) (2022-06-16) - -### Bug Fixes - -- patch-package for basic auth fields ([6f25082](https://github.com/dyte-in/docs/commit/6f2508283684b2141fdd52223dbf9c3539771199)) - -### Features - -- update v2 api spec ([df6dd56](https://github.com/dyte-in/docs/commit/df6dd56832adf6f91f2b1e0001ce2c090a262f8c)) - -## [1.13.1](https://github.com/dyte-in/docs/compare/v1.13.0...v1.13.1) (2022-06-15) - -### Bug Fixes - -- patch-package for Basic Auth Description ([a525172](https://github.com/dyte-in/docs/commit/a5251722ccdc6d543dadac72e56f8b4e49f452fa)) - -# [1.13.0](https://github.com/dyte-in/docs/compare/v1.12.2...v1.13.0) (2022-06-13) - -### Bug Fixes - -- remove unused function ([b14a696](https://github.com/dyte-in/docs/commit/b14a6960c8d1acb63d4cdfe18420a554b75c1ae3)) -- update web-core docs to v0.26.0 ([6cb5952](https://github.com/dyte-in/docs/commit/6cb59528267358af8281bc3c43bcec75cb31643e)) -- update web-core docs to v0.26.0 ([bf924a4](https://github.com/dyte-in/docs/commit/bf924a47141fe58ab3cc1389054fc3a1f5353349)) - -### Features - -- added docs for version 0.25.x of web-core ([b2479f3](https://github.com/dyte-in/docs/commit/b2479f388499bd898ba63d5f71c74fa870419b80)) - -## [1.12.2](https://github.com/dyte-in/docs/compare/v1.12.1...v1.12.2) (2022-06-09) - -### Bug Fixes - -- update reference for react-native-core and react-web-core ([3316430](https://github.com/dyte-in/docs/commit/331643034d7935c838f66ca062e82bcd1e701ce5)) - -## [1.12.1](https://github.com/dyte-in/docs/compare/v1.12.0...v1.12.1) (2022-06-09) - -### Bug Fixes - -- created versioned docs for 0.24.x ([f39e447](https://github.com/dyte-in/docs/commit/f39e4474ff76e5086bca2f422f18e51497317ab1)) -- **web-core:** update web-core api reference ([5766ac5](https://github.com/dyte-in/docs/commit/5766ac5413e845c14b8bd0bc0e1c4019ebddc157)) - -# [1.12.0](https://github.com/dyte-in/docs/compare/v1.11.0...v1.12.0) (2022-06-09) - -### Bug Fixes - -- add button and small fixes ([69a81c2](https://github.com/dyte-in/docs/commit/69a81c20fd01fb54c9c26d8ec51dc6dec0a4d561)) -- added chat functions ([36961ee](https://github.com/dyte-in/docs/commit/36961eef83076d94ef48cf5534473a1ccfe00857)) -- **build:** add dummy versions to fix build ([286e19f](https://github.com/dyte-in/docs/commit/286e19f15c90b9e5c2163fe0a22a44912b788849)) -- cdn links ([87f2e10](https://github.com/dyte-in/docs/commit/87f2e1068404eefb2b4b8e57dba275cd4181ff52)) -- colors in new web-sdk docs ([ee7bad2](https://github.com/dyte-in/docs/commit/ee7bad246fbb9b18ed0b2ccd339e53a5e5acba01)) -- **constants:** added `,` to remove lint errors ([16d8d70](https://github.com/dyte-in/docs/commit/16d8d70cfac699cf4609dacd76691a691513a67b)) -- docs for local user and participants ([#21](https://github.com/dyte-in/docs/issues/21)) ([1a3c951](https://github.com/dyte-in/docs/commit/1a3c951a5eadbb3170d983e02d75c24c7250ce2c)) -- fetch latest version by default ([d06e09e](https://github.com/dyte-in/docs/commit/d06e09e9d44faa4cfe7bb9f8b954c3da1f97d252)) -- image ([91eaff1](https://github.com/dyte-in/docs/commit/91eaff19a34ca7cbf6965b6098c06eb76eb91fd4)) -- installation ([8ef781f](https://github.com/dyte-in/docs/commit/8ef781fdc729fa0021be9cfb6fbdbca1a5b61529)) -- installation ([d26c59a](https://github.com/dyte-in/docs/commit/d26c59af9b61df13a07314f864f0f951c31caa3a)) -- **installation:** added installation doc ([0dfde20](https://github.com/dyte-in/docs/commit/0dfde207fbf73d67c00d482f495a55d5d71303e7)) -- **localUser:** add documentation for local user ([01684d9](https://github.com/dyte-in/docs/commit/01684d952a4dc9c84834cc7d76213625ec12f518)) -- **localUserDoc:** add documentation for local user ([763b0dd](https://github.com/dyte-in/docs/commit/763b0ddfbf062b05e8952bba67fffcfb2bc98b15)) -- merge upstream ([#30](https://github.com/dyte-in/docs/issues/30)) ([886e36c](https://github.com/dyte-in/docs/commit/886e36c37976fc6ba855e231aa9fdb4afb770098)) -- **newweb:** dual switcher and styling ([de7970a](https://github.com/dyte-in/docs/commit/de7970a2e2161390991b62f34be358da06e75300)) -- quickstart before installation ([7563ddc](https://github.com/dyte-in/docs/commit/7563ddc2129ba821cd7fbfde20817123b5f4601e)) -- redirection ([1e1007a](https://github.com/dyte-in/docs/commit/1e1007a8f6bce4c65a7cc9cccaebefbe82ef5202)) -- remove extra blank line from polls introduction ([1b52f8e](https://github.com/dyte-in/docs/commit/1b52f8e2ad7cd62ae8cef6800ba16ff63454a120)) -- remove random author ([5149bef](https://github.com/dyte-in/docs/commit/5149befeee10ac6b4ea44e3ed6fb0d8d1bc8888b)) -- rename react packages ([f3ec2d1](https://github.com/dyte-in/docs/commit/f3ec2d1795f13b742ba97e6b7245aa09d588f2af)) -- replace atomic design illustration ([3c8f595](https://github.com/dyte-in/docs/commit/3c8f595147417825da7db6aefd54d95d5c06373b)) -- **section-switcher:** update UI and added new pages ([6c08f44](https://github.com/dyte-in/docs/commit/6c08f4411479cc6978ee62ed4881eb8d7e40d7fc)) -- **selector:** removed react-web-core from selector ([b979376](https://github.com/dyte-in/docs/commit/b97937651079af1bc622304977222c3440b0c7b5)) -- **selector:** removed react-web-core from selector ([fe56a96](https://github.com/dyte-in/docs/commit/fe56a9628f00933768b1d00fe639d9844c048bc2)) -- setup sidebar ordering ([0d10fd1](https://github.com/dyte-in/docs/commit/0d10fd15814477e8e377f784d6bad53bb531d4cd)) -- ui-kit installation ([e522e34](https://github.com/dyte-in/docs/commit/e522e34c7dca0430753feee69e8eaa472b937c21)) -- ui-kit quickstart ([b3e5089](https://github.com/dyte-in/docs/commit/b3e5089014495a00535149f52dd686e5bed07aba)) -- ui-kit show usage examples passing peer or meeting objects ([34ec4d0](https://github.com/dyte-in/docs/commit/34ec4d08d356849902068c89b3b97e3ffe3f24e4)) -- update content for poll functions and fix typos ([473b11f](https://github.com/dyte-in/docs/commit/473b11fd1675e25bd12f8103b54368d11515efcb)) -- update docs from web-core ([281609b](https://github.com/dyte-in/docs/commit/281609b6f867b92f81296a6b2a3aa94a45726ad3)) -- update docs to latest release ([327029d](https://github.com/dyte-in/docs/commit/327029db7bee9c78cbbdd84a0ad690db181e2311)) -- update reference in react-web-core ([be83745](https://github.com/dyte-in/docs/commit/be837458ab590d20c2ac629671bae31f842676ee)) -- update ui-kit-react and ui-kit-angular names ([1c6ecfe](https://github.com/dyte-in/docs/commit/1c6ecfefbacd055767eb5167f2782eada72c770a)) -- update web-core reference ([57a2ffd](https://github.com/dyte-in/docs/commit/57a2ffd30991127d55e838094170c4f20ce19b8c)) -- updated web-core reference ([27313ce](https://github.com/dyte-in/docs/commit/27313ce29cebd86f8f4de430ebcf3cab2ddb968b)) -- updated web-core reference ([#13](https://github.com/dyte-in/docs/issues/13)) ([666f4a7](https://github.com/dyte-in/docs/commit/666f4a7dce5297e01b082fb8c49196942e7b334c)) -- use BrowserOnly in Quickstart component ([204811b](https://github.com/dyte-in/docs/commit/204811bbd98b76a176828709a033faf4f7054e01)) -- use local packages for ui-kit and web-core ([5969e5f](https://github.com/dyte-in/docs/commit/5969e5f57885b09283493e1cb28f4eeba8de5af2)) -- warning in SectionSwitchHandler ([4c6770a](https://github.com/dyte-in/docs/commit/4c6770ac1c6ae0ffda9a65b0686e2f273e936ef1)) -- **web-core:** participants ([a8e5142](https://github.com/dyte-in/docs/commit/a8e5142f726daccf1b356ed0a93d4b7326e0c06e)) -- **web-core:** update content for polls ([1b3ade1](https://github.com/dyte-in/docs/commit/1b3ade1132668345e484d2c41a7dfa3a130f282e)) - -### Features - -- [WIP] add web-core docs ([872e0b7](https://github.com/dyte-in/docs/commit/872e0b70aa745892970070a2b159bf0920169794)) -- add about page ([d491f84](https://github.com/dyte-in/docs/commit/d491f84b3e4caacc6cd61d1a4d4090243a08145d)) -- add angular quickstart ([a529453](https://github.com/dyte-in/docs/commit/a52945342660e69342843202e26321a2c916cd52)) -- add react native docs ([9a21e8b](https://github.com/dyte-in/docs/commit/9a21e8b23e405b04417172067c9046106193f3a0)) -- autogenerate api docs for web-core ([83a7697](https://github.com/dyte-in/docs/commit/83a76972b6db76bcef1105988000eaadada572c4)) -- copied reference to react-web-core ([7522200](https://github.com/dyte-in/docs/commit/75222002aae08c5aa677647c6060ef456c9ce850)) -- disable angular ui ([716478a](https://github.com/dyte-in/docs/commit/716478a14e5c351ddd8bdf731811da6f483a7543)) -- improve react ui kit docs ([e609b1c](https://github.com/dyte-in/docs/commit/e609b1cd6c22aa17b36ff44c057c95387a5e2927)) -- mock peers in grid ([afe2c5b](https://github.com/dyte-in/docs/commit/afe2c5bd8dda1cbe22d07456d6457c6d8264c994)) -- **polls:** add docs for polls ([ce4e9fb](https://github.com/dyte-in/docs/commit/ce4e9fb3ca6d7987e05222ce687aea7690750f98)) -- **quickstart:** added quickstart page and floating button ([408e81e](https://github.com/dyte-in/docs/commit/408e81ec1f294102d25a58d93aa7d6c92b307df3)) -- react ui kit docs, general fixes ([66ade31](https://github.com/dyte-in/docs/commit/66ade31967ce6b97dd7a5ec9e8a7127d0994a8bd)) -- refactored code, added section handler and sections ([2255383](https://github.com/dyte-in/docs/commit/2255383adcf3842cbbad7d8ecc0aea44a157aa87)) -- **switcher:** rename switcher header, disable selector in core SDK ([b83c32a](https://github.com/dyte-in/docs/commit/b83c32ae531476d3b0eae69964a863a18e02bdbd)) -- **ui-kit:** add ComponentsGrid ([c96c4c9](https://github.com/dyte-in/docs/commit/c96c4c9e09e7f7f8eaaa5ea93aea8a72ef95d1d5)) -- **ui-kit:** restructure docs, add placeholders ([3ed7e8e](https://github.com/dyte-in/docs/commit/3ed7e8e4d1dcd4184910aeecfbc48e531f8cb7e4)) -- **uikit:** add component preview ([dbdc2ea](https://github.com/dyte-in/docs/commit/dbdc2ea6dffd728d4096ae3a9ca6f95ae44a0970)) -- **uikit:** add components page ([8b4dcfd](https://github.com/dyte-in/docs/commit/8b4dcfd3002b936a3fe283acac44e8501e935a49)) -- **uikit:** add preview in quickstart ([845e572](https://github.com/dyte-in/docs/commit/845e5728fb773e84cb9658824d5eec4ae3cd9b69)) -- update docs script ([45b6a8b](https://github.com/dyte-in/docs/commit/45b6a8bdf5ee183088e630c7129d87dbff76c346)) -- update react-web-core API ([47a94ec](https://github.com/dyte-in/docs/commit/47a94ec5c7c11d81e82a84e5798a5ad481467485)) -- **versionedDoc:** add versioned documentation for local user ([64fd05d](https://github.com/dyte-in/docs/commit/64fd05d5533a38c94e23638cb7c822e41e22e4cd)) - -# [1.11.0](https://github.com/dyte-in/docs/compare/v1.10.4...v1.11.0) (2022-06-09) - -### Features - -- new SDK docs ([#50](https://github.com/dyte-in/docs/issues/50)) ([1aeacd8](https://github.com/dyte-in/docs/commit/1aeacd8536a1a16a1602dbbc0572c4a5b42ebf4e)) - -## [1.10.4](https://github.com/dyte-in/docs/compare/v1.10.3...v1.10.4) (2022-05-27) - -### Bug Fixes - -- **api/v1:** document validation error backend response code as 422 according to changes in backend ([b5162c3](https://github.com/dyte-in/docs/commit/b5162c3cd59f2c30d88b35fefba553e7088b1bd8)) - -## [1.10.3](https://github.com/dyte-in/docs/compare/v1.10.2...v1.10.3) (2022-05-13) - -### Bug Fixes - -- virtual background docs ([2762f69](https://github.com/dyte-in/docs/commit/2762f6946aba282c1de2df9cfbaf9f94f49333e7)) - -## [1.10.2](https://github.com/dyte-in/docs/compare/v1.10.1...v1.10.2) (2022-05-07) - -### Bug Fixes - -- **livestreaming:** clarify that livestreaming only works for h.264 codec ([d8df6a3](https://github.com/dyte-in/docs/commit/d8df6a3637310062a14fa45eb7115d0c9f67a1e4)) - -## [1.10.1](https://github.com/dyte-in/docs/compare/v1.10.0...v1.10.1) (2022-05-04) - -### Bug Fixes - -- **cli:** fix installation instructions for yarn ([#44](https://github.com/dyte-in/docs/issues/44)) ([de0c22a](https://github.com/dyte-in/docs/commit/de0c22a41d924fcbc2f852a31b0488d39674ba25)) - -# [1.10.0](https://github.com/dyte-in/docs/compare/v1.9.0...v1.10.0) (2022-05-04) - -### Features - -- **cli:** add a CLI section to the docs ([#43](https://github.com/dyte-in/docs/issues/43)) ([f261d9e](https://github.com/dyte-in/docs/commit/f261d9e5d6d484fa4bf005cae7d490d12bb40677)) - -# [1.9.0](https://github.com/dyte-in/docs/compare/v1.8.0...v1.9.0) (2022-05-04) - -### Features - -- **cli:** add a CLI section to the docs ([#42](https://github.com/dyte-in/docs/issues/42)) ([e1a9b50](https://github.com/dyte-in/docs/commit/e1a9b506a26794c1a21867d3067f8505de03344a)) - -# [1.8.0](https://github.com/dyte-in/docs/compare/v1.7.1...v1.8.0) (2022-05-01) - -### Features - -- **meetings:** add recordOnStart to create meeting route ([ae41208](https://github.com/dyte-in/docs/commit/ae412081a35d04d5ff88abc044231bd8238e7317)) - -## [1.7.1](https://github.com/dyte-in/docs/compare/v1.7.0...v1.7.1) (2022-04-07) - -### Bug Fixes - -- **api:** button placement with announcement ([6b443d6](https://github.com/dyte-in/docs/commit/6b443d6902b57663dfda263e7e08b215bd1c480b)) - -# [1.7.0](https://github.com/dyte-in/docs/compare/v1.6.2...v1.7.0) (2022-04-07) - -### Features - -- add announcement for upcoming sdks ([b9b4ebf](https://github.com/dyte-in/docs/commit/b9b4ebf6fd879e47a887f63d6cfca95fa6891950)) - -## [1.6.2](https://github.com/dyte-in/docs/compare/v1.6.1...v1.6.2) (2022-04-06) - -### Bug Fixes - -- **flutter:** fixing variable decls, wordings, type, etc ([0dbef27](https://github.com/dyte-in/docs/commit/0dbef27526341032ac8096ca56e5cb527ee3340e)) - -## [1.6.1](https://github.com/dyte-in/docs/compare/v1.6.0...v1.6.1) (2022-04-06) - -### Bug Fixes - -- **plugins:** waitlist Documentation ([#34](https://github.com/dyte-in/docs/issues/34)) ([6f00799](https://github.com/dyte-in/docs/commit/6f0079963584f5e948100c5087cde45cd9fbe28e)) - -# [1.6.0](https://github.com/dyte-in/docs/compare/v1.5.0...v1.6.0) (2022-04-06) - -### Bug Fixes - -- typo ([0d27263](https://github.com/dyte-in/docs/commit/0d27263f195406f42ad7d3e5ea03d370c12204f3)) -- **web:** hide outdated webinar information ([b63b03a](https://github.com/dyte-in/docs/commit/b63b03aacf04a1ec5c27307ca2c70cc33fb6980e)) -- **web:** put button addition behind meetinJoined event ([2befc7d](https://github.com/dyte-in/docs/commit/2befc7df0298c736527e107bab05425cc2bc30a7)) - -### Features - -- update web versions ([b01c3a8](https://github.com/dyte-in/docs/commit/b01c3a84406d4ce87026d881d7a19f3996f96a68)) - -# [1.5.0](https://github.com/dyte-in/docs/compare/v1.4.2...v1.5.0) (2022-04-06) - -### Bug Fixes - -- **api:** show current version in dropdown ([44f982e](https://github.com/dyte-in/docs/commit/44f982e331a91d2824ec800142614821da9ab8e7)) - -### Features - -- add postman collection button for v1 api ([5d62c5d](https://github.com/dyte-in/docs/commit/5d62c5de37541e6cc26a574fe75d5f72a9a1bb6d)) - -## [1.4.2](https://github.com/dyte-in/docs/compare/v1.4.1...v1.4.2) (2022-04-06) - -### Bug Fixes - -- **introduction:** Cleanup introduction. ([c33e322](https://github.com/dyte-in/docs/commit/c33e3225efd3360ec760e872b0acd44750d78e35)) - -## [1.4.1](https://github.com/dyte-in/docs/compare/v1.4.0...v1.4.1) (2022-04-06) - -### Bug Fixes - -- margin for headings in markdown ([7ccf408](https://github.com/dyte-in/docs/commit/7ccf408f877c28891a3cf9f0e80a507754bfb3d3)) - -# [1.4.0](https://github.com/dyte-in/docs/compare/v1.3.3...v1.4.0) (2022-03-28) - -### Features - -- **static:** update openapi spec for latest release ([#26](https://github.com/dyte-in/docs/issues/26)) ([2596086](https://github.com/dyte-in/docs/commit/259608649461709f4492063dbcea5f9ca3eca078)) - -## [1.3.3](https://github.com/dyte-in/docs/compare/v1.3.2...v1.3.3) (2022-03-17) - -### Bug Fixes - -- add default value for totalMinutes to fix stoplight overflow ([ea935ef](https://github.com/dyte-in/docs/commit/ea935ef31fb7510352768e47dce473b708365a05)) - -## [1.3.2](https://github.com/dyte-in/docs/compare/v1.3.1...v1.3.2) (2022-03-16) - -### Bug Fixes - -- **api:** add default value to all stats api ([a0fc6da](https://github.com/dyte-in/docs/commit/a0fc6da476ccbc8006605139fad808c798ece4ad)) - -## [1.3.1](https://github.com/dyte-in/docs/compare/v1.3.0...v1.3.1) (2022-03-16) - -### Bug Fixes - -- **v1:** document totalMinutes as floating point type instead of integer ([4b06bc2](https://github.com/dyte-in/docs/commit/4b06bc2e6b96ae6b3c6431521e33961cabf92f49)) -- **v1:** revert unrelated changes to upstream ([a76a311](https://github.com/dyte-in/docs/commit/a76a3118cbdfb85245e5a3529f79f9623bc3b2a8)) - -# [1.3.0](https://github.com/dyte-in/docs/compare/v1.2.1...v1.3.0) (2022-03-12) - -### Features - -- **recording:** Add maxSeconds param in startRecording ([04b0103](https://github.com/dyte-in/docs/commit/04b010353ff87ec3699feec21aa357d626054c2f)) - -## [1.2.1](https://github.com/dyte-in/docs/compare/v1.2.0...v1.2.1) (2022-03-10) - -### Bug Fixes - -- restore API spec for livestreams and active-sessions ([#17](https://github.com/dyte-in/docs/issues/17)) ([ced4b89](https://github.com/dyte-in/docs/commit/ced4b897cb11f680fb73c85f3b9443bf85beee8a)) - -# [1.2.0](https://github.com/dyte-in/docs/compare/v1.1.4...v1.2.0) (2022-03-07) - -### Features - -- show `edit this page` and last edited metadata ([c96eb0e](https://github.com/dyte-in/docs/commit/c96eb0ee6f49ed7766529f1a7f06a5caf023ac12)) - -## [1.1.4](https://github.com/dyte-in/docs/compare/v1.1.3...v1.1.4) (2022-03-06) - -### Bug Fixes - -- **codeowners:** updated team names in the repository ([314653a](https://github.com/dyte-in/docs/commit/314653a8eb432af5e0b1ddb67bbd19fffd62424d)) - -## [1.1.3](https://github.com/dyte-in/docs/compare/v1.1.2...v1.1.3) (2022-02-25) - -### Bug Fixes - -- **docsearch:** continue on error ([dc2bd9f](https://github.com/dyte-in/docs/commit/dc2bd9f3332b9bf760d2f23071d570c1c9702014)) -- **docsearch:** suppress error for status code 3 ([d86cf78](https://github.com/dyte-in/docs/commit/d86cf78a756a1b5ea54da97e2e1dd9930f8649e7)) - -## [1.1.2](https://github.com/dyte-in/docs/compare/v1.1.1...v1.1.2) (2022-02-25) - -### Bug Fixes - -- **crawl:** -it option fails in CI ([e5a9cc8](https://github.com/dyte-in/docs/commit/e5a9cc87585202e8e4200c7d9bf5fa891f998f16)) - -## [1.1.1](https://github.com/dyte-in/docs/compare/v1.1.0...v1.1.1) (2022-02-25) - -### Bug Fixes - -- **docsearch:** added environment variables for docsearch ([54c6bc1](https://github.com/dyte-in/docs/commit/54c6bc1049720c239fac9a83ac158116d6ce8cf7)) -- **docsearch:** rename environment variables to avoid clashes ([28ae6b7](https://github.com/dyte-in/docs/commit/28ae6b77aa74b969277159a2f32cbac5bbd5772c)) - -# [1.1.0](https://github.com/dyte-in/docs/compare/v1.0.2...v1.1.0) (2022-02-24) - -### Features - -- add usage docs in README ([aa4696a](https://github.com/dyte-in/docs/commit/aa4696ae3a749c31d377e700d620e356deac76b2)) - -## [1.0.2](https://github.com/dyte-in/docs/compare/v1.0.1...v1.0.2) (2022-02-23) - -### Bug Fixes - -- lint issues in GridLink ([0696524](https://github.com/dyte-in/docs/commit/0696524d4c04afc83110ce277f1281f92ac7a91f)) - -## [1.0.1](https://github.com/dyte-in/docs/compare/v1.0.0...v1.0.1) (2022-02-23) - -### Bug Fixes - -- **release:** trigger new release ([ea57abe](https://github.com/dyte-in/docs/commit/ea57abe8a5a63cb31a3cc19f88c6680c2ea692ed)) - -# 1.0.0 (2022-02-23) - -### Bug Fixes - -- add dyte-logo in footer, navbar enhancements ([33e4541](https://github.com/dyte-in/docs/commit/33e4541d778cbed3e33b93f0e8550d649de52080)) -- add dyte.io link to footer logo ([94c02d6](https://github.com/dyte-in/docs/commit/94c02d69c7794910685fe18fb70eac470dc67dc0)) -- **api:** glitch when navigating to /api/ from navbar ([dd891c7](https://github.com/dyte-in/docs/commit/dd891c75d734f200752c4101a405c8255fdbe092)) -- **api:** remove url so support link points to email ([e97aeed](https://github.com/dyte-in/docs/commit/e97aeed892f46ff99fbf59a2238fe09996d4704b)) -- **api:** response codes starting with `4` have a red color ([0be9e00](https://github.com/dyte-in/docs/commit/0be9e00ff44b351be2f918eba4d104619f8384be)) -- **api:** update api reference page design ([ebec7e4](https://github.com/dyte-in/docs/commit/ebec7e453ba03981d12b65373f79733b77d94da0)) -- **api:** updated responses design with color indicators ([e832637](https://github.com/dyte-in/docs/commit/e832637e82dc65338e44812158aa3d6c29c1d681)) -- broken links by typo ([598b0ed](https://github.com/dyte-in/docs/commit/598b0ed1d68186ce1aee01c340521d0a00c43c28)) -- build errors due to ssr for /api ([ea033ea](https://github.com/dyte-in/docs/commit/ea033eaa3d2490791045870d7a292a336b7672e1)) -- build fail for /api ([c05c3ee](https://github.com/dyte-in/docs/commit/c05c3ee947df1feaef114ec09552b35bdbba276e)) -- changed sidebars file for /docs ([2618c70](https://github.com/dyte-in/docs/commit/2618c705489cdce98db3dc08a965a17af0d85809)) -- compress pngs ([fcd60e0](https://github.com/dyte-in/docs/commit/fcd60e04c1264e4e5c8b4efa79c3aa7e42dd82fd)) -- context switch lag - now using history.push ([56f23da](https://github.com/dyte-in/docs/commit/56f23da1c71e6b8b6cd19d2160ea6af028deab71)) -- context switcher - invalid docId ([ebbfc30](https://github.com/dyte-in/docs/commit/ebbfc3096d96e7a9e159d76cff8cfc6ea2e3a35d)) -- contextswitcher glitch in /docs fixed ([0e659f2](https://github.com/dyte-in/docs/commit/0e659f2efd98d0048686cb80652909d0c3bdc28e)) -- **crawl:** add `guides` section to crawler ([9eb1ac6](https://github.com/dyte-in/docs/commit/9eb1ac65e233cdf9da40c03eced00701ddc80d26)) -- **deploy:** downgrade elements and changed buffer fallback ([4b02f75](https://github.com/dyte-in/docs/commit/4b02f75c01df072887c0eb2a462f2fa59370a204)) -- **docs:** add `webinar` doc in guides sidebar ([24e6ae0](https://github.com/dyte-in/docs/commit/24e6ae03aa0fff17d0099327a3a6c5284e83acf7)) -- docsearch final config, updated /api/ path ([e8f730d](https://github.com/dyte-in/docs/commit/e8f730df196ac974ebaeeebbdbb078c090b33afe)) -- **docs:** home description meta tag set properly now ([d9c76f9](https://github.com/dyte-in/docs/commit/d9c76f98b592d06f04042928ed706eb81648d9c1)) -- **docs:** sidebar parity for `docs` and `guides` ([2b9623f](https://github.com/dyte-in/docs/commit/2b9623f96a20f5aa68d788553fb2a9527eae64e9)) -- **docs:** update how-dyte-works.png image 🚀 ([c9cfd6c](https://github.com/dyte-in/docs/commit/c9cfd6c6d7ec39cf05aa1404ef8e98fea9394cc9)) -- **docs:** update meeting-ui images for mobile, add preview image ([8c3c6d3](https://github.com/dyte-in/docs/commit/8c3c6d3b3646e1ac3bc2be1885106fe041a587ad)) -- **docs:** update mobile meeting-ui diagram ([cf12279](https://github.com/dyte-in/docs/commit/cf1227957c526a1287cf1e88430eadadf44ae82b)) -- **docs:** updated images and fixed metadata content ([d7bd790](https://github.com/dyte-in/docs/commit/d7bd790d4c438763eb811ba65c283c8a42363600)) -- enhanced ContextSwitcher UI, code refactored ([d5ab7b3](https://github.com/dyte-in/docs/commit/d5ab7b3913d4dc53b33f63a0476245ecb118fd18)) -- **flutter:** meeting mdx table methods intendation ([83be068](https://github.com/dyte-in/docs/commit/83be06823cf6dd0dcfad04bbf22743c83ae1f8bd)) -- **flutter:** meeting.mdx methods intendation ([3853f43](https://github.com/dyte-in/docs/commit/3853f43cb51529d7d140c7f3699dc54e273f99d3)) -- **footer:** updated footer text and replaced form with sign up link ([e0f299f](https://github.com/dyte-in/docs/commit/e0f299fb8c1ac63485669c923d7192c04c42688b)) -- **link:** update demo app link to `app.dyte.in` ([24a85f7](https://github.com/dyte-in/docs/commit/24a85f7c45ca0684db55756ef15330fc095313cf)) -- lint issues ([e9f9284](https://github.com/dyte-in/docs/commit/e9f928473afe3ca1de3ea68ef2c7217341d0c75f)) -- make docsearch detect subsections with selectors ([ac55d1d](https://github.com/dyte-in/docs/commit/ac55d1df6ea2053a4a329f2d5fc6b4221ee64dba)) -- make sidebars not collapsible in react, flutter ([2729ddb](https://github.com/dyte-in/docs/commit/2729ddb6f57ea3640463882c8275f31e225f0101)) -- mobile ContextSwitcher uses tailwindcss, refactor ([f665dcf](https://github.com/dyte-in/docs/commit/f665dcfeeaae99e8ece033309895f2d93cbbcc8e)) -- now working with older node and with yarn ([36e71f2](https://github.com/dyte-in/docs/commit/36e71f22a51897fe3d054260a784596bfabd2f20)) -- proper links to sample apps ([11cc9d6](https://github.com/dyte-in/docs/commit/11cc9d6ca26436b436418fba227daa3a9d0c6d1a)) -- redesigned navbar, icons changed, markdown sample added ([52a1427](https://github.com/dyte-in/docs/commit/52a14273b40e6c048ed54125dc0533ee4ec2cbb0)) -- **release:** trigger new release ([031ea20](https://github.com/dyte-in/docs/commit/031ea203e7f693d310bfe9471ff0baee334375c3)) -- remove basePath as warning is given for invalid basePath ([9eef8a7](https://github.com/dyte-in/docs/commit/9eef8a7590a2a259284f3077969ceedb58d59fcb)) -- remove broken link in react-native ([1255656](https://github.com/dyte-in/docs/commit/1255656aed62347529128b8db1fd2479e48a98bc)) -- remove dummy blog posts and add test post ([68017da](https://github.com/dyte-in/docs/commit/68017dac2854545933214712f54c3aa005bdb2a4)) -- remove navbar lv0 items, update docsearch config ([89e05e2](https://github.com/dyte-in/docs/commit/89e05e2c2fccf8ae61a11ac30a328448874cbcf0)) -- remove yarn.lock ([b97a1dc](https://github.com/dyte-in/docs/commit/b97a1dc4b9ea2d8a6046e56d541ff188dc4df694)) -- removed `next` in prod build, updated docsearch creds ([01c3b43](https://github.com/dyte-in/docs/commit/01c3b430d8ae00db192d0b0c795603fdd71f3b7b)) -- restructure navbar links ([4a945f7](https://github.com/dyte-in/docs/commit/4a945f77b97ac1f2a2d6dabf08f9a2aee7b78ce4)) -- sidebar now sticks again ([ca7423d](https://github.com/dyte-in/docs/commit/ca7423df6633010d14f91992ab813031af1d3585)) -- **stoplight:** remove font size, update package ([2c11e2f](https://github.com/dyte-in/docs/commit/2c11e2f89f4710916b29c1c8311ce42b0ba7c668)) -- tailwindcss resets removed to fix typography ([140d187](https://github.com/dyte-in/docs/commit/140d187ff0cdf13d16372d718bb6cf7f6957c51e)) -- theme switcher position fixed, added dev portal link ([9e7ac72](https://github.com/dyte-in/docs/commit/9e7ac72f03f2adb323292d695100e6446ac29a89)) -- typo ([b3204e1](https://github.com/dyte-in/docs/commit/b3204e19350ecfa924809e153e231ee834ff61db)) -- typo `shownn`, embed code typo ([0ebd057](https://github.com/dyte-in/docs/commit/0ebd057d79bb553b40b8104c2dda1ff40481d0b4)) -- typo in android docs ([cc7883d](https://github.com/dyte-in/docs/commit/cc7883dfa34b088aa764fe45a4c2b1962bbe3512)) -- **ui:** .string color in textrequestbody was not visible ([8f85da2](https://github.com/dyte-in/docs/commit/8f85da28ee634c45ebc3e523e70d44841b52556d)) -- **ui:** add react native icon in getstarted section ([e2854f3](https://github.com/dyte-in/docs/commit/e2854f34909592dc1a594c186da898010e5839f8)) -- **ui:** added hashchange detection in introduction page ([33de9ae](https://github.com/dyte-in/docs/commit/33de9ae85bb8b0f73188916224ad8159affe0bcf)) -- **ui:** added primary-100 for lighter primary shade (navbar) ([19c6737](https://github.com/dyte-in/docs/commit/19c6737eb3c4af9240588df9e9b8b0a58e8ef456)) -- **ui:** alignment of ([f61ef00](https://github.com/dyte-in/docs/commit/f61ef006bd1bcc2e91f8649ad1c9f82ccc985065)) -- **ui:** animate-pulse added for `dot-after` utility class ([093e073](https://github.com/dyte-in/docs/commit/093e07362bda8ceb08368b0b476ff619c205b0b7)) -- **ui:** api ref code color improvements ([3fc917d](https://github.com/dyte-in/docs/commit/3fc917decd13558642874a7877449187a171e63a)) -- **ui:** api reference - added border between right sections, response button ([7a1806c](https://github.com/dyte-in/docs/commit/7a1806cbffc3ea91c747b4cc6e9ea2df78205801)) -- **ui:** api reference border color changed ([1dd181d](https://github.com/dyte-in/docs/commit/1dd181d13a6ae134e4249377d1938e940c6903b6)) -- **ui:** api reference design update, revert css loading ([63cc0dd](https://github.com/dyte-in/docs/commit/63cc0dd02ce401005e9eae45f1abff0a14993823)) -- **ui:** api reference design updates, spacing etc ([fbd8d26](https://github.com/dyte-in/docs/commit/fbd8d262db6ff1e3f8d7c987753e9674237820d6)) -- **ui:** API reference ui customized, search box animated ([23b67df](https://github.com/dyte-in/docs/commit/23b67df842d5d038995de880fd8df8234ae165a0)) -- **ui:** api version switcher design cleanup ([a2f610c](https://github.com/dyte-in/docs/commit/a2f610c44fbf65754a47304d745a5148ec7628cc)) -- **ui:** change highlighted line color ([38794ec](https://github.com/dyte-in/docs/commit/38794ec2b1c48d421beecfb559e3ad232a91bbb6)) -- **ui:** changed API reference code colors ([89be71d](https://github.com/dyte-in/docs/commit/89be71d35cc894daf6169eb36e2e5963e9de60b9)) -- **ui:** changed BlogIcon ([6125911](https://github.com/dyte-in/docs/commit/61259114863968f9a1e998eca13343b046d9e1bc)) -- **ui:** changed ui of external links in navbar ([26795d8](https://github.com/dyte-in/docs/commit/26795d899d047c2e9c7bfceeac2ea0490cd3d8e8)) -- **ui:** dark mode color, code refactor (css) ([0252c55](https://github.com/dyte-in/docs/commit/0252c557488d9f5352829657c043c9f1fc0fa334)) -- **ui:** dark mode primary color ([ed330ed](https://github.com/dyte-in/docs/commit/ed330ed1f5b2e91508a5b1244600772141c33309)) -- **ui:** design updates, stoplight sentence case fix ([f8e8751](https://github.com/dyte-in/docs/commit/f8e87512b1e6205fe30a819d96c680f93259528d)) -- **ui:** dropdown design is consistent, added social links ([89d3290](https://github.com/dyte-in/docs/commit/89d3290bbc415b63a947918ea2f4cadbc7c255af)) -- **ui:** font sizes and spacing in elements updated ([e1c3839](https://github.com/dyte-in/docs/commit/e1c3839c0d0af9526e060b62cdb4ca8c0f4aeb45)) -- **ui:** gridlink shadow, showcase, dark mode primary color update ([df24de4](https://github.com/dyte-in/docs/commit/df24de47cac49dafc112cdd85d7a6ec63ef37f09)) -- **ui:** hashchange error in mobile fixed ([f365d37](https://github.com/dyte-in/docs/commit/f365d37fe2d9b2ff167bca901a68f450f448c49d)) -- **ui:** hidden version dropdown in mobile sidebar ([eb62e54](https://github.com/dyte-in/docs/commit/eb62e549b1d553b1850262e4394ddedfe4775a2b)) -- **ui:** icon background blended with text ([6351fc4](https://github.com/dyte-in/docs/commit/6351fc401b216a26ad84e4e4067d330d151a8ea9)) -- **ui:** increase base font-size for elements ([5d36c01](https://github.com/dyte-in/docs/commit/5d36c01592295a5e45891a8649221385d9bcd4a3)) -- **ui:** increase sidebar width as contextswitcher and dropdown break on smaller screens ([c60d2b7](https://github.com/dyte-in/docs/commit/c60d2b70bfe35d2f7c859607ec0ac9313d16b333)) -- **ui:** increased space between left sidebar and container in large screens ([45ca0fb](https://github.com/dyte-in/docs/commit/45ca0fb4692de6e9133f39833bf858326505c0f7)) -- **ui:** left and right scrollbar removed, added scrollbar styles ([b576be1](https://github.com/dyte-in/docs/commit/b576be13f303a6e28153e4ccd1af11e22465b302)) -- **ui:** made /api responsive on mobile ([8be458b](https://github.com/dyte-in/docs/commit/8be458bb816ec32a47d9e02adc4caf2210ea311c)) -- **ui:** make scrollbar corner transparent ([4a772d8](https://github.com/dyte-in/docs/commit/4a772d87a65da9b4b23bc32539d8c5e37fe8b068)) -- **ui:** minor ui fixes in API reference ([7f73264](https://github.com/dyte-in/docs/commit/7f732647c6fe3dac119aaecd751d2c0b9271e067)) -- **ui:** move response tab buttons to the right ([f46196c](https://github.com/dyte-in/docs/commit/f46196c73ffd32ddf0be1509518bc992828f5f33)) -- **ui:** now using "Source Sans Pro" and "Source Code Pro" ([30b943b](https://github.com/dyte-in/docs/commit/30b943b6c7fe457a4614921090a5a20b01a1680f)) -- **ui:** padding in mobile reset to default ([b52911f](https://github.com/dyte-in/docs/commit/b52911f9c2cf701c1fb32b1961b7543ad1791f28)) -- **ui:** position of sidebar collapse button ([cb7652e](https://github.com/dyte-in/docs/commit/cb7652e0595689c89730b94da9fee1286049561b)) -- **ui:** refactored api reference design ([8fc46ed](https://github.com/dyte-in/docs/commit/8fc46ed5e68b89c1b346c4db08da0d7f6e6d1602)) -- **ui:** remove current page highlight from api version switcher ([612681f](https://github.com/dyte-in/docs/commit/612681f419f2370a82279a0032e0aa1bb765e577)) -- **ui:** remove icons from introduction (how to use) ([ce353c7](https://github.com/dyte-in/docs/commit/ce353c7525fb2d016fd51e53b2351c9ffa379a9e)) -- **ui:** search kbd color change, sidebar spacing increased ([ae6ca2e](https://github.com/dyte-in/docs/commit/ae6ca2e95888ee72ed0855d1a0fa005f44826f88)) -- **ui:** search shortcut, backtotop position changed ([68dbecf](https://github.com/dyte-in/docs/commit/68dbecf7e95c97711272df2aee29c58b75a81930)) -- **ui:** sidebar toggle button position is now fixed ([3760c9e](https://github.com/dyte-in/docs/commit/3760c9ee599883df5031820a78c42b057590b9f0)) -- **ui:** typo which hid the hamburger menu in mobile ([100897e](https://github.com/dyte-in/docs/commit/100897e207cb4df0e897931ad0d1f19e2a92137e)) -- **ui:** update footer form ([3d5248f](https://github.com/dyte-in/docs/commit/3d5248f0e06f9d66d7dc6a79cdd7e5970593b83c)) -- **ui:** update footer sign up link design ([5f03e19](https://github.com/dyte-in/docs/commit/5f03e19e92167ef4ec7e52049b8fe526705f088a)) -- **ui:** update GridLinks UI in introduction page ([3fef0b2](https://github.com/dyte-in/docs/commit/3fef0b20bb597edde724455eab2d22174731e3b6)) -- **ui:** update heading colors for dark mode ([af2ee62](https://github.com/dyte-in/docs/commit/af2ee6218841efcef477a30ce50f67c86ce4ed20)) -- **ui:** update links in footer ([30a06bf](https://github.com/dyte-in/docs/commit/30a06bf51002443d8a0d891dd4e82dd708d75bbb)) -- **ui:** update stoplight elements colors ([e95d0aa](https://github.com/dyte-in/docs/commit/e95d0aabf8125a47b22faf555058f9f9667ef169)) -- **ui:** updated GetStartedCard design ([b9cd653](https://github.com/dyte-in/docs/commit/b9cd6532c6019b682e9702de9c4953ed8aa3a31a)) -- **ui:** updated leading for mobile ([e6313fa](https://github.com/dyte-in/docs/commit/e6313faae88c6c988d9cacb470ba88a773b45ece)) -- **ui:** updated navbar design ([6e61a64](https://github.com/dyte-in/docs/commit/6e61a64d91b046b5ba786c4179485e73eb33b9aa)) -- **ui:** updated styles, changed prism theme ([7bc0dc2](https://github.com/dyte-in/docs/commit/7bc0dc2c4a16ea97b249bc3911bd60b155e9dcb9)) -- **ui:** use drop-shadow instead of shadow for showcase ([aa8d097](https://github.com/dyte-in/docs/commit/aa8d097629421903f2eb207a8db4a8a9c86e7a75)) -- **ui:** use inline svg instead of via ([ca5b861](https://github.com/dyte-in/docs/commit/ca5b861ba4be86100298bc666cd406cf3521ecbd)) -- **ui:** using fira sans and fira code ([1a67e90](https://github.com/dyte-in/docs/commit/1a67e90665027991fd72b65b32e06c74e145010e)) -- **ui:** version dropdown now visible in mobile sidebar (build) ([856dca1](https://github.com/dyte-in/docs/commit/856dca1b88608b4454518e0a36a1aa7ea65036f0)) -- **ui:** version dropdown text overflow ([9a9ddec](https://github.com/dyte-in/docs/commit/9a9ddec867ab6b7c99e003116d28b5f07539a3f8)) -- update elements and refactor ([789cb5d](https://github.com/dyte-in/docs/commit/789cb5d1e36fb3bbb8419b5a34150b124f75a2fc)) -- updated API ref props ([e7e81c4](https://github.com/dyte-in/docs/commit/e7e81c47fae36fdb26c06e282766e31cf4b6b944)) -- updated docmanager to hide for /docs ([a46c837](https://github.com/dyte-in/docs/commit/a46c837928d942adbe705162616919ab25e67b1f)) -- updated handlePreferredDoc code, added comments ([221d2d5](https://github.com/dyte-in/docs/commit/221d2d57ed0d4c5649e42e7a1232f2157c41e672)) -- updated sidebar for guides section, design updates ([330952d](https://github.com/dyte-in/docs/commit/330952df634d30d2c988090b697bbf8d36741a8a)) -- use same sidebar content for `guides` and `docs` ([dd13999](https://github.com/dyte-in/docs/commit/dd13999fa7226a5ab323efe0c584abc9dad497f3)) -- **webhooks:** updated docs for organizedBy field in webhook body ([d37cc6b](https://github.com/dyte-in/docs/commit/d37cc6bcc7f040177bdfc6a2b0a2db8d2ab5f3d3)) -- **webpack:** buffer require() ([a7f1aaf](https://github.com/dyte-in/docs/commit/a7f1aaf892376af9c6660169ea1d74c49287c008)) -- **webpack:** provide buffer in plugin ([8b78819](https://github.com/dyte-in/docs/commit/8b78819e59c5e73aafcdf2029378ae9fa8338e3f)) -- **web:** setupscreen is true by default ([e780dc8](https://github.com/dyte-in/docs/commit/e780dc82996fda2d0c46bce2a43c80d4fa18640b)) - -### Features - -- add a custom className for image showcase ([22dbf9e](https://github.com/dyte-in/docs/commit/22dbf9eb11019d6a073a5cce281d4f6a80c72810)) -- add crawl script ([74f1454](https://github.com/dyte-in/docs/commit/74f1454761bea056e8753247b0c3999eebefc7b1)) -- add Dockerfile for testing ([29b4874](https://github.com/dyte-in/docs/commit/29b4874c4cc8fbdea691519bdea7f52fcf4981f8)) -- add embed docs ([b637879](https://github.com/dyte-in/docs/commit/b63787927b8c1b0341128dca265f3a073ba1e198)) -- add fake ios version ([d198019](https://github.com/dyte-in/docs/commit/d198019f3a871c3032ca3b985cffcd9d69b7fea1)) -- add initial redesigned getstarted section ([3709302](https://github.com/dyte-in/docs/commit/37093027d8f65e1c3e9cea0dc5fd3625b435bc5d)) -- add ios updates ([fbfa540](https://github.com/dyte-in/docs/commit/fbfa5406b716577521bdf9012c8d236c0ae38539)) -- add metadata for /api route ([e3265df](https://github.com/dyte-in/docs/commit/e3265df8e176f64ca76f58087dbafc214fdd19d8)) -- add sample docs for demo ([d175788](https://github.com/dyte-in/docs/commit/d17578871e461eab3ded68b4deb65fbc7f1d8195)) -- add setLabel API docs ([158f091](https://github.com/dyte-in/docs/commit/158f0914a9493672c540bfd23df2f65a65dade60)) -- add tailwindcss 🚀 ([16a6999](https://github.com/dyte-in/docs/commit/16a69997e89d5aa877ee5fa12445c6a8bb225514)) -- add v2 api with version switcher dropdown ([172a025](https://github.com/dyte-in/docs/commit/172a025c177fe2f3c315bababfbc7139451301e7)) -- add videos for mobile and desktop ([f82afde](https://github.com/dyte-in/docs/commit/f82afde49600a775435878fbe527aca4b5cea248)) -- add videos in customize ui pages for react and js, refactored code ([#26](https://github.com/dyte-in/docs/issues/26)) ([57a05a0](https://github.com/dyte-in/docs/commit/57a05a001d71de5625c599fd1deea18d1670344c)) -- add yellow status color for 5xx response codes ([a0ef927](https://github.com/dyte-in/docs/commit/a0ef92730694fb6344a61a4c5f340085893c6872)) -- added `tailwindcss/nesting` for nested css ([2470b7c](https://github.com/dyte-in/docs/commit/2470b7ca43539906543932451b60cacf8a0b12af)) -- added algolia docsearch code ([14c3092](https://github.com/dyte-in/docs/commit/14c309201539f922d77e40c702700dff3830e287)) -- added fallback loading indicator for /api ([8aea366](https://github.com/dyte-in/docs/commit/8aea366525c0dad77394c91edf794b9314046bcb)) -- added initial introduction page ([5e3f92e](https://github.com/dyte-in/docs/commit/5e3f92eca4223113cef0fba435b4d2c1587d7bdf)) -- added known vector icons issue in docs ([92ed868](https://github.com/dyte-in/docs/commit/92ed868a158278626a5a94e07e3395a7ef4a835c)) -- added logic for context switching ([477d115](https://github.com/dyte-in/docs/commit/477d115e5f0a6f5ea4cf436afd4188cbb53f905e)) -- added OpenAPI docs at /api 🚀 ([6e38d93](https://github.com/dyte-in/docs/commit/6e38d93d3bf11b690c2102d560fc3fb125a58dc3)) -- added posthog ([499310e](https://github.com/dyte-in/docs/commit/499310e0fcc31bad84c7df07efdd134169aa2d30)) -- added social links in footer ([074e40d](https://github.com/dyte-in/docs/commit/074e40d210ca2a7548be4e6b5815ec2129aa90e6)) -- added version dropdown ([d15fa6a](https://github.com/dyte-in/docs/commit/d15fa6a29a9384e433e69e123eaf1b9ac6daeced)) -- bumped docusaurus, fixed new version issues ([a2fa15f](https://github.com/dyte-in/docs/commit/a2fa15f0b91bea2ca29204fcff1fcdda87fe83e9)) -- **docs:** add steps to write docs in README ([1757190](https://github.com/dyte-in/docs/commit/175719098dcfa507d3b39cb1ba2f779016bf8451)) -- **dx:** add linting: react, prettier ([5a0edb0](https://github.com/dyte-in/docs/commit/5a0edb00b0be6b1fde3df381eded6d368f1fe70c)) -- enable dropdown in mobile sidebar, add shadow to showcase ([135377f](https://github.com/dyte-in/docs/commit/135377f359c472209ec6957ec02bfb27c2258e56)) -- enable search ([3d1d4b1](https://github.com/dyte-in/docs/commit/3d1d4b1440cd58b1a8bec233b6e4031bee461b24)) -- **flutter:** version 0.5.x docs ([b55b0e7](https://github.com/dyte-in/docs/commit/b55b0e7bf5cdbfaab3467faefc3843c20d6675ff)) -- **iframe:** add doc for handling meetingEnded ([e45392e](https://github.com/dyte-in/docs/commit/e45392e71e344654f17a0e0f467ecebbc47b3afb)) -- mobile sidebar added ([7af1266](https://github.com/dyte-in/docs/commit/7af12668995b427d4e4fac1d4a1dd44de0d3c17b)) -- **mobile-sdks:** added localMediaConnected docs ([d94f7f4](https://github.com/dyte-in/docs/commit/d94f7f4a3b60939e3807ebf2f630cad363a36f12)) -- **mobile-sdk:** Updated sdk to latest versions ([01d0920](https://github.com/dyte-in/docs/commit/01d0920fe256a6b6dc3b48e282c9cc03259dd0ad)) -- new design (header, footer, sidebar, context switcher) ([82ec9b9](https://github.com/dyte-in/docs/commit/82ec9b90d07240258184cc3cdd7f1db2bfcc3cfd)) -- new sidebar minimize ui, other ui updates ([3226b1a](https://github.com/dyte-in/docs/commit/3226b1a3885405bb58172d4add7d859c8d013c7d)) -- now using Inter font ([5de8e0f](https://github.com/dyte-in/docs/commit/5de8e0f485f8bf89c047f4d495f14c35e48a1820)) -- polish ([653d033](https://github.com/dyte-in/docs/commit/653d03311ccf448db136ef50b4023a435e3cf2d5)) -- remove blog and add algolia creds ([a731a6a](https://github.com/dyte-in/docs/commit/a731a6a49442311566e8b4e84b7e8e0bb3f8658d)) -- **rn:** update docs for 0.3.0, 0.4.0 ([a16938a](https://github.com/dyte-in/docs/commit/a16938a43d72d2de3a768c8e44740f861b0c1d28)) -- **rn:** update to 13.x, add label docs ([7e8a283](https://github.com/dyte-in/docs/commit/7e8a283200f1129289c8a965da3bafb6a68210fd)) -- set dark mode as default ([ace13ad](https://github.com/dyte-in/docs/commit/ace13addcd17275547e297edce6a1a679dd2cd15)) -- **ui:** added dot-after utility for adding a dot after an element ([f056bc8](https://github.com/dyte-in/docs/commit/f056bc8b6efaabaf95951c027a5aaf23a350218a)) -- update api v1 with webhook `enabled` field ([94141e6](https://github.com/dyte-in/docs/commit/94141e6bab5249c5765b6730f1b467bdf6e5986b)) -- update docs according to release and version number ([649943d](https://github.com/dyte-in/docs/commit/649943d15c53b7a958c4e1d6809409fb6ea89353)) -- update sidebar design ([39afd2e](https://github.com/dyte-in/docs/commit/39afd2ee2444c32357724b5b0258b3100d3659cb)) -- upgrade `tailwindcss` to `3.0.19` ([2c088ec](https://github.com/dyte-in/docs/commit/2c088ec630f3041f17954b9979b4bcd465323b12)) -- use `groupId` to group `Tabs` selections ([ea3d967](https://github.com/dyte-in/docs/commit/ea3d967a876778d2167b7c4e5f1ccadd9f5d9765)) -- version updates ([78ab521](https://github.com/dyte-in/docs/commit/78ab52102f09f97931f3a93639eac9a9565c8007)) -- **web:** i18n support ([fd042c8](https://github.com/dyte-in/docs/commit/fd042c8893491daf9fe4ff47e926f7798192e37b)) -- **websdk:** update to 0.19.x ([76add80](https://github.com/dyte-in/docs/commit/76add80271c60585e8a78fda3be8a0b909b9dfd3)) - -# 1.0.0 (2022-02-22) - -### Bug Fixes - -- add dyte-logo in footer, navbar enhancements ([33e4541](https://github.com/dyte-in/docs/commit/33e4541d778cbed3e33b93f0e8550d649de52080)) -- add dyte.io link to footer logo ([94c02d6](https://github.com/dyte-in/docs/commit/94c02d69c7794910685fe18fb70eac470dc67dc0)) -- **api:** glitch when navigating to /api/ from navbar ([51d97ac](https://github.com/dyte-in/docs/commit/51d97ac1e50dcdd33d7d77ff265e96168e66a027)) -- **api:** remove url so support link points to email ([b79beea](https://github.com/dyte-in/docs/commit/b79beea3114a0b8e768974f894f64dd3397a3b02)) -- **api:** response codes starting with `4` have a red color ([8d2499a](https://github.com/dyte-in/docs/commit/8d2499ad09bc5274059c37f657acb30b10aea8b4)) -- **api:** update api reference page design ([4e2b3d4](https://github.com/dyte-in/docs/commit/4e2b3d407aae4e1ada41d19a624d88b6225c3fbb)) -- **api:** updated responses design with color indicators ([fcd6b0a](https://github.com/dyte-in/docs/commit/fcd6b0a497c1ff6299e1f4dffd5a148a8effa3d0)) -- broken links by typo ([fff68a1](https://github.com/dyte-in/docs/commit/fff68a1e42f4f0b0e87fb33dcad092c13a925e20)) -- build errors due to ssr for /api ([d2881a7](https://github.com/dyte-in/docs/commit/d2881a741dcb20215db397f95ece7ec524b00232)) -- build fail for /api ([c05c3ee](https://github.com/dyte-in/docs/commit/c05c3ee947df1feaef114ec09552b35bdbba276e)) -- changed sidebars file for /docs ([773e065](https://github.com/dyte-in/docs/commit/773e065394c09f73433552f91109352497058dc4)) -- compress pngs ([68d5741](https://github.com/dyte-in/docs/commit/68d57417dc8796c597c06fce257931606c70832a)) -- context switch lag - now using history.push ([56f23da](https://github.com/dyte-in/docs/commit/56f23da1c71e6b8b6cd19d2160ea6af028deab71)) -- context switcher - invalid docId ([ebbfc30](https://github.com/dyte-in/docs/commit/ebbfc3096d96e7a9e159d76cff8cfc6ea2e3a35d)) -- contextswitcher glitch in /docs fixed ([6c18f9d](https://github.com/dyte-in/docs/commit/6c18f9d7b5ec5d0dcc027215aea7fa1b2448e755)) -- **crawl:** add `guides` section to crawler ([62b8ee4](https://github.com/dyte-in/docs/commit/62b8ee47690e0bdcf0376dbd5c6db3e31adf4735)) -- **deploy:** downgrade elements and changed buffer fallback ([4b02f75](https://github.com/dyte-in/docs/commit/4b02f75c01df072887c0eb2a462f2fa59370a204)) -- **docs:** add `webinar` doc in guides sidebar ([a15816f](https://github.com/dyte-in/docs/commit/a15816f18fb0277c7905b2120c1c376c5afa3a8b)) -- docsearch final config, updated /api/ path ([93bc744](https://github.com/dyte-in/docs/commit/93bc74458fec1b0dd3ad377182b3241cf592860d)) -- **docs:** home description meta tag set properly now ([a4f6d69](https://github.com/dyte-in/docs/commit/a4f6d699ddd48d3323225917515c5c9e32f7991c)) -- **docs:** sidebar parity for `docs` and `guides` ([2e82ffd](https://github.com/dyte-in/docs/commit/2e82ffd9f5eac0342b9b45aafb15b7a1c93ec358)) -- **docs:** update how-dyte-works.png image 🚀 ([ced66d0](https://github.com/dyte-in/docs/commit/ced66d044082467236c298324a6ab3a5ed7fc546)) -- **docs:** update meeting-ui images for mobile, add preview image ([0449a72](https://github.com/dyte-in/docs/commit/0449a72066c930b230e534e5a7377f611426b023)) -- **docs:** update mobile meeting-ui diagram ([d92138b](https://github.com/dyte-in/docs/commit/d92138bac6052717895d118614a80cde0dcda061)) -- **docs:** updated images and fixed metadata content ([e54cc7a](https://github.com/dyte-in/docs/commit/e54cc7a35c055867ed73907f73d9290a0ecf4a9b)) -- enhanced ContextSwitcher UI, code refactored ([d5ab7b3](https://github.com/dyte-in/docs/commit/d5ab7b3913d4dc53b33f63a0476245ecb118fd18)) -- **flutter:** meeting mdx table methods intendation ([c3d8fbf](https://github.com/dyte-in/docs/commit/c3d8fbfa01c0b24755047baeec6cf4deda485c2f)) -- **flutter:** meeting.mdx methods intendation ([336c8be](https://github.com/dyte-in/docs/commit/336c8bee42ec214813d2682f0099a74ebce5cd9d)) -- **footer:** updated footer text and replaced form with sign up link ([e7aa701](https://github.com/dyte-in/docs/commit/e7aa701d0a4438c38ba84f303df98d9326b16e79)) -- **link:** update demo app link to `app.dyte.in` ([1164181](https://github.com/dyte-in/docs/commit/1164181a1e0712fbfac529bbbd076a2795364205)) -- make docsearch detect subsections with selectors ([2872783](https://github.com/dyte-in/docs/commit/2872783011f95a40e15222ea2509d39062f1dfef)) -- make sidebars not collapsible in react, flutter ([4fd70e0](https://github.com/dyte-in/docs/commit/4fd70e0d67cd17b6a3f76c2bf5bdd5606fed1f59)) -- mobile ContextSwitcher uses tailwindcss, refactor ([f665dcf](https://github.com/dyte-in/docs/commit/f665dcfeeaae99e8ece033309895f2d93cbbcc8e)) -- now working with older node and with yarn ([279cff9](https://github.com/dyte-in/docs/commit/279cff99f50b39e5e84aaa9194f19fa1993866c0)) -- proper links to sample apps ([067ace0](https://github.com/dyte-in/docs/commit/067ace06c9d6a5802d40c264041cf63d374c8275)) -- redesigned navbar, icons changed, markdown sample added ([52a1427](https://github.com/dyte-in/docs/commit/52a14273b40e6c048ed54125dc0533ee4ec2cbb0)) -- remove basePath as warning is given for invalid basePath ([9eef8a7](https://github.com/dyte-in/docs/commit/9eef8a7590a2a259284f3077969ceedb58d59fcb)) -- remove broken link in react-native ([f4602a7](https://github.com/dyte-in/docs/commit/f4602a763f0fb2be7f32d9d04b25b34f2b747fcd)) -- remove dummy blog posts and add test post ([68017da](https://github.com/dyte-in/docs/commit/68017dac2854545933214712f54c3aa005bdb2a4)) -- remove navbar lv0 items, update docsearch config ([7cb9483](https://github.com/dyte-in/docs/commit/7cb94837fb5f3b1ad31708ee55e3a6aec9be2fe9)) -- remove yarn.lock ([b97a1dc](https://github.com/dyte-in/docs/commit/b97a1dc4b9ea2d8a6046e56d541ff188dc4df694)) -- removed `next` in prod build, updated docsearch creds ([29cbf81](https://github.com/dyte-in/docs/commit/29cbf817fe4cb9a0c7942ae7469cd37191024fea)) -- restructure navbar links ([e3ec2ce](https://github.com/dyte-in/docs/commit/e3ec2cefbe8378fe909e2d4d7c7927e99652ee42)) -- sidebar now sticks again ([c20d7d7](https://github.com/dyte-in/docs/commit/c20d7d76500caa836812697ccc36c48b140e5a73)) -- **stoplight:** remove font size, update package ([1a2e1cf](https://github.com/dyte-in/docs/commit/1a2e1cf2e71116ef1de93897171c64f586fa5f29)) -- tailwindcss resets removed to fix typography ([140d187](https://github.com/dyte-in/docs/commit/140d187ff0cdf13d16372d718bb6cf7f6957c51e)) -- theme switcher position fixed, added dev portal link ([9e7ac72](https://github.com/dyte-in/docs/commit/9e7ac72f03f2adb323292d695100e6446ac29a89)) -- typo ([86542c7](https://github.com/dyte-in/docs/commit/86542c7104984d4b8400f114647895ad50e8e2af)) -- typo `shownn`, embed code typo ([190d1d7](https://github.com/dyte-in/docs/commit/190d1d7fb57233f838a71dbb5f78fb2b1eb07d43)) -- typo in android docs ([96cfd7f](https://github.com/dyte-in/docs/commit/96cfd7f0b77d2210e06cc4a2b8e4244697dffb6a)) -- **ui:** .string color in textrequestbody was not visible ([e2c8507](https://github.com/dyte-in/docs/commit/e2c850784e2c94884a9a216f4feb4536c29a0fb9)) -- **ui:** add react native icon in getstarted section ([b1e646a](https://github.com/dyte-in/docs/commit/b1e646aad014155247286219b71b84af163079b2)) -- **ui:** added hashchange detection in introduction page ([99b1324](https://github.com/dyte-in/docs/commit/99b1324b3cabb5f9efd56c271a1411949bfae2f5)) -- **ui:** added primary-100 for lighter primary shade (navbar) ([107f9f9](https://github.com/dyte-in/docs/commit/107f9f95a0874cef5ee1e9b24f65860f8f5fe067)) -- **ui:** alignment of ([3ffd379](https://github.com/dyte-in/docs/commit/3ffd37946497069714010f95788ce248be27e1a8)) -- **ui:** animate-pulse added for `dot-after` utility class ([4a0d955](https://github.com/dyte-in/docs/commit/4a0d955c8f0f2e1778d4a6394174180b70f2bb76)) -- **ui:** api ref code color improvements ([fc1a571](https://github.com/dyte-in/docs/commit/fc1a57194da88e7c2ca4cf9a2cc7d7aae4b90880)) -- **ui:** api reference - added border between right sections, response button ([f726f84](https://github.com/dyte-in/docs/commit/f726f84773f6397c53c8dc8c0b9c12e63c515733)) -- **ui:** api reference border color changed ([67e9df8](https://github.com/dyte-in/docs/commit/67e9df84a5089fecbf4852a914e8654a842d6eb0)) -- **ui:** api reference design update, revert css loading ([9ca2715](https://github.com/dyte-in/docs/commit/9ca27153d7f058a221413eaf409f5ac178250351)) -- **ui:** api reference design updates, spacing etc ([932d821](https://github.com/dyte-in/docs/commit/932d8216c054071cf7eb7c738651a0daac6a7a70)) -- **ui:** API reference ui customized, search box animated ([be73dbe](https://github.com/dyte-in/docs/commit/be73dbe53bca4897187f8599fb0563b071ec3d84)) -- **ui:** api version switcher design cleanup ([0af13eb](https://github.com/dyte-in/docs/commit/0af13eb60cc6dadee39420fbc6e9c2f9923b6021)) -- **ui:** change highlighted line color ([d1845b5](https://github.com/dyte-in/docs/commit/d1845b561f2424b24e858a75041e6ea2bb5f9214)) -- **ui:** changed API reference code colors ([6a8ca3c](https://github.com/dyte-in/docs/commit/6a8ca3ccde34f172d4328fc489bad8169a8d08bd)) -- **ui:** changed BlogIcon ([86d2beb](https://github.com/dyte-in/docs/commit/86d2bebdddab3d2368589f1e60aa251146be1007)) -- **ui:** changed ui of external links in navbar ([26795d8](https://github.com/dyte-in/docs/commit/26795d899d047c2e9c7bfceeac2ea0490cd3d8e8)) -- **ui:** dark mode color, code refactor (css) ([0252c55](https://github.com/dyte-in/docs/commit/0252c557488d9f5352829657c043c9f1fc0fa334)) -- **ui:** dark mode primary color ([ed330ed](https://github.com/dyte-in/docs/commit/ed330ed1f5b2e91508a5b1244600772141c33309)) -- **ui:** design updates, stoplight sentence case fix ([4617fbc](https://github.com/dyte-in/docs/commit/4617fbc737f43c7b5d0993f6def9ad17e34636fd)) -- **ui:** dropdown design is consistent, added social links ([cea8eb2](https://github.com/dyte-in/docs/commit/cea8eb2a19defc752beba0084bd9a899e54e9c94)) -- **ui:** font sizes and spacing in elements updated ([649ad2a](https://github.com/dyte-in/docs/commit/649ad2a6358b2a97ee5c712d78a261376e45fa90)) -- **ui:** gridlink shadow, showcase, dark mode primary color update ([df24de4](https://github.com/dyte-in/docs/commit/df24de47cac49dafc112cdd85d7a6ec63ef37f09)) -- **ui:** hashchange error in mobile fixed ([42f995a](https://github.com/dyte-in/docs/commit/42f995a541040808bb6dd90694101d1e07c9074b)) -- **ui:** hidden version dropdown in mobile sidebar ([122bbda](https://github.com/dyte-in/docs/commit/122bbda019f9ee8f3d0f1f4f38d4c30a0ac19846)) -- **ui:** icon background blended with text ([c0c501b](https://github.com/dyte-in/docs/commit/c0c501b841d15e3b4254288133bfbcbc6d4f9bcb)) -- **ui:** increase base font-size for elements ([c173a7e](https://github.com/dyte-in/docs/commit/c173a7e855470d321ef09fa08d21fdbdc5ed9ed8)) -- **ui:** increase sidebar width as contextswitcher and dropdown break on smaller screens ([aaa2008](https://github.com/dyte-in/docs/commit/aaa2008f7dc109678a2de6eaed23219cf871db91)) -- **ui:** increased space between left sidebar and container in large screens ([a603bf8](https://github.com/dyte-in/docs/commit/a603bf82a211d2569e8af4b389f24490161171be)) -- **ui:** left and right scrollbar removed, added scrollbar styles ([5b1cbf8](https://github.com/dyte-in/docs/commit/5b1cbf8036d161e43a088faa793edcc011747beb)) -- **ui:** made /api responsive on mobile ([3684efe](https://github.com/dyte-in/docs/commit/3684efe44804285eae87e0931b144dbc09fc5a5e)) -- **ui:** make scrollbar corner transparent ([803ef8a](https://github.com/dyte-in/docs/commit/803ef8a68d551f8eee6c532db47ca618acd48a5c)) -- **ui:** minor ui fixes in API reference ([15e7819](https://github.com/dyte-in/docs/commit/15e78194ccc18e1c3f77258f4c0d31c1cc2ce2de)) -- **ui:** move response tab buttons to the right ([a78610e](https://github.com/dyte-in/docs/commit/a78610e42a8a58aa70563c0b051110bab59b79db)) -- **ui:** now using "Source Sans Pro" and "Source Code Pro" ([6830377](https://github.com/dyte-in/docs/commit/6830377a8fcaa1ac5a73aa47f7cd77f7f2cda206)) -- **ui:** padding in mobile reset to default ([8aea5e2](https://github.com/dyte-in/docs/commit/8aea5e2d5af792c54285c20d8c3f58fc1e076c4a)) -- **ui:** position of sidebar collapse button ([cb7652e](https://github.com/dyte-in/docs/commit/cb7652e0595689c89730b94da9fee1286049561b)) -- **ui:** refactored api reference design ([9d5e8aa](https://github.com/dyte-in/docs/commit/9d5e8aa51d8a7fb677333bfe47eb7c597c82f537)) -- **ui:** remove current page highlight from api version switcher ([e164a96](https://github.com/dyte-in/docs/commit/e164a96cffb663a2de196e13cebdfa24a67a4294)) -- **ui:** remove icons from introduction (how to use) ([a4ea8b9](https://github.com/dyte-in/docs/commit/a4ea8b902698746d0fbab6525fdaf0ff17982cdb)) -- **ui:** search kbd color change, sidebar spacing increased ([ae6ca2e](https://github.com/dyte-in/docs/commit/ae6ca2e95888ee72ed0855d1a0fa005f44826f88)) -- **ui:** search shortcut, backtotop position changed ([68dbecf](https://github.com/dyte-in/docs/commit/68dbecf7e95c97711272df2aee29c58b75a81930)) -- **ui:** sidebar toggle button position is now fixed ([3760c9e](https://github.com/dyte-in/docs/commit/3760c9ee599883df5031820a78c42b057590b9f0)) -- **ui:** typo which hid the hamburger menu in mobile ([e92ac01](https://github.com/dyte-in/docs/commit/e92ac01daf0d75cb16126dcbbac83d65388d4ebc)) -- **ui:** update footer form ([8682240](https://github.com/dyte-in/docs/commit/8682240cfb74d278d6bd943cb1630ff9c2ee0328)) -- **ui:** update footer sign up link design ([079ebc4](https://github.com/dyte-in/docs/commit/079ebc4175ef08aea9143f31e1e8e68e932f6b58)) -- **ui:** update GridLinks UI in introduction page ([3fef0b2](https://github.com/dyte-in/docs/commit/3fef0b20bb597edde724455eab2d22174731e3b6)) -- **ui:** update heading colors for dark mode ([8304f4f](https://github.com/dyte-in/docs/commit/8304f4f37f0878278bdcd6b31183bcaab4f1417b)) -- **ui:** update links in footer ([2a7cdd3](https://github.com/dyte-in/docs/commit/2a7cdd3876e0a4ba56abf93d2967fe238af51391)) -- **ui:** update stoplight elements colors ([3de8474](https://github.com/dyte-in/docs/commit/3de84747751229857445e50a923ac738271d5fd5)) -- **ui:** updated GetStartedCard design ([3a772a5](https://github.com/dyte-in/docs/commit/3a772a55488a11b3a59dc0820b8333b52d99924f)) -- **ui:** updated leading for mobile ([eac4a5e](https://github.com/dyte-in/docs/commit/eac4a5e947c05cd49dd14f5cb5616b9403c45eef)) -- **ui:** updated navbar design ([6e61a64](https://github.com/dyte-in/docs/commit/6e61a64d91b046b5ba786c4179485e73eb33b9aa)) -- **ui:** updated styles, changed prism theme ([7bc0dc2](https://github.com/dyte-in/docs/commit/7bc0dc2c4a16ea97b249bc3911bd60b155e9dcb9)) -- **ui:** use drop-shadow instead of shadow for showcase ([c6028fb](https://github.com/dyte-in/docs/commit/c6028fbdbe12a45fb180a327d8b80a1a30b498c5)) -- **ui:** use inline svg instead of via ([ca5b861](https://github.com/dyte-in/docs/commit/ca5b861ba4be86100298bc666cd406cf3521ecbd)) -- **ui:** using fira sans and fira code ([2f47f57](https://github.com/dyte-in/docs/commit/2f47f57e9d5ff0543e8b1f523ac468af77f46eac)) -- **ui:** version dropdown now visible in mobile sidebar (build) ([856dca1](https://github.com/dyte-in/docs/commit/856dca1b88608b4454518e0a36a1aa7ea65036f0)) -- **ui:** version dropdown text overflow ([9a9ddec](https://github.com/dyte-in/docs/commit/9a9ddec867ab6b7c99e003116d28b5f07539a3f8)) -- update elements and refactor ([789cb5d](https://github.com/dyte-in/docs/commit/789cb5d1e36fb3bbb8419b5a34150b124f75a2fc)) -- updated API ref props ([e7e81c4](https://github.com/dyte-in/docs/commit/e7e81c47fae36fdb26c06e282766e31cf4b6b944)) -- updated docmanager to hide for /docs ([a46c837](https://github.com/dyte-in/docs/commit/a46c837928d942adbe705162616919ab25e67b1f)) -- updated handlePreferredDoc code, added comments ([9cb114b](https://github.com/dyte-in/docs/commit/9cb114b5425bb0c4192eebf9ef0fea7ca9dc7979)) -- updated sidebar for guides section, design updates ([3a9350d](https://github.com/dyte-in/docs/commit/3a9350da03a60fd7835c794b7bb1c537bdcfe466)) -- use same sidebar content for `guides` and `docs` ([628aa91](https://github.com/dyte-in/docs/commit/628aa91f46c3118c7cb996c237ca5a87e3cf1660)) -- **webhooks:** updated docs for organizedBy field in webhook body ([b4ca40b](https://github.com/dyte-in/docs/commit/b4ca40b2090c0b35d116c7b93f6918c1573b4ed3)) -- **webpack:** buffer require() ([a7f1aaf](https://github.com/dyte-in/docs/commit/a7f1aaf892376af9c6660169ea1d74c49287c008)) -- **webpack:** provide buffer in plugin ([8b78819](https://github.com/dyte-in/docs/commit/8b78819e59c5e73aafcdf2029378ae9fa8338e3f)) -- **web:** setupscreen is true by default ([aee3b5e](https://github.com/dyte-in/docs/commit/aee3b5e5ebe4cf47a4c90980c4512dc8b8307bcb)) - -### Features - -- add a custom className for image showcase ([22dbf9e](https://github.com/dyte-in/docs/commit/22dbf9eb11019d6a073a5cce281d4f6a80c72810)) -- add crawl script ([f8a6ac6](https://github.com/dyte-in/docs/commit/f8a6ac6f3716da1b69e420053a72a990151a5696)) -- add Dockerfile for testing ([29b4874](https://github.com/dyte-in/docs/commit/29b4874c4cc8fbdea691519bdea7f52fcf4981f8)) -- add embed docs ([f0cd561](https://github.com/dyte-in/docs/commit/f0cd561e3deca228d7fbbe1863a483fe9543cc68)) -- add fake ios version ([9f485df](https://github.com/dyte-in/docs/commit/9f485df237a5af0dfd98bb621ea19c2d9ab2e3bb)) -- add initial redesigned getstarted section ([89d7322](https://github.com/dyte-in/docs/commit/89d7322886a9f019a63c0d2d743f85ccbf830879)) -- add ios updates ([a480d05](https://github.com/dyte-in/docs/commit/a480d0590eff30b72a6195cbc8ece1e5b57698da)) -- add metadata for /api route ([3919457](https://github.com/dyte-in/docs/commit/3919457c6b69b6648531db72dfce5211b1682af1)) -- add sample docs for demo ([d175788](https://github.com/dyte-in/docs/commit/d17578871e461eab3ded68b4deb65fbc7f1d8195)) -- add setLabel API docs ([6f6f05e](https://github.com/dyte-in/docs/commit/6f6f05ed6d44851e73f2cd8724c6fef0c935da87)) -- add tailwindcss 🚀 ([16a6999](https://github.com/dyte-in/docs/commit/16a69997e89d5aa877ee5fa12445c6a8bb225514)) -- add v2 api with version switcher dropdown ([2291484](https://github.com/dyte-in/docs/commit/229148476628dcbc84ff0c7f1258645760920a1b)) -- add videos for mobile and desktop ([c80c09a](https://github.com/dyte-in/docs/commit/c80c09a9de1afc2d868d3483fcf102ffd539750f)) -- add videos in customize ui pages for react and js, refactored code ([#26](https://github.com/dyte-in/docs/issues/26)) ([c937c00](https://github.com/dyte-in/docs/commit/c937c0067b95c6dca0dda28c01c7038d66bfa5e8)) -- add yellow status color for 5xx response codes ([7a51fa2](https://github.com/dyte-in/docs/commit/7a51fa2b9577f624ddbccf071b2aeaaca197df4b)) -- added `tailwindcss/nesting` for nested css ([cc6f3a7](https://github.com/dyte-in/docs/commit/cc6f3a79aab48a3bc944209016fa74e9172f769e)) -- added algolia docsearch code ([6267011](https://github.com/dyte-in/docs/commit/6267011d26881098d29d242bce1c0fd3d0d766a5)) -- added fallback loading indicator for /api ([8aea366](https://github.com/dyte-in/docs/commit/8aea366525c0dad77394c91edf794b9314046bcb)) -- added initial introduction page ([5e3f92e](https://github.com/dyte-in/docs/commit/5e3f92eca4223113cef0fba435b4d2c1587d7bdf)) -- added known vector icons issue in docs ([1b9c54c](https://github.com/dyte-in/docs/commit/1b9c54cea9703be982b231f870355ee3250fbf96)) -- added logic for context switching ([477d115](https://github.com/dyte-in/docs/commit/477d115e5f0a6f5ea4cf436afd4188cbb53f905e)) -- added OpenAPI docs at /api 🚀 ([6e38d93](https://github.com/dyte-in/docs/commit/6e38d93d3bf11b690c2102d560fc3fb125a58dc3)) -- added posthog ([3c98e19](https://github.com/dyte-in/docs/commit/3c98e1987a806d8078772f9ba142d6e6bc67ea57)) -- added social links in footer ([074e40d](https://github.com/dyte-in/docs/commit/074e40d210ca2a7548be4e6b5815ec2129aa90e6)) -- added version dropdown ([d15fa6a](https://github.com/dyte-in/docs/commit/d15fa6a29a9384e433e69e123eaf1b9ac6daeced)) -- bumped docusaurus, fixed new version issues ([a2fa15f](https://github.com/dyte-in/docs/commit/a2fa15f0b91bea2ca29204fcff1fcdda87fe83e9)) -- **docs:** add steps to write docs in README ([03326a2](https://github.com/dyte-in/docs/commit/03326a2bc4846764fce51eb12e88b799724ad8b5)) -- **dx:** add linting: react, prettier ([70c4e3b](https://github.com/dyte-in/docs/commit/70c4e3b6b5396411ac0ef85402f6958705a5d5d6)) -- enable dropdown in mobile sidebar, add shadow to showcase ([135377f](https://github.com/dyte-in/docs/commit/135377f359c472209ec6957ec02bfb27c2258e56)) -- enable search ([f2a5496](https://github.com/dyte-in/docs/commit/f2a549605e13cb53b1e66bc4f5b1d88cab45014c)) -- **flutter:** version 0.5.x docs ([cdda32d](https://github.com/dyte-in/docs/commit/cdda32d35387656bae08794edd976b6d05b24514)) -- **iframe:** add doc for handling meetingEnded ([65ed129](https://github.com/dyte-in/docs/commit/65ed1297243243940fb236bb72df11c18eeea41a)) -- mobile sidebar added ([7af1266](https://github.com/dyte-in/docs/commit/7af12668995b427d4e4fac1d4a1dd44de0d3c17b)) -- **mobile-sdks:** added localMediaConnected docs ([e09016d](https://github.com/dyte-in/docs/commit/e09016dda87e2f222cc653ebfa5f19501320e695)) -- **mobile-sdk:** Updated sdk to latest versions ([fc205e7](https://github.com/dyte-in/docs/commit/fc205e71aa158d333c3700af8e02158058826aad)) -- new design (header, footer, sidebar, context switcher) ([82ec9b9](https://github.com/dyte-in/docs/commit/82ec9b90d07240258184cc3cdd7f1db2bfcc3cfd)) -- new sidebar minimize ui, other ui updates ([3226b1a](https://github.com/dyte-in/docs/commit/3226b1a3885405bb58172d4add7d859c8d013c7d)) -- now using Inter font ([5de8e0f](https://github.com/dyte-in/docs/commit/5de8e0f485f8bf89c047f4d495f14c35e48a1820)) -- polish ([653d033](https://github.com/dyte-in/docs/commit/653d03311ccf448db136ef50b4023a435e3cf2d5)) -- **release:** setup husky, semantic-release, commitlint, commitizen, jest ([d9895b2](https://github.com/dyte-in/docs/commit/d9895b257af32bdef7205168101c9607156f2902)) -- remove blog and add algolia creds ([f5979e9](https://github.com/dyte-in/docs/commit/f5979e93321ae44c8fcf202f4b913e5714246e35)) -- **rn:** update docs for 0.3.0, 0.4.0 ([6f54d1e](https://github.com/dyte-in/docs/commit/6f54d1e58abe640cfadf16629a5c30312cd1bf42)) -- **rn:** update to 13.x, add label docs ([c4026e6](https://github.com/dyte-in/docs/commit/c4026e6826013001f39dd6c9f2b543094960ef61)) -- set dark mode as default ([d865a55](https://github.com/dyte-in/docs/commit/d865a5580e86396f8918b5d9ec4a9a8d4d6f0a6c)) -- **ui:** added dot-after utility for adding a dot after an element ([b05ffb5](https://github.com/dyte-in/docs/commit/b05ffb5e4fa0a9f5b6fd59e03faff93880bd8b5c)) -- update api v1 with webhook `enabled` field ([d629b40](https://github.com/dyte-in/docs/commit/d629b4086ba554a8f2d1a82ad2771488fd8beadf)) -- update docs according to release and version number ([f920f4f](https://github.com/dyte-in/docs/commit/f920f4f9a21f8f7fa858daed480c90f5c03e6c79)) -- update sidebar design ([39afd2e](https://github.com/dyte-in/docs/commit/39afd2ee2444c32357724b5b0258b3100d3659cb)) -- upgrade `tailwindcss` to `3.0.19` ([c149cf4](https://github.com/dyte-in/docs/commit/c149cf439eafd981f9217abf4b8f8562a36e250e)) -- use `groupId` to group `Tabs` selections ([505b407](https://github.com/dyte-in/docs/commit/505b4073cbf2312c1e7b48b5382daadbaf2671d1)) -- version updates ([ba45601](https://github.com/dyte-in/docs/commit/ba45601efec496b8af94750d280da2011eee807b)) -- **web:** i18n support ([34386bf](https://github.com/dyte-in/docs/commit/34386bf1cb3fdb21d379125d1bf055a75cc6590f)) -- **websdk:** update to 0.19.x ([be85687](https://github.com/dyte-in/docs/commit/be8568779519dfb64cba64657a05458e324f8017)) +- Initial OSPI documentation site, adapted from the Docusaurus scaffold previously used for Dyte's documentation. +- Removed all Dyte video-SDK content, components, and dependencies. +- New content structure: [Guides](/guides), [API Reference](/api-reference), and [Architecture](/architecture), sourced from the real [`ospi-platform`](https://github.com/BrickeVD/ospi-platform) repository (README, source code, and 34 Architecture Decision Records). +- Placeholder pink brand palette and wordmark logo — the real OSPI visual identity was not available at the time of writing. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index e5b9fa711a..8958077646 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,3 +1,3 @@ # Code of Conduct -All Dyte repos are governed by our Community Participation Guidelines, available at: https://dyte.notion.site/dyte/Dyte-Community-Participation-Guidelines-CPG-4b3af58fdf3545c2a3065773a9154728 +This repository is governed by a standard Contributor Covenant-style code of conduct: participate in good faith, be respectful, and follow the [Contributing guide](./CONTRIBUTING.md). diff --git a/README.md b/README.md index c87936378f..70aa6463ab 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,17 @@

- - Logo - - -

Dyte Docs

+

OSPI Docs

- Dyte's documentation portal, built with Docusaurus. -
- Explore the docs » + Documentation portal for OSPI (Open Standard Product Identification), built with Docusaurus.

- View Demo - · - Report Bug + Platform source · - Request Feature + Report an issue

- - ## Table of Contents - [About the Project](#about-the-project) @@ -29,153 +19,81 @@ - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) -- [Usage](#usage) -- [Version History](#version-history) -- [Roadmap](#roadmap) +- [Content structure](#content-structure) - [Contributing](#contributing) -- [Support](#support) - [License](#license) -- [About](#about) ## About The Project -[Docusaurus](https://docusaurus.io/) is a static site generator that helps you ship beautiful, accessible docs. For building our [documentation](https://docs.dyte.io) portal, we have made certain modifications over the template generated by [Docusaurus](https://docusaurus.io) to be able to properly showcase all our SDKs with their respective versions. +This is the documentation site for **OSPI (Open Standard Product Identification)** — an open standard and API platform for product identity, master data, and cross-organization product data exchange. It documents the real, running reference implementation at [`ospi-platform`](https://github.com/BrickeVD/ospi-platform): guides, a full REST API reference, and the architecture decisions behind how the platform is built. -We are delighted to see our documentation featured on [Docusaurus Site Showcase](https://docusaurus.io/showcase), and hope you like it! +All content is sourced from the actual `ospi-platform` codebase (controllers, DTOs, ADRs, domain docs) — not invented. Where the platform has an open question or a "not built yet," the docs say so. ### Built With - [Docusaurus](https://docusaurus.io/) - [React](https://reactjs.org/) -- [Tailwind](https://tailwindcss.com/) +- [Tailwind CSS](https://tailwindcss.com/) ## Getting Started -This section describes how you can get our documentation portal up and running on your machine. - ### Prerequisites -- [node](https://nodejs.org/en/) -- [npm](https://www.npmjs.com/) +- [Node.js](https://nodejs.org/en/) ≥ 18 +- npm ### Installation -1. Clone the repo - -```sh -git clone https://github.com/dyte-io/docs.git -``` - -2. Install NPM packages - ```sh +git clone https://github.com/BrickeVD/OSPI-APIdocs.git +cd OSPI-APIdocs npm install -``` - -3. Run the app - -```sh npm start ``` - +## Content structure -## Usage +The site is three separate Docusaurus doc instances, defined in [`docusaurus.config.js`](./docusaurus.config.js): - +| Instance | Path | Route | Content | +| --- | --- | --- | --- | +| `guides` | `docs/guides` | `/guides` | Introduction, quickstart, authentication, core concepts, errors, idempotency/rate limits, webhooks, roles | +| `api-reference` | `docs/api-reference` | `/api-reference` | Hand-written domain guides (**Guides**) + a live, generated per-endpoint reference with request/response schemas and a "Try It" console (**Endpoints**) | +| `architecture` | `docs/architecture` | `/architecture` | Domain model + all 34 Architecture Decision Records, ported from `ospi-platform/docs/adr` | -### Writing Documentation +Branding (`src/css/custom.css`, `static/logo/`) uses a placeholder pink wordmark — the real OSPI logo and full brand guidelines were not available at the time this site was built; swap `static/logo/light.svg` and `static/logo/dark.svg` once they are. -To just edit older documentation, go to the specified versioned folder for a section, for example, you want to edit documentation for React SDK v0.25.x, open up [react_versioned_docs/version-0.25.x](./react_versioned_docs/version-0.25.x) and edit the required files there. +### Regenerating the API Reference (Endpoints) from the real backend -To create a new version inside a section, for example, flutter. Make your changes in [docs/flutter](./docs/flutter). The `./docs` folder consists of the `next` version, which is unpublished, and is where you add your newer or _next_ version of documentation. - -After your changes are done, to create a version, run the following command: +The **Endpoints** pages under `/api-reference` are not hand-written — they're generated by +[`docusaurus-plugin-openapi-docs`](https://github.com/PaloAltoNetworks/docusaurus-openapi-docs) from +[`openapi/ospi-platform.json`](./openapi/ospi-platform.json), a real OpenAPI 3 document exported from the +actual [`ospi-platform`](https://github.com/BrickeVD/ospi-platform) NestJS backend's own `SwaggerModule` +(the same document it serves at `/api/docs-json`), not written by hand. To refresh it after the backend's +API surface changes: ```sh -npm run docusaurus docs:version:flutter 1.2.3 -``` - -This will create a new version `1.2.3` for flutter. - -Reference: https://docusaurus.io/docs/versioning - -### To add new sections - -Create a new section in docusaurus by adding a new plugin entry in [docusaurus.config.js](./docusaurus.config.js). - -If you're adding a new section, just add new section to `SECTIONS[]` array with the `defineSection()` utility easily. - -Now, run `npm start` and you can access your Go docs at http://localhost:3000/go/introduction +# In a clone of ospi-platform, with Postgres + Redis reachable per its own README: +npx ts-node -T scripts/generate-openapi.ts # writes openapi.json (see that script; not committed there) -Then, you can create versions and edit older versions as mentioned above. - -### Adding new docs to the Context Switcher - -To add a newly created section to the Sections Menu, edit [./src/sections.js](src/sections.js). - -For example, for a section go, you will add: - -```jsx -import { GoIcon } from '../assets/icons'; - -const SECTIONS = [ - // ... - { - id: 'go', - name: 'Go', - icon: GoIcon, - section: false, // if it shouldn't have a sections menu - }, -]; +# Back in this repo: +cp path/to/ospi-platform/openapi.json openapi/ospi-platform.json +npm run gen-api-docs # regenerates docs/api-reference/reference/** +npm run build # verify ``` -You'll need to create a GoIcon component too. - -That is it! - - - -## Version History - -See [CHANGELOG](./CHANGELOG.md). - - - -## Roadmap - -See the [open issues](https://github.com/dyte-io/docs/issues) for a list of proposed features (and known issues). - - +`scripts/generate-openapi.ts` boots the real Nest application (so Postgres/Redis must be reachable) and +dumps `SwaggerModule.createDocument(...)` to disk instead of calling `app.listen()`. It lives in +`ospi-platform`, not here — it's a one-off export script for that backend, not a doc-site build step. ## Contributing -Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**. Sincere thanks to all our contributors. Thank you, [contributors](https://github.com/dyte-io/docs/graphs/contributors)! - -You are requested to follow the contribution guidelines specified in [CONTRIBUTING.md](./CONTRIBUTING.md) and code of conduct at [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md) while contributing to the project :smile:. - -## Support - -Contributions, issues, and feature requests are welcome! -Give a ⭐️ if you like this project! - - +See [CONTRIBUTING.md](./CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md). ## License Distributed under the Apache License, Version 2.0. See [`LICENSE`](./LICENSE) for more information. - - - - -## About - -`docs` is created & maintained by Dyte, Inc. You can find us on Twitter - [@dyte_io](https://twitter.com/dyte_io) or write to us at `dev [at] dyte.io`. - -The names and logos for Dyte are trademarks of Dyte, Inc. - -We love open source software! See [our other projects](https://github.com/dyte-io) and [our products](https://dyte.io). diff --git a/bin/auto_update_docs.py b/bin/auto_update_docs.py deleted file mode 100755 index 5f3da545e0..0000000000 --- a/bin/auto_update_docs.py +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/python - -import os -import requests -import argparse - -class bcolors: - HEADER = '\033[95m' - OKBLUE = '\033[94m' - OKCYAN = '\033[96m' - OKGREEN = '\033[92m' - WARNING = '\033[93m' - FAIL = '\033[91m' - ENDC = '\033[0m' - BOLD = '\033[1m' - UNDERLINE = '\033[4m' - -parser = argparse.ArgumentParser() -parser.add_argument('-o', '--owner', help='Owner of the repo', default='dyte-in') -parser.add_argument('-r', '--repo', help='Repo to fetch docs from', default='web-core') -parser.add_argument('-v', '--version', help='Release version to update docs to') -parser.add_argument('-d', '--destination', help='Destination folder for reference directory', default='docs/web-core') - -args = parser.parse_args() - -GH_TOKEN = os.environ['GH_TOKEN'] -github_api_url = 'https://api.github.com/repos' - -repo = args.repo -owner = args.owner -version = args.version -destination = args.destination - -github_headers = { - 'Authorization': f'token {GH_TOKEN}', - 'Accept': 'application/vnd.github.v3.raw', -} - -github_latest_release_url = f'{github_api_url}/{owner}/{repo}/releases/latest' - -if not version: - version = requests.get(github_latest_release_url, headers=github_headers).json()['tag_name'] - -github_release_url = f'{github_api_url}/{owner}/{repo}/releases/tags/{version}' -docs_zip_url = None -docs_zip_file = '/tmp/docs.zip' -unzip_destination = '/tmp' - -docs_directory = f'{unzip_destination}/docs' -reference_directory = f'./{destination}/reference' -autogenerated_separator = '\n' - -github_release_assets = requests.get(github_release_url, headers=github_headers).json()['assets'] - -for asset in github_release_assets: - if asset['name'] == 'docs.zip': - docs_zip_url = f'{github_api_url}/{owner}/{repo}/releases/assets/{asset["id"]}' - -github_download_headers = github_headers.copy() -github_download_headers.update({ - "Accept": "application/octet-stream", -}) - -asset_content = requests.get(docs_zip_url, headers=github_download_headers).content -open(docs_zip_file, 'wb').write(asset_content) - -os.system(f'unzip -o {docs_zip_file} -d {unzip_destination}') -os.unlink(f'{docs_directory}/README.md') - -def smart_replace(file_content_arr, docs_content_arr): - separator_index = file_content_arr.index(autogenerated_separator) - docs_separator_index = docs_content_arr.index(autogenerated_separator) - - file_content_arr = file_content_arr[separator_index:] - - print('Replacing content in references:', file) - - docs_content_arr = docs_content_arr[:docs_separator_index] - docs_content_arr += file_content_arr - - return docs_content_arr - -def header_replace(file_content_arr, docs_content_arr): - file_header_end_index = file_content_arr.index('---\n', 1) - docs_header_end_index = docs_content_arr.index('---\n', 1) - - file_header = file_content_arr[:file_header_end_index + 1] - docs_content_arr = file_header + docs_content_arr[docs_header_end_index + 1:] - return docs_content_arr - -status_code = 0 -for file in os.listdir(docs_directory): - if (not os.path.exists(reference_directory)): - os.mkdir(reference_directory) - try: - print('Parsing file:', file) - file_content_arr = open(f'{docs_directory}/{file}', 'r').readlines() - docs_content_arr = file_content_arr - if os.path.exists(f'{reference_directory}/{file}'): - docs_content_arr = open(f'{reference_directory}/{file}', 'r').readlines() - - if len(docs_content_arr) == 0: - docs_content_arr = file_content_arr - else: - docs_content_arr = smart_replace(file_content_arr, docs_content_arr) - docs_content_arr = header_replace(file_content_arr, docs_content_arr) - - open(f'{reference_directory}/{file}', 'w').write(''.join(docs_content_arr)) - - except ValueError as e: - print(f'{bcolors.FAIL}Failed to process file: {file}\n{e}{bcolors.ENDC}') - status_code = 1 - pass - -exit(status_code) diff --git a/bin/crawl.sh b/bin/crawl.sh deleted file mode 100755 index 2cb9e2ce3a..0000000000 --- a/bin/crawl.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -docker run --env-file=.env -e "CONFIG=$(cat docsearch.config.json | jq -r tostring)" algolia/docsearch-scraper diff --git a/bin/ui-kit/clear-components.sh b/bin/ui-kit/clear-components.sh deleted file mode 100755 index f32274fc5b..0000000000 --- a/bin/ui-kit/clear-components.sh +++ /dev/null @@ -1,3 +0,0 @@ -rm docs/react-ui-kit/components/dyte-* -rm docs/ui-kit/components/dyte-* -rm docs/angular-ui-kit/components/dyte-* diff --git a/bin/ui-kit/component-docs.cjs b/bin/ui-kit/component-docs.cjs deleted file mode 100644 index fbaa8e7322..0000000000 --- a/bin/ui-kit/component-docs.cjs +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env node - -const fs = require('fs'); -const { writeMDXFile } = require('./utils.cjs'); -const { pascalCase } = require('pascal-case'); - -const { - components, -} = require('@dytesdk/ui-kit/dist/docs/docs-components.json'); - -/** @typedef {import('@dytesdk/ui-kit/dist/docs/docs-components').JsonDocsComponent} Component */ - -const basePaths = { - core: 'docs/ui-kit/components', - react: 'docs/react-ui-kit/components', - angular: 'docs/angular-ui-kit/components', -}; - -/** - * - * @param {Component} component - * @param {'core' | 'react' | 'angular' | 'vue'} framework - * @returns - */ -function generateFile(component, framework = 'core') { - const { tag, docs, props, usage } = component; - - function getFrontmatter() { - const path = `/static/ui-kit/1.x.x/components/${tag}.svg`; - if (fs.existsSync(`static${path}`)) { - return ['---', `image: ${path}`, '---']; - } - return []; - } - - function getTitle() { - let title = tag; - - if (framework === 'react') { - title = pascalCase(tag); - } - - return title; - } - - function getExample() { - let docName = 'html-example'; - - if (framework === 'react') { - docName = 'react-example'; - } else if (framework === 'angular') { - docName = 'angular-example'; - } else if (framework === 'vue') { - docName = 'vue-example'; - } - - const exampleCode = usage[docName]; - - return exampleCode ? [exampleCode, ''] : []; - } - - const text = [ - ...getFrontmatter(), - '', - `# ${getTitle()}`, - '', - docs, - '\n', - ...getExample(), - ...(props.length > 0 ? [`## Props`, ``] : []), - '', - ] - .filter((line) => line) - .join('\n'); - - return text; -} - -for (const component of components) { - const { tag } = component; - - if (tag.startsWith('dyte-breakout') || tag.startsWith('dyte-ai')) { - continue; - } - - /** If there is no readme, skip component */ - if ( - (!component || component.docs.trim() === '') && - component.tag !== 'dyte-clock' - ) { - continue; - } - - /** If there is no usage documentation for any framework, skip component */ - if (component?.usage && Object.keys(component.usage) === 0) { - continue; - } - - writeMDXFile(`${basePaths.core}/${tag}.mdx`, generateFile(component)); - - writeMDXFile( - `${basePaths.react}/${tag}.mdx`, - generateFile(component, 'react'), - ); - - writeMDXFile( - `${basePaths.angular}/${tag}.mdx`, - generateFile(component, 'angular'), - ); -} diff --git a/bin/ui-kit/utils.cjs b/bin/ui-kit/utils.cjs deleted file mode 100644 index 7115cf4537..0000000000 --- a/bin/ui-kit/utils.cjs +++ /dev/null @@ -1,17 +0,0 @@ -const fs = require('fs'); -const prettier = require('prettier'); -const { prettier: prettierConfig } = require('../../package.json'); - -/** - * Writes to a file after text is formatted as MDX - * @param {string} path - * @returns - */ -function writeMDXFile(path, text) { - return fs.writeFileSync( - path, - prettier.format(text, { ...prettierConfig, parser: 'mdx' }), - ); -} - -module.exports = { writeMDXFile }; diff --git a/bin/update-docs b/bin/update-docs deleted file mode 100755 index 3797886cfd..0000000000 --- a/bin/update-docs +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -GH_TOKEN=$NPM_TOKEN ./bin/auto_update_docs.py -r web-core -d docs/web-core -# GH_TOKEN=$NPM_TOKEN ./bin/auto_update_docs.py -r web-core -d docs/react-web-core -# GH_TOKEN=$NPM_TOKEN ./bin/auto_update_docs.py -r web-core -d docs/react-native-core diff --git a/bin/update-metadata.cjs b/bin/update-metadata.cjs deleted file mode 100644 index 4866f17bdd..0000000000 --- a/bin/update-metadata.cjs +++ /dev/null @@ -1,93 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const grayMatter = require('gray-matter'); - -const mdxDirectory = path.join(__dirname, 'docs'); - -const prefixes = { - 'community-packages': 'Community Packages', - guides: 'Guide', - android: 'Android', - flutter: 'Flutter', - 'android-core': 'Android Core', - 'flutter-core': 'Flutter Core', - 'angular-ui-kit': 'Angular UI Kit', - 'ui-kit': 'UI Kit', - 'react-ui-kit': 'React UI Kit', - cli: 'CLI', - 'ios-core': 'iOS Core', - ios: 'iOS', - 'plugin-sdk': 'Plugin SDK', - 'rn-core': 'React Native Core', - 'rn-ui-kit': 'React Native UI Kit', - 'web-core': 'Web Core', - 'react-web-core': 'React Web Core', -}; - -let count = 0; - -for (const section of Object.keys(prefixes)) { - const sectionDirectory = path.join(mdxDirectory, section); - - for (const file of getFiles(sectionDirectory)) { - if (file.endsWith('.mdx') || file.endsWith('.md')) { - const filePath = path.join(mdxDirectory, file); - - const fileContent = fs.readFileSync(filePath, 'utf8'); - - const { data, content } = grayMatter(fileContent); - - const existingTitle = data.title; - - const headingMatch = content.match(/^# (.*)/m); - if (!headingMatch && !existingTitle) { - console.log( - `File ${filePath} does not have an H1 heading. Skipping...`, - ); - continue; - } - - const title = existingTitle || headingMatch[1]; - - const prefix = prefixes[section]; - - let updatedTitle = - section === 'guides' ? `${title} ${prefix}` : `${prefix} ${title}`; - - if (filePath.includes('/components/')) { - data.description = `Learn how to use and customize the ${title} component in Dyte's ${prefix} with our detailed documentation.`; - } - - const updatedContent = [ - '\n\n', - `\t${updatedTitle}`, - '', - ]; - - const updatedFileContent = grayMatter.stringify( - content + updatedContent.join('\n'), - data, - ); - fs.writeFileSync(filePath, updatedFileContent); - - console.log(`Updated front matter for file ${filePath}`); - count++; - } - } -} - -function getFiles(dir) { - let results = []; - for (const file of fs.readdirSync(dir)) { - const filePath = path.join(dir, file); - const stat = fs.statSync(filePath); - if (stat.isDirectory()) { - results = results.concat(getFiles(filePath)); - } else { - results.push(path.relative(mdxDirectory, filePath)); - } - } - return results; -} - -console.log(`Updated ${count} files.`); diff --git a/cspell.json b/cspell.json index 98db702ce8..b2cd8c3a2a 100644 --- a/cspell.json +++ b/cspell.json @@ -1,24 +1,5 @@ { "version": "0.2", "language": "en-US", - "words": [ - "dyte", - "webrtc", - "proguard", - "dytesdk", - "Mbps", - "livestream", - "livestreaming", - "controlbar", - "prefs", - "Screenshare", - "quickstart", - "ktor", - "kotlinx", - "waitlist", - "webm", - "releasenotes", - "waitlisted", - "htmlui" - ] + "words": ["ospi", "webrtc", "quickstart", "idempotency", "webhooks", "Crockford"] } diff --git a/docs/android-core/Introduction.mdx b/docs/android-core/Introduction.mdx deleted file mode 100644 index 2eddd55d95..0000000000 --- a/docs/android-core/Introduction.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Introduction -sidebar_position: 4 -sidebar_class_name: module-seperation ---- - -import ProductSection from '/docs/partials/_product-section.mdx'; - -# Introduction - -The Dyte Core SDK is designed to provide you with an easy way to incorporate live video, voice, livestream and chat capabilities -into your Android apps. The Core SDK acts as a data-only layer. It provides simple APIs offering high-level primitives and -abstracting away complex media and networking optimizations. - -## Why Core SDK? - -The Core SDK was developed with a user-friendly approach to eliminate the complexity of managing streams. Unlike traditional -SDKs that require knowledge of WebRTC functioning, Dyte's Core SDK provides a simple API that abstracts out the complexity, -making it easier for developers to use. For instance, enabling video with Dyte's Core SDK is as easy as calling -`meeting.localUser.enableVideo()`. - -## Utility Modules - -The Core SDK includes various modules for in-call utilities like chat, polls, and recording that enable building a UI on top of -it. The following are the core SDK modules: - -- **meeting.localUser**: This consists of properties and methods corresponding to the current (local) user, such as enabling or - disabling their audio and video, getting a list of media devices or changing the device, or sharing your mobile screen. -- **meeting.participants**: Use this module to get useful information about the other participants that are present in the - meeting. A host can use this module for access control. For example, the host can mute or kick a participant. -- **meeting.chat**: It provides the methods to integrate chat features such as sending/receiving text, images, and files. -- **meeting.polls**: Meetings can have polls. This module lets you perform actions related to polls, that is create and manage - a poll within a meeting. -- **meeting.recording**: When a meeting needs to be recorded, this module can be used. It lets you start or stop a recording, - and get the current status of an ongoing recording. -- **meeting.meta**: This object consists of all the metadata related to the current meeting, such as the title, the timestamp - of when it started, and more. -- **meeting.plugins**: Provides the list of available plugins and active plugins. Use this module to enable or disable plugins as needed. - - - Android Core Introduction - diff --git a/docs/android-core/chat/_category_.json b/docs/android-core/chat/_category_.json deleted file mode 100644 index 50bf23d1b2..0000000000 --- a/docs/android-core/chat/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 8, - "label": "Chat", - "collapsible": true -} diff --git a/docs/android-core/chat/introduction.mdx b/docs/android-core/chat/introduction.mdx deleted file mode 100644 index a9afa3a9fc..0000000000 --- a/docs/android-core/chat/introduction.mdx +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Introduction -description: >- - Learn the basics of integrating Dyte's chat functionality into your Android - application – a step towards immersive real-time communication. -sidebar_position: 1 -tags: - - android-core - - chat ---- - -# Introducing chat - -The meeting chat object is stored in `meeting.chat`, which has methods for sending and receiving messages. There are 3 types of messages that can be sent in chat - text messages, images, and files. - -The `meeting.chat.messages` array contains all the messages that have been sent -in the chat. This is an array of objects, where each object is of type -`DyteChatMessage`. - -We support three types of chat messages, they are as follows - -- Text Message - -```kotlin -class DyteTextMessage( - userId: String, - displayName: String, - read: Boolean, - pluginId: String?, - val message: String, - time: String, - createdAtMillis: Long, - targetUserIds: List?, -) -``` - -- Image Message - -```kotlin -class DyteImageMessage( - userId: String, - displayName: String, - read: Boolean, - pluginId: String?, - val link: String, - time: String, - createdAtMillis: Long, - targetUserIds: List?, -) -``` - -- File Message - -```kotlin -class DyteFileMessage( - userId: String, - displayName: String, - read: Boolean, - pluginId: String?, - val name: String, - time: String, - createdAtMillis: Long, - val link: String, - val size: Long, - targetUserIds: List?, -) -``` - -All above objects are of type `DyteChatMessage` along with their own class -variables. - - - Android Core Introducing chat - diff --git a/docs/android-core/chat/receiving-chat-messages.mdx b/docs/android-core/chat/receiving-chat-messages.mdx deleted file mode 100644 index 6d2c2e526f..0000000000 --- a/docs/android-core/chat/receiving-chat-messages.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Receiving chat messages -description: >- - "Discover how to implement the functionality to receive chat messages in your - Android app using Dyte -sidebar_position: 3 -tags: - - android-core - - chat ---- - -# Receiving chat messages - -To be able to receive chat messages you need to implement a method -`onChatUpdates()` method from callback `DyteChatEventsListener`. You can -subscribe to this events by calling -`meeting.addChatEventsListener(dyteChatEventsListener)` - -```kotlin -meeting.addChatEventsListener(object : - DyteChatEventsListener { - override fun onChatUpdates(messages: List) { - // to load chat messages - } - - override fun onNewChatMessage(message: DyteChatMessage) { - // when a new chat message is shared in the meeting - } - - override fun onMessageRateLimitReset() { - // when the rate limit for sending messages of self is reset - } - }) -``` - -The `onChatUpdates()` method will be called whenever there is a change in the chat messages. The `messages` parameter is a list of `DyteChatMessage` objects that have been sent in the chat. - -The `onNewChatMessage()` method will be called whenever a new chat message is shared in the meeting. The `message` parameter is a `DyteChatMessage` object that has been sent in the chat. - -The `onMessageRateLimitReset()` method will be called when the rate limit for sending messages of self is reset and you can send messages again. The default rate limit is 180 messages within 60 seconds. - - - Android Core Receiving chat - diff --git a/docs/android-core/chat/sending-a-chat-message.mdx b/docs/android-core/chat/sending-a-chat-message.mdx deleted file mode 100644 index aedbf28a86..0000000000 --- a/docs/android-core/chat/sending-a-chat-message.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Sending a chat message -description: >- - "Master the process of sending chat messages within your Android application - with Dyte -sidebar_position: 2 -tags: - - android-core - - chat ---- - -# Sending a chat message - -As mentioned in [introduction](./introduction), there are 3 types of chat messages - text messages, images, and files. There is a method in `meeting.chat` to send a message of each type. - -## Send a text message - -To send a text message, the `meeting.chat.sendTextMessage()` method can be used. This accepts a string `message` and sends it to the room. - -```kotlin -val message = "Is this the real life?" -meeting.chat.sendTextMessage(message) -``` - -## Send an image - -You can send an image with the help of `meeting.chat.sendImageMessage()` and -sends it to the participants in the meeting. - -```kotlin -meeting.chat.sendImageMessage(imageUri) { err -> - // Handle error if any -} -``` - -## Send a file - -Sending a file is quite similar to sending an image. The only difference is that when you send an image, a preview will be shown in the meeting chat, which is not the case for sending files. That being said, an image can be sent as a file too using `meeting.chat.sendFileMessage()`. - -```kotlin -meeting.chat.sendFileMessage(fileUri) { err -> - // Handle error if any -} -``` - -## Chat Errors - -The `sendTextMessage` method returns a `ChatTextError` if the operation fails, `null` if successful. The error can be the following: - -- `PermissionDenied`: The user does not have permission to send a message. -- `MessageIsBlank`: The message is empty. -- `CharacterLimitExceeded`: The message exceeds the character limit. Default limit is 2000 characters. -- `RateLimitBreached`: The user has sent too many messages in a short period of time. - -Both `sendImageMessage` and `sendFileMessage` methods accept a callback function that will be called with a `ChatFileError` if the operation is not successful, otherwise with `null` if successful. - -Possible `ChatFileError`s are: - -- `FileFormatNotAllowed`: The file format is not allowed. -- `PermissionDenied`: The user does not have permission to send a file. -- `RateLimitBreached`: The user has breached the rate limit for sending messages. -- `ReadFailed`: The file could not be read. -- `UploadFailed`: The file could not be uploaded. - -A `when` block can be used to handle these errors inside the callback, as shown below: - -```kotlin -when (err) { - is ChatFileError.FileFormatNotAllowed -> {} - is ChatFileError.PermissionDenied -> {} - is ChatFileError.RateLimitBreached -> {} - is ChatFileError.ReadFailed -> {} - is ChatFileError.UploadFailed -> {} - else -> {} -} -``` - - - Android Core Sending chat - diff --git a/docs/android-core/error-codes.mdx b/docs/android-core/error-codes.mdx deleted file mode 100644 index 84a31d59dd..0000000000 --- a/docs/android-core/error-codes.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: System Error Codes -sidebar_position: 99 ---- - -:::info Note - -This information is intended for developers debugging or troubleshooting Dyte's mobile core system errors. - -::: - -Error codes are a standardized method for developers to convey application errors and issues to users or other developers in a structured manner. Error codes typically consist of a numerical or alphanumeric code and a description that provides more information about the error. - -This document lists Dyte's Android core error codes that you may encounter in various scenarios. System error codes can arise in different parts of the system, and their descriptions may not always provide exact details. To address these codes effectively, you must first understand the programmatic and runtime contexts in which these errors occurred. - -## Error codes and format - -Error codes consist of a number that are categorized by the type of error and a message that provides more information about the error. The error code format is as follows: - -```kotlin -class DyteError(val code: Int, val message: String) -``` - -### Meeting error codes - -Meeting error codes are used to indicate errors that occur during meeting operations. These errors are typically returned by the methods of the `meeting` object such as `init()`, `join()`. - -- 1000: Invalid auth token. -- 1002: Failed to initialize meeting. -- 1003: Invalid base URL. -- 1005: Failed to join room. -- 4000: Something went wrong. - - - Android Core System Error Codes - diff --git a/docs/android-core/livestream/_category_.json b/docs/android-core/livestream/_category_.json deleted file mode 100644 index 85f0f0dd39..0000000000 --- a/docs/android-core/livestream/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 10, - "label": "Livestream", - "collapsible": true -} diff --git a/docs/android-core/livestream/dyte-livestream-listener.mdx b/docs/android-core/livestream/dyte-livestream-listener.mdx deleted file mode 100644 index d6c09f3b0c..0000000000 --- a/docs/android-core/livestream/dyte-livestream-listener.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Livestream Event Listeners -description: >- - Explore the functionalities and implementation of the Android Livestream - Listener in Dyte documentation. -sidebar_position: 3 -tags: - - android-core - - livestream ---- - -You can listen to livestream events by attaching a listener by calling `addLivestreamEventsListener` on `dyteMobileClient` object where `dyteMobileClient` is an instance of `DyteMobileClient()`. - -```kotlin -val dyteLiveStreamEventsListener = object : DyteLiveStreamEventsListener { - override fun onLiveStreamStarting() { - // when livestream is starting - } - - override fun onLiveStreamStarted() { - // when livestream is started - } - - override fun onLiveStreamEnding() { - // when livestream is ending - } - - override fun onLiveStreamEnded() { - // when livestream is ended - } - - override fun onLiveStreamErrored() { - // errored livestream - } - - override fun onViewerCountUpdated(count: Int) { - // when viewer count updates in livestream - } - - override fun onStageCountUpdated(count: Int) { - // when stage count updates in livestream - } - - override fun onStageRequestsUpdated(requests: List) { - // when there are updates in stage requests - } - - override fun onJoinRequestAccepted(peer: LiveStreamStagePeer) { - // when localUser's join request is accepted by host - } - - override fun onJoinRequestRejected(peer: LiveStreamStagePeer) { - // when localUser's join request is rejected by host - } - - override fun onLiveStreamStateUpdate(data: DyteLivestreamData) { - // when there is an update in state of the livestream - } -} -meeting.addLiveStreamEventsListener(dyteLiveStreamEventsListener) -``` - -## Livestream events - -### onLiveStreamStarting - -This event is triggered when the livestream is about to start. - -### onLiveStreamStarted - -This event is triggered when the livestream has started. - -### onLiveStreamStateUpdate - -This event is triggered when the livestream state is updated. - -### onViewerCountUpdated - -This event is triggered when the viewer count is updated. - -### onLiveStreamEnding - -This event is triggered when the livestream is about to end. - -### onLiveStreamEnded - -This event is triggered when the livestream has ended. - -### onLiveStreamErrored - -This event is triggered when their is an error while starting/stopping the livestream. - -### onStageCountUpdated - -This event is triggered when the number of users on stage is updated. The `count` object contains the updated stage count. - -### onStageRequestsUpdated - -This event is triggered when the stage requests are updated. The `requests` object contains the updated list of stage requests. - -### onJoinRequestAccepted - -This event is triggered when a stage request is accepted. The `peer` object contains the peer whose request is accepted. - -```kotlin - void onJoinRequestAccepted(DyteLiveStreamStagePeer peer) {} -``` - -### onJoinRequestRejected - -This event is triggered when a stage request is rejected. The `peer` object contains the peer whose request is rejected. - -```kotlin - void onJoinRequestRejected(DyteLiveStreamStagePeer peer) {} -``` - - - Android Core Livestream Event Listeners - - diff --git a/docs/android-core/livestream/dyte-livestream-object.mdx b/docs/android-core/livestream/dyte-livestream-object.mdx deleted file mode 100644 index 5ec4f9ec19..0000000000 --- a/docs/android-core/livestream/dyte-livestream-object.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Livestream Objects and Methods -description: >- - Learn about the Android Livestream Object and its usage for effective - livestream integration in your Android applications. -sidebar_position: 2 -tags: - - android-core - - livestream ---- - -`DyteLivestream` object obtained by `dyteMobileClient.livestream` method. The objects and methods it contains are defined below. - -## Objects - -### roomName [*String*] - -The name of the room.
- -### state [*LiveStreamState*] - -The current status of the livestream, possible values can be:
- -- `LiveStreamState.NONE` -- `LiveStreamState.STARTING` -- `LiveStreamState.STARTED` -- `LiveStreamState.STOPPING` -- `LiveStreamState.STOPPED` -- `LiveStreamState.ERRORED` - -### Stage Requests [List<DyteLiveStreamStageRequestPeer>] - -Object accessed via `dyteMobileClient.livestream.stageRequestPeers` contains the list of requests to join the stage. Each request contains 3 properties:
- -1. `peerId`: The peer ID of the user who requested to join the stage. -2. `userId`: The user ID of the user who requested to join the stage. -3. `displayName`: The display name of the user who requested to join the stage.

- -### liveStreamUrl [String] - -List of URL which can be used to consume livestream. - -## Host control methods - -Dyte's stage management APIs allow hosts to receive and manage stage requests as well as leave and join the stage. - -### Accept request - -This method lets the host accept a request to join the stage. It takes the _DyteLiveStreamStageRequestPeer.id_ as an argument whose request has to be accepted. - -```kotlin -dyteMobileClient.livestream.acceptRequest(peer.id); -``` - -### Reject request - -This method lets the host reject a request to join the stage. It takes the _DyteLiveStreamStageRequestPeer.id_ as an argument whose request has to be rejected. - -```kotlin -dyteMobileClient.livestream.rejectRequest(peer.id); -``` - -### Accept all requests - -This method lets the host accept all the requests to join the stage. - -```kotlin -dyteMobileClient.livestream.acceptAll(); -``` - -### Reject all requests - -This method lets the host reject all the requests to join the stage. - -```kotlin -dyteMobileClient.livestream.rejectAll(); -``` - - - Android Core Livestream Objects and Methods - - diff --git a/docs/android-core/livestream/introduction.mdx b/docs/android-core/livestream/introduction.mdx deleted file mode 100644 index 4b3e1cb83a..0000000000 --- a/docs/android-core/livestream/introduction.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Introduction -description: >- - Get started with Android Livestreaming through this comprehensive introduction - guide in Dyte Docs. -sidebar_position: 1 -tags: - - android-core - - livestream ---- - -# Introduction - Livestream - -This section will guide you through the process of integrating the livestreaming feature into your product. Using Dyte's live-streaming state management APIs you can easily manage stage requests, such as leave and join stage, manage permissions, kick participants and so on. - -The foundation of Dyte's livestreaming is based on a stage, which can be accessed by hosts and viewers. While hosts can directly enter the stage, viewers can request to join it. The stage is broadcasted live to all viewers. - - - Android Core Introduction - - diff --git a/docs/android-core/local-user/_category_.json b/docs/android-core/local-user/_category_.json deleted file mode 100644 index 2c78a8e824..0000000000 --- a/docs/android-core/local-user/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 6, - "label": "Local User", - "collapsible": true -} diff --git a/docs/android-core/local-user/events.mdx b/docs/android-core/local-user/events.mdx deleted file mode 100644 index 2de9d4050e..0000000000 --- a/docs/android-core/local-user/events.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Events -description: >- - Understand and manage local user events in your Android application with - Dyte's documentation on Local User Events. -sidebar_position: 2 -tags: - - android-core - - local-user - - self ---- - -## Local User - Events - -You can subscribe to various events on the local user by implementing `DyteSelfEventsListener` and passing the object to `meeting.addSelfEventsListener(dyteSelfEventsListener)`. - -### Video update - -Triggered when the user starts/stops the video using `enableVideo()` or -`disableVideo()`. - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onVideoUpdate(isEnabled: Boolean) { - if (isEnabled) { - // video is enabled, and other participants in room can see local user - } else { - // video is disabled, and other participants in room can not see local user. - } - } -}) -``` - - - - - -```java -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - @Override - public void onVideoUpdate(boolean isEnabled) { - if (isEnabled) { - // video is enabled, and other participants in room can see local user - } else { - // video is disabled, and other participants in room can not see local user. - } - } -}); -``` - - - - -### Audio update - -Triggered when the user starts/stops the audio using `enableAudio()` or -`disableAudio()`. - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onAudioUpdate(isEnabled: Boolean) { - if (isEnabled) { - // audio is enabled, and other participants in room can hear local user - } else { - // audio is disabled, and other participants in room can not hear local user. - } - } -}) -``` - - - - - -```java -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - override fun onAudioUpdate(boolean isEnabled) { - if (isEnabled) { - // audio is enabled, and other participants in room can hear local user - } else { - // audio is disabled, and other participants in room can not hear local user. - } - } -}); -``` - - - - -### Waitlist status - -For meetings whose waiting room is enabled: - -To get status of localUser in waiting room we can use - - - - -```kotlin -val waitListStatus = meeting.localUser.waitListStatus -``` - - - - - -```java -WaitListStatus waitListStatus = meeting.localUser.getWaitListStatus(); -``` - - - - -You can listen to those changes in `onWaitListStatusUpdate()` callbacks - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onWaitListStatusUpdate(waitListStatus: WaitListStatus) { - // handle waitlist status here - } -}) -``` - - - - - -```java -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - @Override - public void onWaitListStatusUpdate(WaitListStatus waitListStatus) { - // handle waitlist status here - } -}); -``` - - - - -### Screenshare callbacks for local user - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onScreenShareStartFailed(reason: String) { - } - - override fun onScreenShareUpdate(isEnabled: Boolean) { - } -}) -``` - - - - - -```java -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - @Override - public void onScreenShareStartFailed(@NonNull String reason) { - } - - @Override - public void onScreenShareUpdate(boolean isEnabled) { - } -}); -``` - - - - -### Device permission callbacks once local user is joined in the meeting - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onMeetingRoomJoinedWithoutCameraPermission() { - } - - override fun onMeetingRoomJoinedWithoutMicPermission() { - } -}) -``` - - - - - -```kotlin -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - @Override - public void onMeetingRoomJoinedWithoutCameraPermission() { - } - - @Override - public void onMeetingRoomJoinedWithoutMicPermission() { - } -}); -``` - - - - -### When local user is kicked out from the meeting by a remote user - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onRemovedFromMeeting() { - } -}); -``` - - - - - -```java -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - @Override - public void onRemovedFromMeeting() { - } -}) -``` - - - diff --git a/docs/android-core/local-user/introduction.mdx b/docs/android-core/local-user/introduction.mdx deleted file mode 100644 index b8d4bf4d59..0000000000 --- a/docs/android-core/local-user/introduction.mdx +++ /dev/null @@ -1,277 +0,0 @@ ---- -title: Introduction -description: >- - Begin your journey with Dyte by exploring the basics of local user integration - in Android applications. -sidebar_position: 1 -tags: - - android-core - - local-user - - self ---- - -# Introduction - Local User - -The local user in the `meeting` object has a set of methods and properties related to media controls. These can be accessed using the identifier `localUser`. - -## Properties - -Here is a list of properties that local user provides: - -- `id`: ID of the local user participant. -- `name`: Name of the local user. -- `picture`: Picture URL of the local user. -- `customParticipantId`: Unique participant ID. -- `permissions`: Permissions related to various capabilities within a meeting context for the local user. -- `audioEnabled`: A boolean value that shows whether the audio is currently enabled for the local user. -- `videoEnabled`: A boolean value that shows whether the video is currently enabled for the local user. -- `screenshareEnabled`: A boolean value that shows whether the screenshare is currently enabled for the local user. -- `presetName`: A string value representing name of preset for local user. You can find this preset on Dyte Developer Portal -- `presetInfo` : A typed object representing the preset information for local user. -- `roomJoined`: A boolean value representing if local user has joined the room or not. -- `isCameraPermissionGranted`: A boolean value representing if local user has access to device Camera permission. -- `isMicrophonePermissionGranted`: A boolean value representing if local user has access to device Microphone permission. -- `waitListStatus`: Waitlist Status of the local user. It can have four values. None, Waiting, Accepted & Rejected. - -## Change default audio/video settings - -When local user joins the meeting, the SDK will automatically enable local user's video and audio streams. If you want to change this behavior, use the `audioEnabled` and `videoEnabled` parameters while configuring the meeting. - - - - -```kotlin {3,4} -val meetingInfo = DyteMeetingInfoV2( - authToken = AUTH_TOKEN, - audioEnabled = false, - videoEnabled = true - ) -``` - - - - -```java {3,4} -DyteMeetingInfoV2 meetingInfo = new DyteMeetingInfoV2( - AUTH_TOKEN, - false, - true, - "dyte.io" - ); -``` - - - - -## Get local user video view - -To display the `localUser` preview in a view, utilize the `getSelfPreview()` method on `localUser`. This method provides a View that can be added to any `ViewGroup` in Android. - - - - -```kotlin -meeting.localUser.getSelfPreview() -``` - - - - -```kotlin -meeting.localUser.getSelfPreview(); -``` - - - - -## Update the local user's name - -You can change the user's name by using the `setDisplayName` method. However, the name change will be visible to all participants only if it occurs before `joinRoom()` the meeting and after the `init()` process. - - - - -```kotlin -meeting.localUser.setDisplayName("New Name") -``` - - - - -```java -meeting.localUser.setDisplayName("New Name"); -``` - - - - -## Mute/unmute microphone - -Mute/unmute your microphone in the meeting using `disableAudio()` and `enableAudio()` methods, and check the current status with `audioEnabled`. - - - - -```kotlin -// Get current status -meeting.localUser.audioEnabled - -// Mute Audio -meeting.localUser.disableAudio {} - -// Unmute Audio -meeting.localUser.enableAudio {} -``` - - - - -```java -// Get current status -meeting.localUser.getAudioEnabled(); - -// Mute Audio -meeting.localUser.disableAudio(error -> null); - -// Unmute Audio -meeting.localUser.enableAudio(error -> null); -``` - - - - -## Enable/disable camera - -Enable/disable your camera in the meeting using `disableVideo()` and `enableVideo()` methods, and check the current status with `videoEnabled`. - - - - -```kotlin -// Get current status -meeting.localUser.videoEnabled - -// Disable Video -meeting.localUser.disableVideo {} - -// Enable Video -meeting.localUser.enableVideo {} -``` - - - - -```java -// Get current status -meeting.localUser.getVideoEnabled(); - -// Disable Video -meeting.localUser.disableVideo(error -> null); - -// Enable Video -meeting.localUser.enableVideo(error -> null); -``` - - - - -## Enable / Disable Screen share - -:::tip Note -To use screenshare on Android devices running Android API 14 and above, you will need to declare the following permission in your app's AndroidManifest.xml. - -`` - -Adding above permission will require you to do extra steps on Google Play Console while submitting the app. For more information please refer [this](https://support.google.com/googleplay/android-developer/answer/13392821?hl=en#declare). -::: - - - - -```kotlin -// Get current status -meeting.localUser.screenShareEnabled - -// Enable Screenshare -meeting.localUser.enableScreenShare() - -// Disable Screenshare -meeting.localUser.disableScreenShare() -``` - - - - -```java -// Get current status -meeting.localUser.getScreenShareEnabled(); - -// Enable Screenshare -meeting.localUser.enableScreenShare(); - -// Disable Screenshare -meeting.localUser.disableScreenShare(); -``` - - - - -## Switch camera between available camera devices - - - - -```kotlin -// get all available video devices -val devices = meeting.localUser.getVideoDevices() - -// switch video device -meeting.localUser.setVideoDevice(devices[0]) - -// on devices with only 2 cameras you can use -meeting.localUser.switchCamera() -``` - - - - -```java -// get all available video devices -List devices = meeting.localUser.getVideoDevices(); - -// switch video device -meeting.localUser.setVideoDevice(devices.get(0)); - -// on devices with only 2 cameras you can use -meeting.localUser.switchCamera(); -``` - - - - -## Switch between available audio devices for audio input/output - - - - -```kotlin -// get all available audio devices -val devices = meeting.localUser.getAudioDevices() - -// switch video device -meeting.localUser.setAudioDevice(devices[0]) -``` - - - - -```java -// get all available video devices -List devices = meeting.localUser.getAudioDevices(); - -// switch video device -meeting.localUser.setAudioDevice(devices.get(0)); -``` - - - diff --git a/docs/android-core/local-user/manage-media-devices.mdx b/docs/android-core/local-user/manage-media-devices.mdx deleted file mode 100644 index 1e7dd24527..0000000000 --- a/docs/android-core/local-user/manage-media-devices.mdx +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Manage Media Devices -description: '"Effectively manage media devices on Android using Dyte''s documentation' -sidebar_position: 3 -tags: - - android-core - - local-user - - self - - self events ---- - -# Manage Media Devices - -To get the list of media devices that are currently being used, you can -use the following methods: - - - - -```kotlin -// Get all audio devices -val audioDevices: List = meeting.localUser.getAudioDevices() - -// Get all video devices -val videoDevices: List = meeting.localUser.getVideoDevices() -``` - - - - - -```java -// Get all audio devices -List audioDevices = meeting.getLocalUser().getAudioDevices(); - -// Get all video devices -List videoDevices = meeting.getLocalUser().getVideoDevices(); -``` - - - - -## Set audio device - -To set a device as an active device, you can call `setAudioDevice` method. This -takes a `DyteAudioDevice` object. - - - - -```kotlin -meeting.localUser.setAudioDevice(device) -``` - - - - - -```kotlin -meeting.getLocalUser().setAudioDevice(device); -``` - - - - -## Set video device - -To set a video device as an active device, you can call `setVideoDevice` method. -This takes a `DyteVideoDevice` object. - - - - -```kotlin -meeting.localUser.setVideoDevice(device) -``` - - - - - -```kotlin -meeting.getLocalUser().setVideoDevice(device); -``` - - - - - - Android Core Manage Media Devices - - diff --git a/docs/android-core/local-user/manage-permissions.mdx b/docs/android-core/local-user/manage-permissions.mdx deleted file mode 100644 index b3f70b4435..0000000000 --- a/docs/android-core/local-user/manage-permissions.mdx +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Media Permissions -description: >- - Learn how to manage permissions in your Android application for a secure and - controlled user experience with Dyte Docs. -sidebar_position: 4 -tags: - - android-core - - local-user - - self - - self events ---- - -# Media Permissions - -To get media permissions (audio/video) for localUser we can do as follows - - - - -```kotlin -val isCameraPermissionGranted - = meeting.localUser.isCameraPermissionGranted -val isMicrophonePermissionGranted - = meeting.localUser.isMicrophonePermissionGranted -``` - - - - - -```java -boolean isCameraPermissionGranted - = meeting.localUser.isCameraPermissionGranted(); -boolean isMicrophonePermissionGranted - = meeting.localUser.isMicrophonePermissionGranted(); -``` - - - - -Similarly to listen to callbacks regarding media permissions once user joins -the meeting - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onMeetingRoomJoinedWithoutCameraPermission() { - } - - override fun onMeetingRoomJoinedWithoutMicPermission() { - } -}) -``` - - - - - -```kotlin -meeting.addSelfEventsListener(new : DyteSelfEventsListener() { - @Override - public void onMeetingRoomJoinedWithoutCameraPermission() { - } - - @Override - public void onMeetingRoomJoinedWithoutMicPermission() { - } -}); -``` - - - - - - Android Core Media Permissions - - diff --git a/docs/android-core/participants/_category_.json b/docs/android-core/participants/_category_.json deleted file mode 100644 index 1506bb147c..0000000000 --- a/docs/android-core/participants/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 7, - "label": "Remote Participants", - "collapsible": true -} diff --git a/docs/android-core/participants/events.mdx b/docs/android-core/participants/events.mdx deleted file mode 100644 index 94fd5a26ed..0000000000 --- a/docs/android-core/participants/events.mdx +++ /dev/null @@ -1,476 +0,0 @@ ---- -title: Participant Events -description: >- - Dive into the details of handling participant events in your Android - application using Dyte's comprehensive documentation. -sidebar_position: 3 -tags: - - android-core - - participants - - self ---- - -## All Participants Events - -You can subscribe to events for all participants by implementing -`DyteParticipantsEventListener` callback and then passing that object to -`meeting.addParticipantsEventListener(dyteParticipantEventsListener)` method. - -Here are the supported methods: - -### Participant joined - -Triggers an event when any participant joins the meeting. - - - - -```kotlin - private val participantsEventListener = object : DyteParticipantsEventListener { - override fun onParticipantJoin(participant: DyteRemoteParticipant) { - } - } -``` - - - - - -```java - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onParticipantJoin(DyteRemoteParticipant participant) { - } - }; -``` - - - - -### Participant left - -Triggers an event when any participant leaves the meeting. - - - - -```kotlin - private val participantsEventListener = object : DyteParticipantsEventListener { - override fun onParticipantLeave(participant: DyteRemoteParticipant) { - } - } -``` - - - - - -```java - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onParticipantLeave(DyteRemoteParticipant participant) { - } - }; -``` - - - - -### Participants update - -Triggers an event whenever there is any change in the `meeting.participants` object. This includes any updates to participant lists or changes in individual participant within those lists. - - - - -```kotlin - private val participantEventsListener = object : DyteParticipantsEventListener { - override fun onUpdate(participants: DyteParticipants) { - // your code here to handle participant update - } - } -``` - - - - - -```java - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onUpdate(DyteParticipants participants) { - // your code here to handle participant update - } - }; -``` - - - - -### Video update - -Triggers an event when any participant starts / stops video. - - - - -```kotlin - private val participantEventsListener = object : DyteParticipantsEventListener { - override fun onVideoUpdate(participant: DyteRemoteParticipant, isEnabled: Boolean) { - // your code here to handle participant video toggle update - } - } -``` - - - - - -```java - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onVideoUpdate(DyteRemoteParticipant participant, boolean isEnabled) { - // your code here to handle participant video toggle update - } - }; -``` - - - - -### Audio update - -Triggers an event when any participant starts / stops audio. - - - - -```kotlin - private val participantEventsListener = object : DyteParticipantsEventListener { - override fun onAudioUpdate(participant: DyteRemoteParticipant, isEnabled: Boolean) { - // your code here to handle participant audio toggle update - } - } -``` - - - - - -```java - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onAudioUpdate(@NonNull DyteRemoteParticipant participant, boolean isEnabled) { - // your code here to handle participant audio toggle update - } - }; -``` - - - - -### Screenshare updates - -Triggers an event when there is any change in screenshares in a meeting. - - - - -```kotlin - private val participantEventsListener = object : DyteParticipantsEventListener { - override fun onScreenShareUpdate(participant: DyteRemoteParticipant, isEnabled: Boolean) { - // your code here to handle screenshares from meeting - // you can use `meeting.participants.screenshares` to get latest screenshare participants - } - } -``` - - - - - -```java - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onScreenShareUpdate(@NonNull DyteRemoteParticipant participant, boolean isEnabled) { - // your code here to handle screenshares from meeting - // you can use `meeting.participants.screenshares` to get latest screenshare participants - } - }; -``` - - - - -### Active speaker - -Triggers an event when there is any change in active speaker in the meeting. - - - - -```kotlin - private val participantEventsListener = object : DyteParticipantsEventListener { - override fun onActiveSpeakerChanged(participant: DyteRemoteParticipant?) { - // If participant is null, there is no active speaker - } - } -``` - - - - - -```java - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onActiveSpeakerChanged(@Nullable DyteRemoteParticipant participant) { - // If participant is null, there is no active speaker - } - }; -``` - - - - -### Pinned participant - -Triggers an event when there is any change in pinned participant in the meeting. - - - - -```kotlin - private val participantEventsListener = object : DyteParticipantsEventListener { - override fun onParticipantPinned(participant: DyteRemoteParticipant) { - } - - override fun onParticipantUnpinned(participant: DyteRemoteParticipant) { - } - } -``` - - - - - -```kotlin - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onParticipantPinned(DyteRemoteParticipant participant) { - } - - @Override - public void onParticipantUnpinned(DyteRemoteParticipant participant) { - } - }; -``` - - - - -### Active participants list change - -Triggers an event when there is any change in active participants list in the meeting. - - - - -```kotlin - private val participantEventsListener = object : DyteParticipantsEventListener { - override fun onActiveParticipantsChanged(active: List) { - } - } -``` - - - - - -```kotlin - DyteParticipantsEventListener listener = new DyteParticipantsEventListener() { - @Override - public void onActiveParticipantsChanged(List participants) { - } - }; -``` - - - - -## Single Participant Events - -You can also subscribe to events for a single participant by implementing `DyteParticipantUpdateListener` callback and then passing that object to `participant.addParticipantUpdateListener(dyteParticipantUpdateListener)` method. - -Here are the supported methods: - -### Participant update - -Triggers an event whenever there is any change in participant. - - - - -```kotlin - private val participantUpdateListener = object : DyteParticipantUpdateListener { - override fun onUpdate(participant: DyteRemoteParticipant) { - // your code here to handle participant update - } - } -``` - - - - - -```java - DyteParticipantUpdateListener participantUpdateListener = new DyteParticipantUpdateListener() { - @Override - public void onUpdate(DyteRemoteParticipant participant) { - // your code here to handle participant update - } - } -``` - - - - -### Video update - -Triggers an event when the participant starts / stops video. - - - - -```kotlin - private val participantUpdateListener = object : DyteParticipantUpdateListener { - override fun onVideoUpdate(participant: DyteRemoteParticipant, isEnabled: Boolean) { - } - } -``` - - - - - -```java - DyteParticipantUpdateListener participantUpdateListener = new DyteParticipantUpdateListener() { - @Override - public void onVideoUpdate(DyteRemoteParticipant participant, boolean isEnabled) { - } - } -``` - - - - -### Audio update - -Triggers an event when the participant starts / stops audio. - - - - -```kotlin - private val participantUpdateListener = object : DyteParticipantUpdateListener { - override fun onAudioUpdate(participant: DyteRemoteParticipant, isEnabled: Boolean) { - // your code here to handle participant audio toggle update - } - } -``` - - - - - -```java - DyteParticipantUpdateListener participantUpdateListener = new DyteParticipantUpdateListener() { - @Override - public void onAudioUpdate(DyteRemoteParticipant participant, boolean isEnabled) { - // your code here to handle participant audio toggle update - } - } -``` - - - - -### Pinned & Unpinned participant - -Triggers an event when the participant is pinned / unpinned. - - - - -```kotlin - private val participantUpdateListener = object : DyteParticipantUpdateListener { - override fun onPinned(participant: DyteRemoteParticipant) { - // your code here to show pinned participant - } - - override fun onUnpinned(participant: DyteRemoteParticipant) { - // your code here to remove pinned participant - } - } -``` - - - - - -```java - DyteParticipantUpdateListener participantUpdateListener = new DyteParticipantUpdateListener() { - @Override - public void onPinned(DyteRemoteParticipant participant) { - // your code here to show pinned participant - } - - @Override - public void onUnpinned(DyteRemoteParticipant participant) { - // your code here to remove pinned participant - } - } -``` - - - - -### Screen share started & ended - -Triggers an event when the participant starts / stops screen sharing. - - - - -```kotlin - private val participantUpdateListener = object : DyteParticipantUpdateListener { - override fun onScreenShareStarted(participant: DyteRemoteParticipant) { - // your code here to handle screen share started - } - - override fun onScreenShareEnded(participant: DyteRemoteParticipant) { - // your code here to handle screen share ended - } - } -``` - - - - - -```java - DyteParticipantUpdateListener participantUpdateListener = new DyteParticipantUpdateListener() { - @Override - public void onScreenShareStarted(DyteRemoteParticipant participant) { - // your code here to handle screen share started - } - - @Override - public void onScreenShareEnded(DyteRemoteParticipant participant) { - // your code here to handle screen share ended - } - } -``` - - - diff --git a/docs/android-core/participants/participant-object.mdx b/docs/android-core/participants/participant-object.mdx deleted file mode 100644 index 7e73769ece..0000000000 --- a/docs/android-core/participants/participant-object.mdx +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: Participant Object -description: The object corresponding to a particular participant. -sidebar_position: 2 -slug: /participants/participant-object -tags: - - android-core - - participants ---- - -# The participant object - -The data regarding all meeting participants is stored under `meeting.participants`. Use the methods and events to consume the participants data. - -The `participant` object consists of all the information related to a particular participant. For instance, it contains a participants video/audio/screenshare stream, and the participant's name. It also contains state variables that indicate whether a participant's camera is on or off, and whether they are muted or unmuted. - -The participant object has the following properties. - -- `id`: The `participantId` of the participant (aka `peerId`). -- `userId`: The `userId` of the participant. -- `name`: The participant's name. -- `picture`: The participant's picture (if any). -- `customParticipantId`: An arbitrary ID that can be set to identify the - participant. -- `videoEnabled`: Set to true if the participant's camera is on. -- `audioEnabled`: Set to true if the participant is unmuted. -- `isPinned`: True if current user is pinned in the meeting room. -- `presetName`: Name of the preset associated with the participant. -- `stageStatus`: Status of stage for the participant - -## To get video view of a given participant - -You can call `participant.getVideoView()` which will return a View which further -can used to add in any ViewGroup in android. - -Similarly one can use `participant.getScreenShareVideoView()` which will return a -View which further can used to add in any ViewGroup in android. - -Similarly, you can also access the pagination related information like follows: - - - - -```kotlin -val maxNumberOnScreen = meeting.participants.maxNumberOnScreen -val currentPageNumber = meeting.participants.currentPageNumber -val pageCount = meeting.participants.pageCount -val canGoNextPage = meeting.participants.canGoNextPage -val canGoPreviousPage = meeting.participants.canGoPreviousPage -``` - - - - - -```java -int maxNumberOnScreen = meeting.participants.getMaxNumberOnScreen(); -int currentPageNumber = meeting.participants.getCurrentPageNumber(); -int pageCount = meeting.participants.getPageCount(); -boolean canGoNextPage = meeting.participants.getCanGoNextPage(); -boolean canGoPreviousPage = meeting.participants.getCanGoPreviousPage(); -``` - - - - -## Move between pages in paginated mode - -The `setPage` method allows you to switch between pages of participants present in the meeting. - - - - -```kotlin -// switch to 1st page -meeting.participants.setPage(1) -``` - - - - - -```java -// switch to 1st page -meeting.participants.setPage(1) -``` - - - - -## Host Controls - -If you (the local user) have the relevant permissions, you can disable a participant's video or audio, or kick them from the meeting. - - - - -```kotlin -val participant = meeting.participants.joined.firstOrNull { it.id == participantId } - -participant?.let { pcpt -> - // To disable a participant's video stream - pcpt.disableVideo() - - // To disable a participant's audio stream - pcpt.disableAudio() - - // To kick a participant from the meeting - pcpt.kick() -} -``` - - - - - -```java -Optional participant = meeting.getParticipants().getJoined() - .stream() - .filter(pcpt -> pcpt.getId().equals(participantId)) - .findFirst(); - -participant.ifPresent(pcpt -> { - // To disable a participant's video stream - pcpt.disableVideo(); - - // To disable a participant's audio stream - pcpt.disableAudio(); - - // To kick a participant from the meeting - pcpt.kick(); -}); -``` - - - - -You can also `pin` or `unpin` a participant in the meeting. All "pinned" -participants are added to the `meeting.participants.pinned` list. - - - - -```kotlin -val participant = meeting.participants.joined.firstOrNull { it.id == participantId } - -participant?.let { pcpt -> - // To pin a participant - pcpt.pin(); - - // To unpin a participant - pcpt.unpin(); -} -``` - - - - - -```java -Optional participant = meeting.getParticipants().getJoined() - .stream() - .filter(pcpt -> pcpt.getId().equals(participantId)) - .findFirst(); - -participant.ifPresent(pcpt -> { - // To pin a participant - pcpt.pin(); - - // To unpin a participant - pcpt.unpin(); -}); -``` - - - - -## Broadcast message to all participants - -Send a message to all `joined` participants. - -_Parameters_: - -`type`: A client-specific type to differentiate between custom messages like "emoji" or "greetings" - -`payload`: A Map containing the message payload, of type `Map`. - - - - -```kotlin -// broadcast message -meeting.participants.broadcastMessage(type, payload) -``` - - - - - -```java -// broadcast message -meeting.participants.broadcastMessage(type, payload); -``` - - - - - - Android Core The participant object - - diff --git a/docs/android-core/participants/remote-participants.mdx b/docs/android-core/participants/remote-participants.mdx deleted file mode 100644 index d939e11657..0000000000 --- a/docs/android-core/participants/remote-participants.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Participant Types -description: 'Events, methods and data pertaining to meeting participants.' -sidebar_position: 1 -slug: /participants/ -tags: - - android-core - - participants ---- - -# Participant Types - -The data regarding all meeting participants is stored under `meeting.participants`. These **does not** include the local user. Use the methods and events to consume the participants data. For example, to get all the participants who joined the meeting: - - - - -```kotlin -// get all joined participants -val joined: List = meeting.participants.joined - -// get active participants -val active: List = meeting.participants.active -``` - - - - - -```java -// get all joined participants -List joined = meeting.getParticipants().getJoined(); - -// get active participants -List active = meeting.getParticipants().getActive(); -``` - - - - -The `meeting.participants` object has the following **lists** of participants - -- **joined**: A list that contains all the participants who are currently in the meeting - except the local user -- **waitlisted**: A list that contains all the participants waiting to join the - meeting. -- **active**: A list that contains all the participants, **excluding** the local user whose media is subscribed to i.e participants who are supposed to be on the screen at the moment, except the local user. -- **pinned**: A list that contains all the pinned participants of the meeting. -- **screenShares**: A list that contains all the participants who are sharing their screen. - -Therefore if you were to make a video / audio grid of participants, you'd use the `active` list, but to display the list of all participants in the meeting you'd use the `joined` list. - - - Android Core Participants - diff --git a/docs/android-core/participants/waitlisted-participants.mdx b/docs/android-core/participants/waitlisted-participants.mdx deleted file mode 100644 index c8188f8747..0000000000 --- a/docs/android-core/participants/waitlisted-participants.mdx +++ /dev/null @@ -1,127 +0,0 @@ ---- -title: Waitlisted Participants -description: 'Events, methods and data to manage waiting room participants.' -sidebar_position: 4 -tags: - - android-core - - participants - - waitlisted - - waiting room ---- - -Participants in the waiting room are represented by `DyteRemoteParticipant` objects. If the local user has the permission to -accept waiting room requests (`selfPermissions.host.canAcceptRequests` is true), you can manage pending waiting room requests, -accepting or rejecting them as needed. -You can access the list of waitlisted participants via the `meeting.participants.waitlisted` property. - -**Note**: If the local user is not a host, `meeting.participants.waitlisted` property returns an empty list. - -### Accepting Requests - -To accept a waiting room request, use the `acceptWaitingRoomRequest(String)` method on a `DyteParticipants` object: - - - - -```kotlin -val waitlistedParticipant = meeting.participants.waitlisted[0] -meeting.participants.acceptWaitingRoomRequest(waitlistedParticipant.id) -``` - - - - - -```kotlin -DyteRemoteParticipant waitlistedParticipant = meeting.getParticipants().getWaitlisted().get(0); -meeting.getParticipants().acceptWaitingRoomRequest(waitlistedParticipant.id); -``` - - - - -### Rejecting Requests - -To deny a waiting room request, use the `rejectWaitingRoomRequest(String)` method on a `DyteParticipants` object: - - - - -```kotlin -val waitlistedParticipant = meeting.participants.waitlisted[0] -meeting.participants.rejectWaitingRoomRequest(waitlistedParticipant.id) -``` - - - - - -```java -DyteRemoteParticipant waitlistedParticipant = meeting.getParticipants().getWaitlisted().get(0); -meeting.getParticipants().rejectWaitingRoomRequest(waitlistedParticipant.id); -``` - - - - -### Waiting Room Events - -Implement the `DyteWaitlistEventsListener` interface to listen for events related to the waiting room: - - - - -```kotlin -meeting.addWaitlistEventsListener(object: DyteWaitlistEventsListener { - override fun onWaitListParticipantJoined(participant: DyteRemoteParticipant) { - // Triggered when a new participant joins the waiting room - } - - override fun onWaitListParticipantAccepted(participant: DyteRemoteParticipant) { - // Triggered when a waitlisted participant is accepted into the meeting - } - - override fun onWaitListParticipantRejected(participant: DyteRemoteParticipant) { - // Triggered when a waitlisted participant is denied entry into the meeting - } - - override fun onWaitListParticipantClosed(participant: DyteRemoteParticipant) { - // Triggered when a waitlisted participant leaves the waiting room - } -}) -``` - - - - - -```kotlin -meeting.addWaitlistEventsListener(new DyteWaitlistEventsListener() { - @Override - public void onWaitListParticipantJoined(DyteRemoteParticipant participant) { - // Triggered when a new participant joins the waiting room - } - - @Override - public void onWaitListParticipantAccepted(DyteRemoteParticipant participant) { - // Triggered when a waitlisted participant is accepted into the meeting - } - - @Override - public void onWaitListParticipantRejected(DyteRemoteParticipant participant) { - // Triggered when a waitlisted participant is denied entry into the meeting - } - - @Override - public void onWaitListParticipantClosed(DyteRemoteParticipant participant) { - // Triggered when a waitlisted participant leaves the waiting room - } -}) -``` - - - - - - Android Core Waitlisted Participants - diff --git a/docs/android-core/plugins/_category_.json b/docs/android-core/plugins/_category_.json deleted file mode 100644 index 5772922e2f..0000000000 --- a/docs/android-core/plugins/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 8, - "label": "Plugins", - "collapsible": true -} diff --git a/docs/android-core/plugins/enable-disable-plugin.mdx b/docs/android-core/plugins/enable-disable-plugin.mdx deleted file mode 100644 index 19fd9ed5ae..0000000000 --- a/docs/android-core/plugins/enable-disable-plugin.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Functions to enable plugins -description: Methods on a plugin in a meeting. -sidebar_position: 2 -tags: - - android-core - - plugins ---- - -## Enable Plugins - -Each plugin in `meeting.plugins` object is of type -[`DytePlugin`](./introduction) and exposes the following functions to enable -plugins. - -### Activate Plugins - -The `activate()` method activates a plugin for all users in the meeting. When -you activate a plugin, it moves into the active plugins list and can be accessed -from `meeting.plugins.active`. - -The snippet below retrieves the first plugin from the list and activates it. - -```kotlin -val plugin: DytePlugin = meeting.plugins.all[0] - -plugin.activate() -``` - -This directly activates the plugin without any user interaction. - -For e.g. you can also show a list of all plugins and activate a plugin on click programmatically. - -```kotlin -val plugins: List = meeting.plugins.all - -plugins.forEach { plugin -> - val button = Button(context) - - button.text = "Activate ${plugin.name}" - button.setOnClickListener { - plugin.activate() - } - - // Add the button to your view - view.addView(button) -} -``` - -### Get Plugin View - -When a plugin is enabled, the core SDK adds a communication layer between the plugin inside the WebView and -itself (meeting object). The `getPluginView()` method returns a configured WebView of an active plugin, that can be added to a -ViewGroup. - -```kotlin -val plugin = meeting.plugins.active[0] - -plugin.getPluginView() // This will return a WebView -``` - -## Disable Plugins - -Each plugin in `meeting.plugins` object is of type -[`DytePlugin`](./introduction) and exposes the following functions to disable -plugins. - -### Deactivate Plugin - -The `deactivate()` method deactivates the plugin for all users in the meeting. When you deactivate a plugin, it moves out of the active plugins list and can only be accessed from `meeting.plugins.all`. - -```kotlin -val plugin = meeting.plugins.active[0] - -plugin.deactivate() -``` - - - Android Core Enable-Disable Plugins - diff --git a/docs/android-core/plugins/extra.mdx b/docs/android-core/plugins/extra.mdx deleted file mode 100644 index 840ecc1b9d..0000000000 --- a/docs/android-core/plugins/extra.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Other methods -description: Methods on a plugin in a meeting. -sidebar_position: 3 -tags: - - android-core - - plugins ---- - -## Send data to the plugin - -You can send data (type `any`) to a plugin using the `sendData()` method. This method comes in handy when building your own plugin. - -```kotlin -val pluginId = '...'; -val plugin = meeting.plugins.active.firstOrNull { it.id == pluginId } - -plugin?.let { p -> - p.sendData( - eventName = "my-custom-event", - data = "Hello world" - ) -} -``` - -## Listening to plugin events - -You can receive data from a plugin by implementing the `onPluginMessage()` method defined in `DytePluginEventsListener` interface. This method comes in handy when building your own plugin. - -```kotlin -val pluginEventListener = object : DytePluginEventsListener { - override fun onPluginActivated(plugim: DytePlugin) { - ... - } - - override fun onPluginDeactivated(plugin: DytePlugin) { - ... - } - - override onPluginMessage(plugin: DytePlugin, eventName: String, data: Any?) { - ... - } - - override onPluginFileRequest(plugin: DytePlugin) { - ... - } -} - -meeting.addPluginEventsListener(pluginEventListener) -``` - -## Upload file to a plugin - -You can upload a file to a plugin that supports file uploads using the `uploadFile()` method. This method comes in handy when -building your own plugin. - -```kotlin -val pluginId = '...'; -val plugin = meeting.plugins.active.firstOrNull { it.id == pluginId } - -plugin?.let { p -> - p.uploadFile( - DytePluginFile( - resultCode = 1, - data = Intent() // Intent with the file data - ) - ) -} -``` diff --git a/docs/android-core/plugins/introduction.mdx b/docs/android-core/plugins/introduction.mdx deleted file mode 100644 index b7fb03aaa8..0000000000 --- a/docs/android-core/plugins/introduction.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Introduction -description: Manage plugins in a meeting. -sidebar_position: 1 -tags: - - android-core - - plugins ---- - -# Introduction - -Plugins are one-click add-ons that can make your meetings more immersive and collaborative. Dyte provides a bunch of inbuilt plugins to choose from, you can also build your own plugins using the [Plugin SDK](../../plugin-sdk/). - -The meeting plugins can be accessed from the `meeting.plugins` object, it exposes the following. - -| Property | Type | Description | -| -------- | ---- | -------------------------------------- | -| active | List | All plugins that are currently in use. | -| all | List | All plugins the meeting has access to. | - -Each plugin in the list is of type `DytePlugin` which has the following public fields and methods: - -```kotlin -class DytePlugin { - val id: String - val name: String - val description: String - val picture: String - val isPrivate: Boolean - val staggered: Boolean - val baseURL: String - val config: PluginConfig - val isActive: Boolean - val enabledBy: String? - - fun activate() - fun deactivate() - fun getPluginView(): WebView - fun uploadFile(file: DytePluginFile) - fun sendData(eventName: String, data: Any?) -} -``` - -The `PluginConfig` type consists of the following fields: - -```kotlin -data class PluginConfig( - val accessControl: String = "FULL_ACCESS" -) -``` - - - Android Core Plugins Introduction - diff --git a/docs/android-core/polls/_category_.json b/docs/android-core/polls/_category_.json deleted file mode 100644 index fe2eed0b04..0000000000 --- a/docs/android-core/polls/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 10, - "label": "Polls", - "collapsible": true -} diff --git a/docs/android-core/polls/creating-a-poll.mdx b/docs/android-core/polls/creating-a-poll.mdx deleted file mode 100644 index cccbbd7d3d..0000000000 --- a/docs/android-core/polls/creating-a-poll.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Creating a poll -description: >- - Create and manage polls in your Android app using Dyte's documentation on - Polls Creation. -sidebar_position: 2 -tags: - - android-core - - polls - - create ---- - -# Creating a poll - -A new poll can be created using the `create` method from the -[`meeting.polls`](./introduction) object. The `meeting.polls.create()` method -accepts the following params. - -| Param | Type | Default Value | Required | Description | -| --------- | -------- | ------------- | -------- | ------------------------------------------ | -| question | string | - | yes | The question that is to be voted for. | -| options | string[] | - | yes | The options of the poll. | -| anonymous | boolean | - | no | If true, the poll votes are anonymous. | -| hideVotes | boolean | - | no | If true, the votes on the poll are hidden. | - -The following snippet creates a poll where votes are anonymous. - -```kotlin -meeting.poll.create( - "Are you an early bird or a night owl?", - listOf("Early bird", "Night owl"), - true, - false -) -``` - - - Android Core Creating a poll - - diff --git a/docs/android-core/polls/introduction.mdx b/docs/android-core/polls/introduction.mdx deleted file mode 100644 index be656d6ab6..0000000000 --- a/docs/android-core/polls/introduction.mdx +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Introduction -description: >- - Learn the fundamentals of integrating polls into your Android application with - Dyte's Polls Introduction guide. -sidebar_position: 1 -tags: - - android-core - - polls ---- - -# Introduction - -The meetings polls object can be accessed using `meeting.polls`. It provides -methods to create polls, vote, and more. - -`meeting.polls.polls` returns an array of all polls created in a meeting, where -each element is an object of type `DytePollMessage`. - -```kotlin -data class DytePollMessage( - val id: String, - val question: String, - val anonymous: Boolean, - val hideVotes: Boolean, - val createdBy: String, - val options: List, -) -``` - -The type `DytePollMessage` represents a poll in a Dyte meeting. It also -contains list of `DytePollOption` which are options for a given poll. And every -`DytePollOption` has list of votes inside of it. Votes are objects of class -`DytePollVote` which internally has id and name of the vote. - -```kotlin -data class DytePollOption( - val text: String, - val votes: List, - val count: Int -) - -data class DytePollVote( - val id: String, - val name: String -) -``` - -One can easily create, vote and view polls by listening to callbacks on -`meeting` object. - -## Listening to new polls in a meeting - -To be able to receive new poll messages you need to implement a method -`onPollUpdates()` method from callback `DyteMeetingRoomEventsListener`. You can -subscribe to this events by calling -`meeting.addMeetingEventsListener(dyteMeetingRoomEventsListener)` - -```kotlin -meeting.addMeetingRoomEventsListener(object : - DyteMeetingRoomEventsListener { - override fun onNewPoll(poll: DytePollMessage) { - // code to handle new poll - } - - override fun onPollUpdates(pollMessages: List) { - // code to handle polls and their vote updates. - } - }) -``` - - - Android Core Polls Introduction - diff --git a/docs/android-core/polls/voting-on-a-poll.mdx b/docs/android-core/polls/voting-on-a-poll.mdx deleted file mode 100644 index 7f72d30e4e..0000000000 --- a/docs/android-core/polls/voting-on-a-poll.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Voting on a poll -description: >- - Understand the process of voting on polls within your Android app using Dyte's - documentation on Polls Voting. -sidebar_position: 3 -tags: - - android-core - - polls - - votes ---- - -# Voting on a poll - -The `meeting.polls.vote()` method can be used to register a vote on a poll. It -accepts the following params. - -| Param | Type | Default Value | Required | Description | -| ----------- | --------------- | ------------- | -------- | ---------------------------- | -| pollMessage | DytePollMessage | - | yes | The poll message to vote on. | -| pollOption | DytePollOption | - | yes | The option to vote for. | - -The following snippet votes for the 1st option on the 1st poll created in the -meeting. - -```kotlin -val poll: DytePollMessage = meeting.polls.items[0] -val selectedPollOption: DytePollOption = poll.options[0] - -meeting.poll.vote(poll, selectedPollOption) -``` - - - Android Core Voting On a Poll - diff --git a/docs/android-core/pre-call/1-media-preview.mdx b/docs/android-core/pre-call/1-media-preview.mdx deleted file mode 100644 index 3bb76f110f..0000000000 --- a/docs/android-core/pre-call/1-media-preview.mdx +++ /dev/null @@ -1,223 +0,0 @@ -# Media Preview - -Before joining a meeting, users may want to preview and configure their media devices like camera, microphone, and audio output. -This section provides developers with the tools to prepare the media environment before joining a Dyte meeting. - -If you are using our UI Kits, this functionality can be handled by `DyteSetupFragment` or built with `DyteParticipantTileView` -and `DyteSettingsFragment` components. - -## Properties - -- `meeting.localUser.audioEnabled`: A boolean value indicating if the audio is currently enabled. -- `meeting.localUser.videoEnabled`: A boolean value indicating if the video is currently enabled. - -## Methods - -### Toggling Media - -The same methods used for controlling media during a meeting are also applicable for pre-call media configuration. - -**1. Mute/Unmute microphone** - - - - -```kotlin -// Mute Audio -meeting.localUser.disableAudio {} - -// Unmute Audio -meeting.localUser.enableAudio {} -``` - - - - - -```java -// Mute Audio -meeting.localUser.disableAudio(error -> null); - -// Unmute Audio -meeting.localUser.enableAudio(error -> null); -``` - - - - -```mermaid -flowchart LR - classDef basic fill:white; - - eam("enableAudio()") --> success("Gives onAudioUpdate callback to DyteSelfEventsListener") - - class eam basic; -``` - -
- -Anytime there is an update in the audio state of the local user, the Core SDK notifies the client through the `onAudioUpdate` callback -from `DyteSelfEventsListener`. Here's how you can register the listener: - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onAudioUpdate(isEnabled: Boolean) { - // Show a visual preview of the audio to the user if enabled - } -}) -``` - - - - - -```java -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - @Override - public void onAudioUpdate(boolean isEnabled) { - // Show a visual preview of the audio to the user if enabled - } -}); -``` - - - - -**2. Enable/Disable camera** - - - - -```kotlin -// Disable Video -meeting.localUser.disableVideo {} - -// Enable Video -meeting.localUser.enableVideo {} -``` - - - - - -```java -// Disable Video -meeting.localUser.disableVideo(error -> null); - -// Enable Video -meeting.localUser.enableVideo(error -> null); -``` - - - - -```mermaid -flowchart LR - classDef basic fill:white; - - eam("enableVideo()") --> success("Gives onVideoUpdate callback to DyteSelfEventsListener") - - class eam basic; -``` - -
- -Whenever there is an update in the video state of the local user, the Core SDK notifies the client through the `onVideoUpdate` callback -from `DyteSelfEventsListener`. Here's how you can register the listener: - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onVideoUpdate(isEnabled: Boolean) { - // Show local user's VideoView if video is enabled - } -}) -``` - - - - - -```java -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - @Override - public void onVideoUpdate(boolean isEnabled) { - // Show local user's VideoView if video is enabled - } -}); -``` - - - - -### Changing Media Device - -Media devices represent the hardware for the camera, microphone, and speaker devices. To get the list of media devices currently -available, use the following methods: - -To get the currently selected media device, use the following methods: - - - - -```kotlin -// Get current audio device being used -val currentAudioDevice = meeting.localUser.getSelectedAudioDevice() - -// Get current video device being used -val currentVideoDevice = meeting.localUser.getSelectedVideoDevice() -``` - - - - - -```java -// Get current audio device being used -DyteAudioDevice currentAudioDevice = meeting.localUser.getSelectedAudioDevice(); - -// Get current video device being used -DyteVideoDevice currentVideoDevice = meeting.localUser.getSelectedVideoDevice(); -``` - - - - -Use these methods to create a UI that allows users to configure their media devices. When the user selects a device, use the below methods to set the device. - -**Set device** - - - - -```kotlin -// Set audio device -meeting.localUser.setAudioDevice(device) -// eg. device = audioDevices[0] - -// Set video device -meeting.localUser.setVideoDevice(device) -// eg. device = videoDevices[0] -``` - - - - - -```java -// Set audio device -meeting.localUser.setAudioDevice(device); -// eg. device = audioDevices.get(0) - -// Set video device -meeting.localUser.setVideoDevice(device); -// eg. device = videoDevices.get(0) -``` - - - diff --git a/docs/android-core/pre-call/2-handling-permissions.mdx b/docs/android-core/pre-call/2-handling-permissions.mdx deleted file mode 100644 index 34bf967196..0000000000 --- a/docs/android-core/pre-call/2-handling-permissions.mdx +++ /dev/null @@ -1,50 +0,0 @@ -# Handling Device Permissions - -Before allowing users to interact with their camera and microphone, it's important to check if the necessary permissions are -granted on their Android device. Dyte's Android Core SDK provides easy-to-use APIs to check the status of these permissions. - -### Checking Permissions - -Use the following APIs to check if the camera and microphone permissions are granted: - - - - -```kotlin -// Check if CAMERA permission is granted -val cameraPermissionGranted = meeting.localUser.isCameraPermissionGranted - -// Check if RECORD_AUDIO (microphone) permission is granted -val micPermissionGranted = meeting.localUser.isMicrophonePermissionGranted -``` - - - - - -```java -// Check if CAMERA permission is granted -boolean cameraPermissionGranted = meeting.localUser.isCameraPermissionGranted(); - -// Check if RECORD_AUDIO (microphone) permission is granted -boolean micPermissionGranted = meeting.localUser.isMicrophonePermissionGranted(); -``` - - - - -Alternatively, you can also use Android's standard way to check if these permissions are granted: - -- `android.permission.CAMERA` -- `android.permission.RECORD_AUDIO` - -Refer to the [Android official documentation](https://developer.android.com/training/permissions/requesting#already-granted) -for more information on checking permissions. - -You can use the permission status to enable or disable camera and microphone buttons in the pre-call UI, or provide visual -feedback to indicate the availability of these media devices. - -### Automatic Permission Request - -When the Dyte SDK is initialised, it automatically checks for the required media permissions. If the permissions are not granted, -the SDK requests them on behalf of the developers. diff --git a/docs/android-core/pre-call/3-meeting-meta.mdx b/docs/android-core/pre-call/3-meeting-meta.mdx deleted file mode 100644 index db222ef762..0000000000 --- a/docs/android-core/pre-call/3-meeting-meta.mdx +++ /dev/null @@ -1,25 +0,0 @@ -# Meeting Metadata - -### Change the name of the user - -You can allow the user to edit their name by using the `setDisplayName` method. - - - - -```kotlin -meeting.localUser.setDisplayName("New Name") -``` - - - - - -```java -meeting.localUser.setDisplayName("New Name"); -``` - - - - -**Note**: The name change will only be reflected to other participants if this method is called before joining the room. diff --git a/docs/android-core/pre-call/4-waiting-room.mdx b/docs/android-core/pre-call/4-waiting-room.mdx deleted file mode 100644 index 2abff87a0c..0000000000 --- a/docs/android-core/pre-call/4-waiting-room.mdx +++ /dev/null @@ -1,100 +0,0 @@ -# Waiting Room - -When you call `meeting.joinRoom()`, the user either enters the meeting room directly if allowed, or they are placed in the waiting room -if they are a waitlisted participant. - -The diagram illustrates the possible room states the local user can be in. - -```mermaid -stateDiagram-v2 - init --> joined - init --> waitlisted - waitlisted --> joined - waitlisted --> rejected -``` - -
- -### Meeting Room Joined - -If user joins the room successfully, you receive the `onMeetingRoomJoinCompleted` callback in `DyteMeetingRoomEventsListener`. -You can listen for this callback as follows: - - - - -```kotlin -meeting.addMeetingRoomEventsListener(object : DyteMeetingRoomEventsListener { - override fun onMeetingRoomJoinCompleted(meeting: DyteMobileClient) { - // Local user is in the meeting - } -}) -``` - - - - - -```java -meeting.addMeetingRoomEventsListener(new DyteMeetingRoomEventsListener() { - @Override - public void onMeetingRoomJoinCompleted(DyteMobileClient meeting) { - // Local user is in the meeting - } -}) -``` - - - - -### Waitlisted Participant - -If the user is waitlisted, the `onWaitListStatusUpdate` callback in `DyteSelfEventsListener` notifies you of any changes in the -user's waitlist status. You can check the `waitListStatus` to determine their status: - -- `WAITING`: Local user is in the waiting room. -- `REJECTED`: Local user's join room request is rejected by the host. - - - - -```kotlin -meeting.addSelfEventsListener(object : DyteSelfEventsListener { - override fun onWaitListStatusUpdate(waitListStatus: WaitListStatus) { - when (waitListStatus) { - WAITING -> { - // Local user is in the waiting room - } - REJECTED -> { - // Local user's join room request was rejected by the host - } - else -> { } - } - } -}) -``` - - - - - -```java -meeting.addSelfEventsListener(new DyteSelfEventsListener() { - @Override - public void onWaitListStatusUpdate(waitListStatus: WaitListStatus) { - switch (waitListStatus) { - case WAITING: - // Local user is in the waiting room - break; - case REJECTED: - // Local user's join room request was rejected by the host - break; - } - } -}); -``` - - - - -Host can use [these methods to accept/reject participants](/android-core/participants/waitlisted-participants). diff --git a/docs/android-core/pre-call/_category_.json b/docs/android-core/pre-call/_category_.json deleted file mode 100644 index 23939cdb04..0000000000 --- a/docs/android-core/pre-call/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "position": 3, - "label": "Pre-call", - "collapsible": true, - "className": "pre-call-docs" -} diff --git a/docs/android-core/quickstart.mdx b/docs/android-core/quickstart.mdx deleted file mode 100644 index 207b51730a..0000000000 --- a/docs/android-core/quickstart.mdx +++ /dev/null @@ -1,253 +0,0 @@ ---- -tags: - - android-core - - quickstart - - setup -slug: / -sidebar_position: 2 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import { MavenLatestInstallation } from '@site/src/components/LatestInstallation'; - -# Quickstart - -This quickstart shows how to use Dyte's core SDKs to add live video and audio to -your Android applications. - -To get started quickly, you can use our sample code. You can clone and run a sample application from the Android Core samples, -available in both [Kotlin](https://github.com/dyte-io/android-samples/tree/main/samples/android-core-sample-kotlin) and [Java](https://github.com/dyte-io/android-samples/tree/main/samples/android-core-sample-java). - -## Objective - -You'll learn how to: - -- [Install the Dyte SDK](#step-1-install-the-sdk) -- [Initialize the SDK](#step-2-initialize-the-sdk) -- [Configure a Dyte meeting](#step-3-configure-a-dyte-meeting) -- [Initialize the Dyte meeting](#step-4-initialize-the-dyte-meeting) -- [Go live with your Dyte meeting](#step-5-go-live-with-your-dyte-meeting) - -## Before Getting Started - -Make sure you've read the [Getting Started with Dyte](/getting-started) topic and completed the following steps: - -- Create a [Dyte Developer Account](https://dev.dyte.io/) -- Create a [Dyte Meeting](/api/?v=v2#/operations/create_meeting) -- [Add Participant](/api/?v=v2#/operations/add_participant) to the meeting -- Install [Android Studio](https://developer.android.com/studio) - -## Step 1: Install the SDK - -To install the SDK, add the `core-android` dependency to your app's `build.gradle` file: - - - -:::tip Note -If your app targets lower versions of Android (Android API \<= 24), please enable core desugaring in your app's build.gradle file as follows. - -``` -android { - // other configurations - compileOptions { - // other configurations - isCoreLibraryDesugaringEnabled = true - } -} - -dependencies { - // other dependencies - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") -} -``` - -::: - -## Step 2: Initialize the SDK - -The `DyteMobileClient` is the main class of the SDK. It is the entry point and -the only class required to initialize Dyte SDK. - - - - -```kotlin -val dyteClient = DyteMeetingBuilder.build(activity) -``` - - - - - -```java -DyteMobileClient dyteClient = DyteMeetingBuilder.INSTANCE.build(activity); -``` - - - - -## Step 3: Configure a Dyte meeting - -Configure the following properties in the `DyteMeetingInfoV2` class. You must pass a valid participant `authToken` obtained from -the [Add Participant](/api/?v=v2#/operations/add_participant) API. - -| Name | Description | -| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `authToken` | After you've created the meeting, add each participant to the meeting using the [Add Participant API](/api?v=v2#/operations/add_participant) The API response contains the `authToken`. | -| `enableAudio` | Set whether to join the meeting with your Mic ON (`true`) or OFF (`false`). | -| `enableVideo` | Set whether to join the meeting with your Camera ON (`true`) or OFF (`false`). | -| `baseDomain` | Base domain of the dyte's environment you have created the meeting on. Only required if using a white-labeled domain, defaults to "dyte.io" | - - - - -```kotlin -val meetingInfo = - DyteMeetingInfoV2( - authToken = AUTH_TOKEN, - enableAudio = true, - enableVideo = true, - baseDomain = "dyte.io" - ) -``` - - - - - -```java -DyteMeetingInfoV2 meetingInfo = - new DyteMeetingInfoV2( - MeetingConfig.AUTH_TOKEN, // authToken - true, // enableAudio - true, // enableVideo - "dyte.io" // baseUrl - ); -``` - - - - -## Step 4: Initialize the Dyte meeting - -To initialize the meeting, call the `init()` method on the `dyteClient` object with the `meetingInfo` argument. This establishes -a connection with the Dyte meeting server. - - - - -```kotlin -dyteClient.init( - meetingInfo, - onInitCompleted = { - }, - onInitFailed = { - } -) -``` - - - - - -```java -dyteClient.init( - meetingInfo, - () -> { - // init complete - return null; - }, - () -> { - // init failed - return null; - } -); -``` - - - - -## Step 5: Go live with your Dyte meeting! - -Now, you have established the connection with the Dyte meeting server successfully. Next step is to join the room. - -### Join the room - -To join the meeting room, call `joinRoom()` method on the `dyteClient` instance as shown below. - - - - -```kotlin -dyteClient.joinRoom( - onSuccess = { - }, - onFailed = { - } -) -``` - - - - - -```java -dyteClient.joinRoom( - () -> { - // join complete - return null; - }, - () -> { - // join failed - return null; - } -); -``` - - - - -### Leave the room - -Once the meeting is over, you can leave the meeting room. - -To leave the meeting room, call `leaveRoom()` method on the `dyteClient` as shown below. - - - - -```kotlin -dyteClient.leaveRoom( - onSuccess = { - }, - onFailed = { - } -) -``` - - - - -```java -dyteClient.leaveRoom( - () -> { - // leave complete - return null; - }, () -> { - // leave failed - return null; - } -); -``` - - - - - - Android Core Quickstart - - diff --git a/docs/android-core/recording.mdx b/docs/android-core/recording.mdx deleted file mode 100644 index f85a4aad77..0000000000 --- a/docs/android-core/recording.mdx +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Recording -description: Control recordings in a meeting. -sidebar_position: 9 -tags: - - android-core - - recording ---- - -# Recording - -The `meeting.recording` object in Dyte's Android Core SDK provides APIs to manage recording within a meeting. - -### Recording State - -The `meeting.recording.recordingState` property indicates the current state of the recording. Possible states include `IDLE`, -`STARTING`, `RECORDING`, `PAUSED`, and `STOPPING`. - -### Starting a Recording - -To start a recording, use the `start()` method of the `meeting.recording` object. - -```kotlin -meeting.recording.start() -``` - -### Stopping a Recording - -To stop an active recording, use the `stop()` method. - -```kotlin -meeting.recording.stop() -``` - -### Pausing a Recording - -To temporarily pause a recording, use the `pause()` method. - -```kotlin -meeting.recording.pause() -``` - -### Resuming a Recording - -To resume a paused recording, use the `resume()` method. - -```kotlin -meeting.recording.resume() -``` - -### Listening for Recording Events - -To handle recording-related events, implement the `DyteRecordingEventsListener` interface. This interface provides callbacks for -various recording events: - -- `onMeetingRecordingStarted()`: Called when the recording is started or resumed, either by the user or their peer. -- `onMeetingRecordingEnded()`: Called when the recording is stopped or paused, either by the user or their peer. -- `onMeetingRecordingStateUpdated(state: DyteRecordingState)`: Notifies when there is a change in the recording state. -- `onMeetingRecordingStopError(e: Exception)`: Indicates an error occurred while stopping an active recording. -- `onMeetingRecordingPauseError(e: Exception)`: Indicates an error occurred while pausing an active recording. -- `onMeetingRecordingResumeError(e: Exception)`: Indicates an error occurred while resuming a paused recording. - -```kotlin -meeting.addRecordingEventsListener(object : DyteRecordingEventsListener { - override fun onMeetingRecordingStarted() { - // Handle recording started - } - - override fun onMeetingRecordingEnded() { - // Handle recording stopped - } - - override fun onMeetingRecordingStateUpdated(state: DyteRecordingState) { - // Handle recording state update - } - - override fun onMeetingRecordingStopError(e: Exception) { - // Handle recording stop error - } - - override fun onMeetingRecordingPauseError(e: Exception) { - // Handle recording pause error - } - - override fun onMeetingRecordingResumeError(e: Exception) { - // Handle recording resume error - } -}) -``` - -Implement these callbacks to handle recording events and errors appropriately in your application. - - - Android Core Recording - diff --git a/docs/android-core/release-notes.mdx b/docs/android-core/release-notes.mdx deleted file mode 100644 index 5198953d0a..0000000000 --- a/docs/android-core/release-notes.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Release Notes -sidebar_position: 101 -sidebar_class_name: releaseSidebarHeading -tags: - - android-core - - releasenotes ---- - -import ReleaseNotesGenerator from '@site/src/components/ReleaseNotesGenerator'; - - - - - Android Core Release Notes - diff --git a/docs/android-core/room-metadata.mdx b/docs/android-core/room-metadata.mdx deleted file mode 100644 index daa30c3e5a..0000000000 --- a/docs/android-core/room-metadata.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Room Metadata -description: All metadata pertaining to a meeting. -sidebar_position: 11 -tags: - - android-core - - room-metadata ---- - -# Room Metadata - -All metadata pertaining to a meeting is stored in `meeting.meta`. This includes: - -- `meetingId`: The unique identifier of the meeting. -- `meetingType`: Indicates the meeting is a group-call or a webinar. -- `meetingTitle`: The title of the meeting. -- `meetingStartedTimestamp`: The timestamp when the meeting started. -- `meetingState`: The state of the meeting of type `DyteMeetingState`. -- `authToken`: User's authentication token for the meeting. -- `meetingConfig`: The configuration of the meeting of type `MeetingConfig`. - -```kotlin -enum class DyteMeetingState { - NotInitialised, - InitStarted, - InitCompleted, - InitFailed -} - -data class MeetingConfig( - val enableAudio: Boolean, - val enableVideo: Boolean -) -``` - -For example, if you want to get the title of the meeting the current participant is -connected to, you can do so by doing: - -```kotlin -val meetingTitle = meeting.meta.meetingTitle -``` - - - Android Core Room Metadata - diff --git a/docs/android-core/stage-management/1-introduction.mdx b/docs/android-core/stage-management/1-introduction.mdx deleted file mode 100644 index baf354c3c4..0000000000 --- a/docs/android-core/stage-management/1-introduction.mdx +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Introduction -description: Stage management in Dyte meetings. -sidebar_position: 1 -tags: - - android-core - - stage ---- - -_Below documentation is relevant for Interactive Livestream(LHLS) and Webinar(WebRTC) use cases._ - -Instead of a traditional publish-subscribe model, where a user can publish their media and others can choose to subscribe, Dyte -comes with an optional managed configuration. In this managed configuration, a less privileged user can be configured with a -default behavior to not publish media. The user can then request permission to publish their media, which a privileged user can -choose to grant or deny. - -### Accessing the Stage APIs - -Dyte's stage management APIs allow users to perform actions such as joining and leaving the stage, managing stage requests and -permissions, and kicking participants from the stage. These APIs are accessible through the `meeting.stage` object. - -### Stage Status - -In meetings where stage management is enabled, a user's stage status can change within the values represented by the `StageStatus` -enum. These status values include: - -- `ON_STAGE`: Indicates that the user is currently on the stage and is allowed to publish media. -- `OFF_STAGE`: Indicates that the user is a viewer and is not on the stage. They can see and listen to those on stage. -- `REQUESTED_TO_JOIN_STAGE`: Indicates that the user has a pending request to join the stage. This status is assigned to the user - until the host accepts or rejects their request. -- `ACCEPTED_TO_JOIN_STAGE`: Indicates that the host has accepted the user's request to join the stage. - -The `meeting.stage.stageStatus` property provides the current stage status of the local user. - -### Viewers - -You can retrieve a list of off-stage participants (viewers) in a stage-enabled meeting by accessing the `meeting.stage.viewers` -property. This property provides a list of `DyteRemoteParticipant` objects whose stage status is not `ON_STAGE`. - -### Joining the Stage - -To interact with peers and publish media, users can join the stage. This action is only possible if the user's preset allows them -to publish media or if their request to join the stage has been accepted by a host (i.e., their stage status is `ACCEPTED_TO_JOIN_STAGE`). - -```kotlin -meeting.stage.join() -``` - -### Leaving the Stage - -When users want to stop interacting with peers, they can leave the stage. This action stops their media from being published, -and their audio and video are no longer received by others in the room. - -```kotlin -meeting.stage.leave() -``` - -### List of Stage Events - -The `DyteStageEventListener` interface provides callback methods for various stage events. Implement these callbacks to handle -stage-related events in your application: - -```kotlin -meeting.addStageEventListener(object : DyteStageEventListener { - override fun onStageAccessRequestAccepted() { - // Called when the local user is accepted to join the stage. - } - - override fun onStageAccessRequestRejected() { - // Called when the local user's request to join the stage is rejected by the host. - } - - override fun onRemovedFromStage() { - // Called when the local user is removed from the stage. - } - - override fun onNewStageAccessRequest(participant: DyteRemoteParticipant) { - // Called when a new stage access request is received from a participant. - // Triggered only if the local user is a host. - } - - override fun onStageAccessRequestsUpdated(accessRequests: List) { - // Called when the list of stage access requests is updated. - // Triggered only if the local user is a host. - } - - override fun onStageStatusUpdated(oldStatus: StageStatus, newStatus: StageStatus) {} - // Called when the local user's stage status is updated. - } - - override fun onPeerStageStatusUpdated( - participant: DyteRemoteParticipant, - oldStatus: StageStatus, - newStatus: StageStatus, - ) { - // Called when a remote participant's stage status is updated. - } -}) -``` - -### Stage Errors - -All the stage management APIs return a `StageError` if the operation fails. On success, they return `null`. The error type can be one of the following: - -- `StageDisabledForMeetingType`: The meeting type does not support stage management. -- `PermissionDenied`: The user does not have the required permissions to perform the operation. -- `ActionInvalidForStageStatus`: The operation is invalid for the current stage status. -- `NoRequestToCancel`: There is no pending request to cancel. - -Next, we'll explore the Stage Management APIs for hosts, allowing them to manage stage requests, participants in Dyte meetings. - - - Android Core Stage Introduction - diff --git a/docs/android-core/stage-management/2-host-controls.mdx b/docs/android-core/stage-management/2-host-controls.mdx deleted file mode 100644 index 14a074d30f..0000000000 --- a/docs/android-core/stage-management/2-host-controls.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Stage Host Controls -description: Stage management APIs for Host in Dyte meetings. -sidebar_position: 2 -tags: - - android-core - - stage ---- - -In a stage management-enabled meeting, a user with the `permissions.host.canAcceptStageRequests` permission as `true` is -considered a host. The `meeting.stage` object in Dyte's Android Core SDK provides stage management APIs that allow hosts to -manage stage access requests, invite participants to the stage, and remove participants from the stage. - -### List of Stage Access Requests - -You can retrieve the list of pending stage access requests by accessing the `meeting.stage.accessRequests` property. This property -provides a list of `DyteRemoteParticipant` objects who have requested stage access. - -**Note**: If the local user is not a host, this property returns an empty list. - -### Grant Access - -To accept stage access requests or allow a participant directly to the stage, you can use the `grantAccess()` method. - -```kotlin -// Grants stage access to a participant -// id: peer id of the stage access requesting participant -meeting.stage.grantAccess(listOf(id)) - -// Grants stage access to all pending stage access requests -meeting.stage.grantAccess(meeting.stage.accessRequests.map { it.userId }) -``` - -### Deny Access - -To reject stage access requests, you can use the `denyAccess()` method. - -```kotlin -// Denies stage access request of a participant -// id: peer id of the stage access requesting participant -meeting.stage.denyAccess(listOf(id)) - -// Denies all pending stage access requests -meeting.stage.denyAccess(meeting.stage.accessRequests.map { it.userId }) -``` - -### Kick Users - -You can remove a participant from the stage by using the `kick()` method. - -```kotlin -// Kicks a participant from stage -// id: peer id of the ON_STAGE participant to kick -meeting.stage.kick(listOf(id)) -``` - -### Listening to Stage Access Requests - -You can listen to incoming stage access requests or changes in the access requests list if you are a host. The SDK provides the -following callbacks to `DyteStageEventListener`: - -```kotlin -meeting.addStageEventListener(object : DyteStageEventListener { - override fun onNewStageAccessRequest(participant: DyteRemoteParticipant) { - // Called when a new stage access request is received from a participant. - } - - override fun onStageAccessRequestsUpdated(accessRequests: List) { - // Called when the list of stage access requests is updated. - } -}) -``` - -These APIs enable you to manage stage access requests and participants effectively in Dyte meetings. Next, we'll explore the -Stage APIs available to Viewer participants. diff --git a/docs/android-core/stage-management/3-viewer-participants.mdx b/docs/android-core/stage-management/3-viewer-participants.mdx deleted file mode 100644 index 47d567c096..0000000000 --- a/docs/android-core/stage-management/3-viewer-participants.mdx +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Stage Access for Viewers -description: Stage APIs for Viewers in Dyte meetings. -sidebar_position: 3 -tags: - - android-core - - stage ---- - -Viewer participants in a stage-enabled meeting are users whose preset permission for media production is set as `CAN_REQUEST`. -The `meeting.stage` object provides APIs for viewer participants to request stage access and withdraw their join stage request. - -### Request Access - -To request access to the stage, you can call the `requestAccess()` method: - -```kotlin -meeting.stage.requestAccess() -``` - -When a host accepts the user's stage access request or allows the user directly to the stage, the SDK triggers the -`onStageAccessRequestAccepted` callback and if the host rejects the request, the SDK triggers the `onStageAccessRequestRejected` callback. You can listen to these events by adding a `DyteStageEventListener`: - -```kotlin -meeting.addStageEventListener(object : DyteStageEventListener { - override fun onStageAccessRequestAccepted() { - // Host accepted the join stage request or invited user directly to stage - } - - override fun onStageAccessRequestRejected() { - // Host rejected the join stage request - } -}) -``` - -You can then call the `join()` method to finally join the stage. - -**Note**: If the host has directly allowed the user to join the stage and they want to decline, you should use the `leave()` method. - -### Cancel Access Request - -To cancel or withdraw a pending stage access request, you can call the `cancelRequestAccess()` method: - -```kotlin -meeting.stage.cancelRequestAccess() -``` diff --git a/docs/android-core/stage-management/_category_.json b/docs/android-core/stage-management/_category_.json deleted file mode 100644 index 197e839ce2..0000000000 --- a/docs/android-core/stage-management/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 9, - "label": "Stage Management", - "collapsible": true -} diff --git a/docs/android-core/upgrade-v2/1-introduction.mdx b/docs/android-core/upgrade-v2/1-introduction.mdx deleted file mode 100644 index 5ee14ea8e1..0000000000 --- a/docs/android-core/upgrade-v2/1-introduction.mdx +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Introduction -sidebar_position: 1 -tags: - - android-core - - v2 ---- - -With the v2 release of the Dyte Core SDK, we're introducing a major upgrade focused on making the development experience simpler, more consistent, and intuitive. This upgrade introduces breaking changes across four key areas: - -### 1. Migration to V2 REST API Terminology - -- `meeting.meta.roomName` -> `meeting.meta.meetingId` -- `DyteMeetingParticipant.clientSpecificId` -> `DyteMeetingParticipant.customParticipantId` -- Removed `DyteMeetingInfo` (V1) - -### 2. Removal of Deprecated APIs - -We have removed deprecated methods and properties in favour of improved, uniform, and clearer versions. - -- Removed `DyteParticipants.screenshares` (use `DyteParticipants.screenShares`). The deprecated type `DyteScreenShareMeetingParticipant` has also been removed -- **Chat Methods**: Removed deprecated file and image send methods. The new lambda-based methods take more reliable `Uri`s & return proper errors - - File message methods: - - Removed: - - `sendFileMessage(filePath: String)` - - `sendFileMessage(filePath: String, fileName: String)` - - `sendFileMessage(fileUri: Uri)` - - Use instead: - - `sendFileMessage(fileUri: Uri, onResult: (ChatFileError?) -> Unit)` - - Removed: - - `sendFileMessage(filePath: String, peerIds: List)` - - `sendFileMessage(fileUri: Uri, peerIds: List)` - - Use instead: - - `sendFileMessage(fileUri: Uri, peerIds: List, onResult: (ChatFileError?) -> Unit)` - - Image message methods: - - Removed: - - `sendImageMessage(filePath: String, fileName: String)` - - `sendImageMessage(imageUri: Uri)` - - `sendImageMessage(imagePath: String)` - - Use instead: - - `sendImageMessage(imageUri: Uri, onResult: (ChatFileError?) -> Unit)` - - Removed: - - `sendImageMessage(imagePath: String, peerIds: List)` - - `sendImageMessage(imageUri: Uri, peerIds: List)` - - `sendImageMessage(filePath: String, fileName: String, peerIds: List)` - - Use instead: - - `sendImageMessage(imageUri: Uri, peerIds: List, onResult: (ChatFileError?) -> Unit)` -- Removed deprecated listener callbacks: - - `DyteSelfEventsListener.onStageStatusUpdated`. Use `DyteStageEventListener.onStageStatusUpdated()` - - `DyteStageEventListener.onPresentRequestAccepted(participant: DyteJoinedMeetingParticipant)` - - `DyteMeetingRoomEventsListener.onActiveTabUpdate(id: String, tabType: ActiveTabType)`. - Use `DyteMeetingRoomEventsListener.onActiveTabUpdate(meeting: DyteMobileClient, activeTab: ActiveTab)` - -### 3. Revamped Error Handling - -- Errors are categorised by modules, such as `ChatError`, `SelfError`, and `MeetingError` -- All public APIs provide proper errors and additional error data where applicable for better debugging -- Utilises Kotlin sealed classes for better type safety - -### 4. API Structural Changes - -We made a few direct breaking changes in our APIs to simplify the types, make methods more intuitive and ensure uniformity across platforms.  -For example, `DyteMeetingParticipant` has been restructured to align with real-world entities. - -Learn more about the direct breaking changes and migration instructions on the next page. diff --git a/docs/android-core/upgrade-v2/2-breaking-changes-migration.mdx b/docs/android-core/upgrade-v2/2-breaking-changes-migration.mdx deleted file mode 100644 index a12bac8a17..0000000000 --- a/docs/android-core/upgrade-v2/2-breaking-changes-migration.mdx +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: Breaking Changes and Migration Guide -sidebar_position: 2 -tags: - - android-core - - v2 ---- - -This section provides details about the additional breaking changes made in Dyte Core SDK v2 and provides migration guidance. -The changes span multiple modules, mainly simplifying the APIs or renaming them to ensure uniformity across the platforms. - -### Changes in Participant Hierarchy and Simplified Types - -The participant hierarchy has been simplified to align better with real-world entities: - -- **Old Structure**: - - - `DyteMeetingParticipant` was the parent class with direct subtypes: - - `DyteJoinedMeetingParticipant` - - `DyteWaitlistedParticipant` - - `DyteJoinedMeetingParticipant` had two subtypes: - - `DyteScreenShareMeetingParticipant` - - `DyteSelfParticipant` (local user) - -- **New Structure**: - - - `DyteMeetingParticipant` still represents a participant in a meeting which is simply either: - - `DyteSelfParticipant` (local user) or - - `DyteRemoteParticipant` (other participants in the meeting) - -- Moved methods for managing waiting room requests to `DyteParticipants`: - - `DyteWaitlistedParticipant.acceptWaitListedRequest()` -> `DyteParticipants.acceptWaitingRoomRequest(id)` - - `DyteWaitlistedParticipant.rejectWaitListedRequest()` -> `DyteParticipants.rejectWaitingRoomRequest(id)` - -The old participant hierarchy was complex, with certain types representing temporary states or behaviour at runtime. -The new structure simplifies this by clearly differentiating between the local user and remote participants. - -**Migration Instructions**: - -- Replace instances of `DyteJoinedMeetingParticipant` with `DyteRemoteParticipant`. -- Replace any usage of `DyteScreenShareMeetingParticipant` with `DyteMeetingParticipant` or its subtype. -- `DyteSelfParticipant` is now a direct subtype of `DyteMeetingParticipant`. -- Update the Waiting Room management logic to use APIs from `DyteParticipants` for accepting/rejecting waiting room requests. - -### Changes in DyteMeetingRoomEventsListener Connection State Callbacks - -The following connection state callbacks have been removed: - -- `onMeetingRoomDisconnected`, `onConnectingToMeetingRoom`, `onConnectedToMeetingRoom`, - `onDisconnectedFromMeetingRoom`, `onMeetingRoomConnectionFailed`, `onReconnectingToMeetingRoom`, - `onReconnectedToMeetingRoom`, `onMeetingRoomReconnectionFailed` - -These callbacks have been consolidated into a single unified callback: -`onSocketConnectionUpdate(newState: SocketConnectionState)` - -**Migration Instructions**: - -- Move all connection state handling, mainly reconnection logic from the old callbacks to `onSocketConnectionUpdate()`. - The new callback provides a `SocketConnectionState` parameter that represents the current state of the meeting connection. - -`DyteMeetingInfoV2.baseUrl` has been renamed to `DyteMeetingInfoV2.baseDomain`. This change is applicable only -if you are using a white-labeled domain. - -### Other Breaking Changes module-wise - -#### 1. DyteMobileClient (meeting) - -- The following methods now return `MeetingError` in the `onFailure` callback instead of `DyteError`: - - `init()`, `leaveRoom()`, `release()` -- Renamed some methods for adding/removing listeners to align with the respective listener names: - - `addParticipantEventsListener()` -> `addParticipantsEventListener()` - - `addPollsEventsListener()` -> `addPollsEventListener()` - - `addStageEventsListener()` -> `addStageEventListener()` - - `addLivestreamEventListener()` -> `addLivestreamEventListener()` -- Changes in `DyteMeetingRoomEventsListener` callbacks: - - Failure callbacks now return standardised `MeetingError` instead of `Exception`: - - `onMeetingInitFailed(exception: Exception)` -> `onMeetingInitFailed(error: MeetingError)` - - `onMeetingRoomJoinFailed(exception: Exception)` -> `onMeetingRoomJoinFailed(error: MeetingError)` - - Relevant callback methods now include `DyteMobileClient` as a parameter, making it easier to access meeting object - - `onMeetingInitCompleted()` -> `onMeetingInitCompleted(meeting: DyteMobileClient)` - - `onMeetingRoomJoinCompleted()` -> `onMeetingRoomJoinCompleted(meeting: DyteMobileClient)` - - `onActiveTabUpdate(activeTab: ActiveTab)` -> `onActiveTabUpdate(meeting: DyteMobileClient, activeTab: ActiveTab)` - -#### 2. DyteSelfParticipant (meeting.localUser) - -- Renamed the following screen share methods to make the name casing of "ScreenShare" uniform with the rest of the SDK: - - `enableScreenshare()` -> `enableScreenShare()` - - `disableScreenshare()` -> `disableScreenShare()` -- Merged `onScreenShareStarted` & `onScreenShareStopped` into a single callback: `onScreenShareUpdate(isEnabled: Boolean)` -- Moved `onRoomMessage()` callback from `DyteSelfEventsListener` to `DyteParticipantsEventListener` and renamed it to `onNewBroadcastMessage()` -- Removed the unused `onProximityChanged(isNear: Boolean)` - -**Migration Instructions**: - -- Update enable/disable screen share method names -- Replace the old screen share callbacks with the new `onScreenShareUpdate()` callback -- Move the broadcast message handling logic to `DyteParticipantsEventListener.onNewBroadcastMessage()` callback - -#### 3. DyteParticipants (meeting.participants) - -- `meeting.participants` now contains data only related to remote participants, excluding the local user -- Changes in `DyteParticipantsEventListener` callbacks: - - Callbacks are now given only for remote participant events. Local user changes are dispatched to `DyteSelfEventsListener` - - Listener renamed from `DyteParticipantEventsListener` to `DyteParticipantsEventListener` - - Merged `onScreenShareStarted` & `onScreenShareEnded` into a single callback: - `onScreenShareUpdate(participant: DyteRemoteParticipant, isEnabled: Boolean)` - - Removed `onNoActiveSpeaker()`. Now `onActiveSpeakerChanged(participant: DyteRemoteParticipant?)` gets a null value when active participant is cleared - - Removed unused, uncalled `onScreenSharesUpdated()`, `onSetAsActiveSpeaker()`, & `onRemovedAsActiveSpeaker()` - - Following callbacks have been tweaked for consistency & clarity: - - `onAudioUpdate(audioEnabled: Boolean, participant: DyteMeetingParticipant)` -> `onAudioUpdate(participant: DyteRemoteParticipant, isEnabled: Boolean)` - - `onVideoUpdate(videoEnabled: Boolean, participant: DyteMeetingParticipant)` -> `onVideoUpdate(participant: DyteRemoteParticipant, isEnabled: Boolean)` - - `onPinned()` -> `onParticipantPinned(participant: DyteRemoteParticipant)` - - `onUnpinned()` -> `onParticipantUnpinned(participant: DyteRemoteParticipant)` - -**Migration Instructions**: - -- Ensure that local user-related changes are handled using `DyteSelfEventsListener` instead of `DyteParticipantsEventListener` -- Update the callback signatures wherever `DyteParticipantsEventListener` is implemented - -#### 4. DyteStage APIs (meeting.stage) - -- Stage Host Methods: - - Removed methods `grantAccessAll()` and `denyAccessAll()` - - `grantAccess()`, `denyAccess()`, and `kick()` now take a list of user IDs, making them more flexible -- Removed unused `REJECTED_TO_JOIN_STAGE` constant from `StageStatus` enum -- Removed the `DyteStageStatus` typealias -- DyteStageEventListener: Callbacks now consistently use the term '_stage_' to align with the **DyteStage** module for better clarity - - Redundant peer callbacks have been removed to simplify the API. Those events can be inferred as per use-case by - `onPeerStageStatusUpdated(participant: DyteRemoteParticipant, oldStatus: StageStatus, newStatus: StageStatus)` - - `onPresentRequestReceived()` -> `onStageAccessRequestAccepted()` - - `onStageStatusUpdated(stageStatus: DyteStageStatus)` -> `onStageStatusUpdated(oldStatus: StageStatus, newStatus: StageStatus)` - - `onPresentRequestAdded(participant: DyteJoinedMeetingParticipant)` -> `onNewStageAccessRequest(participant: DyteRemoteParticipant)` - - `onStageRequestsUpdated(accessRequests: List)` -> `onStageAccessRequestsUpdated(accessRequests: List)` - - Removed `onAddedToStage()`, it was called when localUser successfully joined the stage, the name didn’t match the scenario - -**Migration Instructions**: - -- Update the method calls for granting, denying, and kicking stage participants to use lists of user IDs -- Replace removed/renamed callbacks in `DyteStageEventListener` with the new ones - -#### 5. DytePolls APIs (meeting.polls) - -- Renamed Classes and Properties - - `DytePollMessage` -> `DytePoll` - - `DytePollEventsListener` -> `DytePollsEventListener` - - `DytePolls.messages` -> `DytePolls.items` -- `DytePollsEventListener` changes: - - `onPollUpdates(pollMessages: List)` -> `onPollUpdates(pollItems: List)` - -#### 6. DyteRecording APIs (meeting.recording) - -- Removed following error callbacks from `DyteRecordingEventsListener` as `DyteRecording` methods now return proper errors: - - `onMeetingRecordingStopError()`, `onMeetingRecordingPauseError()`, `onMeetingRecordingResumeError()` -- `onMeetingRecordingStarted()`, `onMeetingRecordingEnded()`, and `onMeetingRecordingStateUpdated()` have been merged into a single callback: - `onRecordingStateChanged(oldState: DyteRecordingState, newState: DyteRecordingState)`. - -**Migration Instructions** - -- Remove any references to the deleted error callbacks in your code. Move error handling code to the `onResult` lambda of the recording methods. -- Replace the separate recording state callbacks with the new unified `onRecordingStateChanged` callback. - -#### 7. DyteLivestream APIs (meeting.livestream) - -- Changed the term "LiveStream" to "Livestream" throughout the SDK - - `meeting.liveStream` -> `meeting.livestream` - - `DyteLiveStream` -> `DyteLivestream` -- Simplified `LivestreamState` enum to align with the Web SDK - - **Old States**: `NONE`, `STARTING`, `STARTED`, `STOPPING`, `STOPPED`, `ERRORED` - - **New States**: `IDLE`, `STARTING`, `STREAMING`, `STOPPING` -- `DyteLivestream.liveStreamUrl` -> `DyteLivestream.playbackUrl` -- Changes in `DyteLivestreamEventsListener`: - - The `DyteLiveStreamEventsListener` has been renamed to `DyteLivestreamEventListener` - - `onLiveStreamStarting`, `onLiveStreamStarted`, `onLiveStreamEnding`, and `onLiveStreamEnded` have been consolidated into - `onLivestreamStateChanged(oldState: LivestreamState, newState: LivestreamState)` - - `onLiveStreamErrored()` -> `onLivestreamError(message: String)` - - `onLiveStreamStateUpdate(data: DyteLivestreamData)` ->  `onLivestreamUpdate(data: DyteLivestreamData)` - - Removed `onStageCountUpdated(count: Int)` - -**Migration Instructions** - -- Update all class and property references to replace "LiveStream" with "Livestream" -- Use the new `LivestreamState` enum values, replacing old state with the new, simplified states -- Update callbacks in `DyteLivestreamEventListener` to the new versions, ensuring state changes are handled using `onLivestreamStateChanged` and other revised methods diff --git a/docs/android-core/upgrade-v2/_category_.json b/docs/android-core/upgrade-v2/_category_.json deleted file mode 100644 index 85fd7d870a..0000000000 --- a/docs/android-core/upgrade-v2/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 2, - "label": "2.x Upgrade Guide", - "collapsible": true -} diff --git a/docs/android/advanced-usage.mdx b/docs/android/advanced-usage.mdx deleted file mode 100644 index 047f51a934..0000000000 --- a/docs/android/advanced-usage.mdx +++ /dev/null @@ -1,211 +0,0 @@ ---- -sidebar_position: 5 -description: >- - Explore advanced usage scenarios and features in Dyte for Android with our - detailed documentation. ---- - -# Advanced usage - -## Audio/Video config options while joining meeting. - -```kotlin {3,4,8,11} -val meetingInfo = DyteMeetingInfoV2( - authToken = state.authToken, - enableAudio = true, - enableVideo = true -) -val config = DyteUIKitConfig( - activity = this, - dyteMeetingInfo = meetingInfo, -) -val dyteUIKit = DyteUIKitBuilder.build(config) -``` - -## Control the meeting, and take meeting & participant actions - -The `Meeting` instance (referenced as `meeting` below) helps you interact with -the meeting. You can get access to meeting object as follows. - -```kotlin -val meeting = dyteUIKit.meeting -``` - -:::tip Note -Once you have access to `meeting` object you can listen to all events triggered in core-sdk. -Please read [core docs](/android-core/) -::: - -You can get the UI configuration of the meeting in progress using the -`designTokens` property of `Meeting`. - -```kotlin -val designTokens = dyteUIKit.designTokens -``` - -You can take actions on the meeting as well as the participants. You can also -setup custom controls to that interact with the meeting in certain ways that -help you send events and messages across to other participants in the meeting. - -## Get info about the meeting's UI configuration - -```kotlin -val colors = designTokens.colors -val textColors = designTokens.colors.text -val brandColors = designTokens.colors.brand -val backgroundColors = designTokens.colors.background -val videoBackgroundColor = designTokens.colors.videoBackground -val statusColors = designTokens.colors.status -``` - -## Get info about the plugins configured for the meeting - -You can get info about the plugins configured for the meeting in progress using -the `plugins` property of `Meeting`. - -```kotlin -val activePlugins = meeting.plugins.active -val allPlugins = meeting.plugins.all -``` - -## Self controls inside meeting - -### Mic control - -To turn off the mic - -```kotlin -meeting.localUser.disableAudio() -``` - -To turn on the mic - -```kotlin -meeting.localUser.enableAudio() -``` - -## Camera control - -To turn off the camera - -```kotlin -meeting.localUser.disableVideo() -``` - -To turn on the camera - -```kotlin -meeting.localUser.enableVideo() -``` - -### Leave meeting - -To leave the meeting - -```kotlin -meeting.leaveRoom() -``` - -## Get list of all participants in the meeting - -You can get a list of all participants in the meeting using the `participants` -property of `meeting`. - -```kotlin -val participants = meeting.participants -val active = participants.active -val joined = participants.joined -``` - -For active speaker and pinned participant in the meeting use as follows - -```kotlin -val screenshares = participants.screenshares -val activeSpeaker = participants.activeSpeaker -val pinned = participants.pinned -``` - -## Controlling individual participants and actions - -Dyte client SDK provide methods and properties to help you control participant -actions and certain UI elements. This could include actions that affect the -participant themselves as well as other participants (like a host with -privileged permissions may want to control the video of other participants). -This section defines all the possible properties and actions that can be taken. - -To get hold of participant you want to manage, do as follows - -```kotlin -val participant = meeting.participants.joined.find { it.id = "my_participant_id" } -``` - -#### Disable participant's audio stream - -To remotely turn the participant's mic off, you can do - -```kotlin -participant.disableAudio() -``` - -#### Check if participant's video is on - -To check whether a participant's video is on (camera is turned on), you can use - -```kotlin -val video = participant.videoEnabled; -``` - -which sets the value of `video` to a boolean specifying if the camera is on or -not. - -#### Get participant video stream - -If the participant's video is on, you can get the associated video stream using - -```kotlin -val videoStream = participant.getVideoView() -``` - -#### Disable participant's audio stream - -To remotely turn the participant's camera off, you can do - -```kotlin -participant.disableVideo() -``` - -#### Check if the participant is pinned to the grid - -To check whether a participant's video is pinned to the meeting grid; by the -host, by the user, by the preset, or by any other mechanism; you can use - -```kotlin -val pinned = participant.isPinned; -``` - -which sets the value of `pinned` to a boolean specifying whether the video is -pinned or not. - -#### Pin a participant video to the grid - -You can pin a participant's video to the grid using - -```kotlin -participant.pin(); -``` - -#### Unpin a participant video from the grid - -You can unpin a participant's video from the grid using - -```kotlin -participant.unpin(); -``` - - - Android Advanced usage - - diff --git a/docs/android/build-pre-call-ui/_category_.json b/docs/android/build-pre-call-ui/_category_.json deleted file mode 100644 index ff59d70cc0..0000000000 --- a/docs/android/build-pre-call-ui/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 5, - "label": "Pre-call preview UI", - "collapsible": true -} diff --git a/docs/android/build-pre-call-ui/build-your-own/_category_.json b/docs/android/build-pre-call-ui/build-your-own/_category_.json deleted file mode 100644 index ec59ec7c2d..0000000000 --- a/docs/android/build-pre-call-ui/build-your-own/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 5, - "label": "Build your own", - "collapsible": true -} diff --git a/docs/android/build-pre-call-ui/build-your-own/add-audio-video-device.mdx b/docs/android/build-pre-call-ui/build-your-own/add-audio-video-device.mdx deleted file mode 100644 index 6982a22f0c..0000000000 --- a/docs/android/build-pre-call-ui/build-your-own/add-audio-video-device.mdx +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: Audio/video - Device Selection -sidebar_position: 4 ---- - -To let the user choose between multiple available input / output devices, you can use the `DyteSettingsFragment` or `DyteSettingsBottomsheet` component - -```kotlin -val dyteSettingsFragment = DyteSettingsFragment() -dyteSettingsFragment.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - -## for video device Selection - -You can access list of video devices like `meeting.localUser.getVideoDevices()` and selected video device can be accessed with `meeting.localUser.getSelectedVideoDevice()` - -To render the video device selection you can use following code - -```xml - -``` - -and on the kotlin side - -```kotlin -val videoDevices = meeting.localUser.getVideoDevices() -val videoAdapter = ArrayAdapter( - requireContext(), - R.layout.dyte_spinner_item, - videoDevices.map { it.type.displayName }, - ) -videoAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) -val selectedVideoDevice = meeting.localUser.getSelectedVideoDevice() -val selectedPosition = videoDevices.indexOfFirst { it.type == selectedVideoDevice?.type } -videoDeviceSpinner.adapter = videoAdapter -videoDeviceSpinner.onItemSelectedListener = - object : OnItemSelectedListener { - override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { - val device = videoDevices[position] - meeting.localUser.setVideoDevice(device) - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - // no-op - } - } -videoDeviceSpinner.setSelection(selectedPosition, false) -``` - -## for audio device Selection - -You can access list of audio devices like `meeting.localUser.getAudioDevices()` and selected audio device can be accessed with `meeting.localUser.getSelectedAudioDevice()` - -To render the audio device selection you can use following code - -```xml - -``` - -and on the kotlin side - -```kotlin -val audioDevices = meeting.localUser.getAudioDevices() -val audioAdapter = ArrayAdapter( - requireContext(), - R.layout.dyte_spinner_item, - audioDevices.map { it.type.displayName }, - ) -audioAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) -val selectedAudioDevice = meeting.localUser.getSelectedAudioDevice() -val selectedPosition = audioDevices.indexOfFirst { it.type == selectedAudioDevice?.type } -audioDeviceSpinner.adapter = audioAdapter -audioDeviceSpinner.onItemSelectedListener = - object : OnItemSelectedListener { - override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { - val device = audioDevices[position] - meeting.localUser.setAudioDevice(device) - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - // no-op - } - } -audioDeviceSpinner.setSelection(selectedPosition, false) -``` diff --git a/docs/android/build-pre-call-ui/build-your-own/add-audio-video-preview.mdx b/docs/android/build-pre-call-ui/build-your-own/add-audio-video-preview.mdx deleted file mode 100644 index fe747c3bfd..0000000000 --- a/docs/android/build-pre-call-ui/build-your-own/add-audio-video-preview.mdx +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Audio/video - Preview -sidebar_position: 3 ---- - -import CodeRunner from '@site/src/components/CodeRunner/CodeRunner'; - -For building audio/video preview - -### Permissions - -- For AUDIO - The value of `meeting.self.permissions.canProduceAudio` needs to be `ALLOWED` -- For VIDEO - The value of `meeting.self.permissions.canProduceVideo` needs to be `ALLOWED` - -In the preset editor, toggle these settings under `Media`. - -### Media Preview and Controls - -We'll be using `DyteParticipantTileView`, `DyteInputField` for building a preview tile and -`DyteMicToggleButton`, `DyteCameraToggleButton` for media controls - -```xml - - - - - - - - - - - - - - -``` - -And on the kolin side we bind the newly added element like follows: - -```kotlin -private lateinit var selfParticipantTileView: DyteParticipantTileView -private lateinit var cameraToggleButton: DyteCameraToggleButton -private lateinit var micToggleButton: DyteMicToggleButton - -override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - selfParticipantTileView = view.findViewById(R.id.dyteparticipanttileview_setup_screen) - cameraToggleButton = view.findViewById(R.id.dytecameratoggle_setup_screen) - micToggleButton = view.findViewById(R.id.dytemictoggle_setup_screen) - - selfParticipantTileView.activateForSelfPreview(meeting.localUser) - micToggleButton.activate(meeting) - cameraToggleButton.activate(meeting) -} -``` - -Meeting Precall post skeleton changes diff --git a/docs/android/build-pre-call-ui/build-your-own/edit-user-name.mdx b/docs/android/build-pre-call-ui/build-your-own/edit-user-name.mdx deleted file mode 100644 index 3c6ec04805..0000000000 --- a/docs/android/build-pre-call-ui/build-your-own/edit-user-name.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Edit user name -sidebar_position: 2 ---- - -A common use case of pre-call UI is to give the user a option to set / edit their name. - -### Permissions - -Requires `meeting.localUser.permissions.miscellaneous.canEditDisplayName` to be `true` - -In the preset editor, ensure `Miscellaneous > Edit Name` is toggled enabled. - - - -### File: CustomMeetingPreview.tsx - -We add a `` element for entering the participant name. We should not show this input if the user doese not have permission to edit name (`meeting.localUser.permissions.miscellaneous.canEditDisplayName`) - -```xml {15, 21} - - - - - - - - - - -``` - -And on the kolin side we bind the newly added element like follows: - -```kotlin -nameAtom.addTextChangedListener( - object : TextWatcher { - override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { - // no-op - } - - override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - // no-op - } - - override fun afterTextChanged(s: Editable?) { - meeting.self.setDisplayName(s?.toString()) - } - } -) -``` - -`meeting.self.setDisplayName(participantName)` sets the new name for the participant. - -At the end, we let user join the meeting using `meeting.join();`. diff --git a/docs/android/build-pre-call-ui/build-your-own/initial-code-skeleton.mdx b/docs/android/build-pre-call-ui/build-your-own/initial-code-skeleton.mdx deleted file mode 100644 index 21fe3c7908..0000000000 --- a/docs/android/build-pre-call-ui/build-your-own/initial-code-skeleton.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Basic structure -sidebar_position: 1 ---- - -## What are we building? - -We are deconstructing the default setup screen. - -At the end of this group of docs, we should have the following screen built using low level components. - -Meeting Precall post skeleton changes - -Let's put a basic skeleton and the initial boilerplate code. - -Barebone xml needed to redner ui for self name and a button to join the meeting will look as follow: - -```xml - - - - - - - - -``` - -Now inside your `setup_fragment.kt` file you'll need to bind xml elements with kotlin objects, to do that: - -```kotlin -private lateinit var joinButton: DyteJoinButton -private lateinit var selfNameDyteLabel: DyteLabel - -override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - joinButton.activate(meeting) - selfNameDyteLabel.text = meeting.localUser.name -} -``` - -This should give you output as following - -Meeting Precall post skeleton changes diff --git a/docs/android/build-pre-call-ui/default-setup-screen.mdx b/docs/android/build-pre-call-ui/default-setup-screen.mdx deleted file mode 100644 index 84e472ffd1..0000000000 --- a/docs/android/build-pre-call-ui/default-setup-screen.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: DyteSetupScreen -sidebar_position: 4 ---- - -Dyte provides a default pre-call preview UI, also known as setup screen as part of our UI components. - -To use the default pre-built setup screen you can use `DyteSetupFragment` from our components. - -```kotlin -fragmentManager - .beginTransaction() - .add(id.fragmentContainer, DyteSetupFragment(), "TAG") - .commit() -``` - -If you want to break down the above for a custom UI but still want to reuse the default setup screen, use the following component. - -If you want to build a custom pre-call UI, let's go to the next page to start building one. diff --git a/docs/android/chat/_category_.json b/docs/android/chat/_category_.json deleted file mode 100644 index fce8ca11dd..0000000000 --- a/docs/android/chat/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 7, - "label": "Chat", - "collapsible": true -} diff --git a/docs/android/chat/prebuilt-screen.mdx b/docs/android/chat/prebuilt-screen.mdx deleted file mode 100644 index a6a8f8794f..0000000000 --- a/docs/android/chat/prebuilt-screen.mdx +++ /dev/null @@ -1,94 +0,0 @@ ---- -sidebar_position: 1 -title: Prebuilt Chat Screen ---- - -## Introduction to Chat in Dyte Meetings - -In Dyte meetings, participants can also engage in real-time communication by sending chat messages. -These messages can be text, images, or files, depending on the [chat permissions](/guides/livestream/advanced/configuring-permissions#chat) -set in their preset. - -## Dyte's Prebuilt Chat Screen - -Dyte's Android UI Kit includes prebuilt Chat screen that handle the complete chat logic and offer -a range of features to enhance the chat experience in Dyte meetings: - -- **Display Messages**: Displays all chat messages, including text, images, and files, in a clear and organized manner -- **Image Preview**: Allows users to tap on an image message to view it in full screen -- **File Download**: Enables users to download files sent in chat messages with a simple tap -- **Message Composer**: Provides a user-friendly interface for composing messages, supporting text, - image, and file messages. It automatically adjusts the UI based on the user's chat permissions, - hiding or disabling options that are not permitted -- **Auto-Scroll**: Auto-scrolls to new messages as they are received but stops auto-scrolling if the user - has scrolled up to read an old message -- **Device Permissions**: Handles device permissions elegantly on all supported Android versions for sending images, files, - and downloading files to the device. This saves developers effort, allowing them to focus on building their apps - -
- Prebuilt Chat Screen Message List - - Prebuilt Chat Screen Send Options - -
- -## Using Dyte's Chat screen - -Dyte's prebuilt Chat screen comes in two variants: - -1. **DyteChatBottomSheet**: Displays the chat UI as a full-screen bottom sheet that can be dismissed by swiping down. - -```kotlin -import dyte.io.uikit.screens.chat.DyteChatBottomSheet - -val dyteChatBottomSheet = DyteChatBottomSheet() -dyteChatBottomSheet.show(childFragmentManager, TAG) -``` - -2. **DyteChatFragment**: Shows the chat UI inside an Android Fragment, providing the flexibility to display the chat UI - full screen or as a part of the screen with other UI elements. - -```xml - - -``` - -```kotlin -import dyte.io.uikit.screens.chat.DyteChatFragment - -val dyteChatFragment = DyteChatFragment() -supportFragmentManager.beginTransaction() - .replace(R.id.fragment_container_view, dyteChatFragment, TAG) - .commit() -``` - -## Wrap-Up - -By integrating Dyte's prebuilt Chat screens into your app, you can enhance the communication experience for users -during Dyte meetings. diff --git a/docs/android/components/_category_.json b/docs/android/components/_category_.json deleted file mode 100644 index d51fe60e5d..0000000000 --- a/docs/android/components/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 10, - "label": "Components", - "collapsible": true -} diff --git a/docs/android/components/dyte-audio-selector.mdx b/docs/android/components/dyte-audio-selector.mdx deleted file mode 100644 index 27f665661e..0000000000 --- a/docs/android/components/dyte-audio-selector.mdx +++ /dev/null @@ -1,21 +0,0 @@ -# DyteAudioDeviceSelector - -An audio device selector component which can be used to select audio devices. - -To use this component inside an xml use following syntax: - -```xml - - /> -``` - -It should look like the following when rendered on the screen: - -![Video Device Selector](/static/android-core/audio-selector.png) - -Device can be changed by clicking on the dropdown and selecting the desired device. diff --git a/docs/android/components/dyte-audio-visualizer.mdx b/docs/android/components/dyte-audio-visualizer.mdx deleted file mode 100644 index a418d94cee..0000000000 --- a/docs/android/components/dyte-audio-visualizer.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-audio-visualizer.svg -description: >- - Learn how to use and customize the DyteParticipantAudioIndicator component in - Dyte's Android with our detailed documentation. ---- - -# DyteParticipantAudioIndicator - -An audio visualizer component which visualizes a participants audio. - -To use this component inside an xml use following syntax - -```xml - - /> -``` - -Inside kotlin/Java code you need to pass objtec of `DyteMeetingParticipant` to render their audio status. - -```kotlin -val audioIndicator = findViewById(R.id.audio_indicator) -audioIndicator.activate(participant) -``` - - - Android DyteParticipantAudioIndicator - diff --git a/docs/android/components/dyte-avatar.mdx b/docs/android/components/dyte-avatar.mdx deleted file mode 100644 index 096355d393..0000000000 --- a/docs/android/components/dyte-avatar.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -description: >- - Learn how to use and customize the DyteAvatarView component in Dyte's Android - with our detailed documentation. ---- - -# DyteAvatarView - -Avatar component which renders a participant's image or their initials. - -```xml - -``` - -And to setup DyteAvatarView inside your kotlin/Java code use as follow: - -```kotlin -val avatarView = findViewById(R.id.dyteavatarview_dyte_participant_tile) -avatarView.activate(participant) -``` - - - Android DyteAvatarView - diff --git a/docs/android/components/dyte-button.mdx b/docs/android/components/dyte-button.mdx deleted file mode 100644 index 7732cd9395..0000000000 --- a/docs/android/components/dyte-button.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-button.svg -description: >- - Learn how to use and customize the DyteButton component in Dyte's Android with - our detailed documentation. ---- - -# DyteButton - -A button that follows Dyte's Design System. - -```xml - -``` - -## Button variants - -There are 3 variants supported, can be set using xml. - -```xml -app:dyte_btn_variant="danger" -app:dyte_btn_variant="primary" -app:dyte_btn_variant="secondary" -``` - - - Android DyteButton - diff --git a/docs/android/components/dyte-camera-toggle.mdx b/docs/android/components/dyte-camera-toggle.mdx deleted file mode 100644 index 77b8dc82ae..0000000000 --- a/docs/android/components/dyte-camera-toggle.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -description: >- - Learn how to use and customize the DyteCameraToggle component in Dyte's - Android with our detailed documentation. ---- - -# DyteCameraToggle - -A button which toggles your camera. - -```xml - -``` - -To setup the button inside kotlin/Java code do as follows - -```kotlin -val cameraToggleButton = findViewById(R.id.btn_camera_toggle) -cameraToggleButton.activate(meeting) -``` - - - Android DyteCameraToggle - diff --git a/docs/android/components/dyte-chat.mdx b/docs/android/components/dyte-chat.mdx deleted file mode 100644 index 8c8b1a180b..0000000000 --- a/docs/android/components/dyte-chat.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-chat.svg -description: >- - Learn how to use and customize the DyteChat component in Dyte's Android with - our detailed documentation. ---- - -# DyteChat - -Fully featured chat screen with image & file upload and auto-scroll. - -```kotlin -val dyteChatBottomSheet = DyteChatBottomSheet() -dyteChatBottomSheet.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - - - Android DyteChat - diff --git a/docs/android/components/dyte-clock.mdx b/docs/android/components/dyte-clock.mdx deleted file mode 100644 index 7b7f38f197..0000000000 --- a/docs/android/components/dyte-clock.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-clock.svg -description: >- - Learn how to use and customize the DyteClockView component in Dyte's Android - with our detailed documentation. ---- - -# DyteClockView - -```xml - -``` - -To setup the clock inside kotlin/Java code do as follows - -```kotlin -val clockView = findViewById(R.id.dyte_clock_view) -clockView.activate(meeting) -``` - - - Android DyteClockView - diff --git a/docs/android/components/dyte-controlbar-button.mdx b/docs/android/components/dyte-controlbar-button.mdx deleted file mode 100644 index ffe6da8538..0000000000 --- a/docs/android/components/dyte-controlbar-button.mdx +++ /dev/null @@ -1,37 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-controlbar-button.svg -description: >- - Learn how to use and customize the DyteControlBarButton component in Dyte's - Android with our detailed documentation. ---- - -# DyteControlBarButton - -A skeleton component used for composing buttons. - -```xml - -``` - -To setup the controlbar button inside kotlin/Java code do as follows - -```kotlin -val buttonView = findViewById(R.id.dyte_control_bar_button) -buttonView.setOnClickListener( - { - // TODO: your action here - } -) -``` - - - Android DyteControlBarButton - diff --git a/docs/android/components/dyte-grid-pagination.mdx b/docs/android/components/dyte-grid-pagination.mdx deleted file mode 100644 index 6e755da2cc..0000000000 --- a/docs/android/components/dyte-grid-pagination.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-grid-pagination.svg -description: >- - Learn how to use and customize the DyteGridPaginatorView component in Dyte's - Android with our detailed documentation. ---- - -# DyteGridPaginatorView - -A component which allows you to change current page and view mode of active -participants list. - -```xml - -``` - -To setup the paginator inside kotlin/Java code do as follows - -```kotlin -val paginatorView = findViewById(R.id.dyte_grid_paginator) -paginatorView.activate(meeting) -``` - - - Android DyteGridPaginatorView - diff --git a/docs/android/components/dyte-grid.mdx b/docs/android/components/dyte-grid.mdx deleted file mode 100644 index cbd8361b44..0000000000 --- a/docs/android/components/dyte-grid.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-grid.svg -description: >- - Learn how to use and customize the DyteGridViewV2 component in Dyte's Android - with our detailed documentation. ---- - -# DyteGridViewV2 - -The main grid component which abstracts all the grid handling logic and renders -it for you. - -```xml - -``` - -To setup the grid inside kotlin/Java code do as follows - -```kotlin -val gridView = findViewById(R.id.dyte_grid_view) -gridView.activate(meeting) -``` - - - Android DyteGridViewV2 - diff --git a/docs/android/components/dyte-idle-screen.mdx b/docs/android/components/dyte-idle-screen.mdx deleted file mode 100644 index 2b209327ba..0000000000 --- a/docs/android/components/dyte-idle-screen.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-idle-screen.svg -description: >- - Learn how to use and customize the DyteLoaderView component in Dyte's Android - with our detailed documentation. ---- - -# DyteLoaderView - -A screen that shows full screen loader which is used between a connection is established with Dyte universe. - -```xml - -``` - - - Android DyteLoaderView - diff --git a/docs/android/components/dyte-join-stage.mdx b/docs/android/components/dyte-join-stage.mdx deleted file mode 100644 index c771ad0b38..0000000000 --- a/docs/android/components/dyte-join-stage.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -description: >- - Learn how to use and customize the DyteJoinStage component in Dyte's Android - with our detailed documentation. ---- - -# DyteJoinStage - -A confirmation dialog screen which is shown - -- When the user's request to Join Stage is approved by the meeting host. -- When host invites the localUser to join stage. - -```kotlin -val dyteJoinStage = DyteJoinStage(requireContext()) -dyteJoinStage.setOnCancelListener { - // when dialog is dismissed by the localUser -} -dyteJoinStage.show() -dyteJoinStage.activate(meeting) -``` - - - Android DyteJoinStage - diff --git a/docs/android/components/dyte-leave-button.mdx b/docs/android/components/dyte-leave-button.mdx deleted file mode 100644 index 1580f2adbf..0000000000 --- a/docs/android/components/dyte-leave-button.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -description: >- - Learn how to use and customize the DyteLeaveButton component in Dyte's Android - with our detailed documentation. ---- - -# DyteLeaveButton - -A button which toggles visilibility of the leave confirmation dialog. - -```xml - -``` - -To activate DyteLeaveButton, do as follows: - -```kotlin -val leaveButton = findViewById(R.id.dyte_leave_button) -leaveButton.activate(meeting) -``` - - - Android DyteLeaveButton - diff --git a/docs/android/components/dyte-leave-meeting.mdx b/docs/android/components/dyte-leave-meeting.mdx deleted file mode 100644 index 81ececf1e1..0000000000 --- a/docs/android/components/dyte-leave-meeting.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-leave-meeting.svg -description: >- - Learn how to use and customize the DyteLeaveMeetingView component in Dyte's - Android with our detailed documentation. ---- - -# DyteLeaveMeetingView - -A component which allows you to leave a meeting or end meeting for all, if you -have the permission. - -To use the component do in kotlin/java as follows: - -```kotlin -val endCallDialog = DyteLeaveMeetingView(context, meeting) -endCallDialog.show() -``` - - - Android DyteLeaveMeetingView - diff --git a/docs/android/components/dyte-meeting-title.mdx b/docs/android/components/dyte-meeting-title.mdx deleted file mode 100644 index ac9ff1e609..0000000000 --- a/docs/android/components/dyte-meeting-title.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-meeting-title.svg -description: >- - Learn how to use and customize the DyteMeetingTitleView component in Dyte's - Android with our detailed documentation. ---- - -# DyteMeetingTitleView - -A component which displays the title of the meeting. - -```xml - -``` - -To use the component do in kotlin/java as follows: - -```kotlin -val meetingTitleView = findViewById(R.id.dytemeetingtitletextview) -meetingTitleView.activate(meeting) -``` - - - Android DyteMeetingTitleView - diff --git a/docs/android/components/dyte-meeting.mdx b/docs/android/components/dyte-meeting.mdx deleted file mode 100644 index 3741a6b320..0000000000 --- a/docs/android/components/dyte-meeting.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-meeting.svg -description: >- - Learn how to use and customize the DyteUIKit component in Dyte's Android with - our detailed documentation. ---- - -# DyteUIKit - -A single component which renders an entire meeting UI. - -It loads your preset and renders the UI based on it. With this component, you -don't have to handle all the states, dialogs and other smaller bits of managing -the application. - -```kotlin -val meetingInfo = DyteMeetingInfoV2( - authToken = authToken, - baseUrl = baseUrl -) -val dyteUIKitInfo = DyteUIKitInfo( - activity = this, - dyteMeetingInfo = meetingInfo -) -val dyteUIKit = DyteUIKitBuilder.build(dyteUIKitInfo) -dyteUIKit.startMeeting() -``` - - - Android DyteUIKit - diff --git a/docs/android/components/dyte-mic-toggle.mdx b/docs/android/components/dyte-mic-toggle.mdx deleted file mode 100644 index ff135f6542..0000000000 --- a/docs/android/components/dyte-mic-toggle.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -description: >- - Learn how to use and customize the DyteMicToggleButton component in Dyte's - Android with our detailed documentation. ---- - -# DyteMicToggleButton - -A button which toggles your microphone. - -```xml - -``` - -To use the component do in kotlin/java as follows: - -```kotlin -val micToggleButton = view.findViewById(R.id.dyte_mic_toggle) -micToggleButton.activate(meeting) -``` - - - Android DyteMicToggleButton - diff --git a/docs/android/components/dyte-more-toggle.mdx b/docs/android/components/dyte-more-toggle.mdx deleted file mode 100644 index b509bf00ef..0000000000 --- a/docs/android/components/dyte-more-toggle.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -description: >- - Learn how to use and customize the DyteMoreToggleButton component in Dyte's - Android with our detailed documentation. ---- - -# DyteMoreToggleButton - -A button which toggles visibility of a more menu. - -```xml - -``` - -To use the component do in kotlin/java as follows: - -```kotlin -var moreToggleButton = findViewById(R.id.dyte_more_toggle) -moreToggleButton.activate() -``` - - - Android DyteMoreToggleButton - diff --git a/docs/android/components/dyte-name-tag.mdx b/docs/android/components/dyte-name-tag.mdx deleted file mode 100644 index 691b11ad56..0000000000 --- a/docs/android/components/dyte-name-tag.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-name-tag.svg -description: >- - Learn how to use and customize the DyteNameTagView component in Dyte's Android - with our detailed documentation. ---- - -# DyteNameTagView - -A component which shows a participant's name. - -```xml - -``` - -To use the component do in kotlin/java as follows: - -```kotlin -var nameTagView = findViewById(R.id.dyte_name_tag_view) -nameTagView.activate(participant) -``` - - - Android DyteNameTagView - diff --git a/docs/android/components/dyte-participant-count.mdx b/docs/android/components/dyte-participant-count.mdx deleted file mode 100644 index d791a3a9b9..0000000000 --- a/docs/android/components/dyte-participant-count.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-participant-count.svg -description: >- - Learn how to use and customize the DyteParticipantCountView component in - Dyte's Android with our detailed documentation. ---- - -# DyteParticipantCountView - -A component which shows count of total joined participants in a meeting. - -```xml - -``` - -To use the component do in kotlin/java as follows: - -```kotlin -var participantCountView = findViewById(R.id.dyte_participant_count_view) -participantCountView.activate(meeting) -``` - - - Android DyteParticipantCountView - diff --git a/docs/android/components/dyte-participants.mdx b/docs/android/components/dyte-participants.mdx deleted file mode 100644 index 16730d8438..0000000000 --- a/docs/android/components/dyte-participants.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-participants.svg -description: >- - Learn how to use and customize the DyteParticipantsFragment component in - Dyte's Android with our detailed documentation. ---- - -# DyteParticipantsFragment - -A component which lists all participants, with ability to run privileged actions -on each participant according to your permissions. - -To show DyteParticipantsFragment do in kotlin/Java as follows: - -```kotlin -val dyteParticipantsFragment = DyteParticipantsFragment() -dyteParticipantsFragment.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - - - Android DyteParticipantsFragment - diff --git a/docs/android/components/dyte-plugins.mdx b/docs/android/components/dyte-plugins.mdx deleted file mode 100644 index 94a7c2e862..0000000000 --- a/docs/android/components/dyte-plugins.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-plugins.svg -description: >- - Learn how to use and customize the DytePluginsBottomSheet component in Dyte's - Android with our detailed documentation. ---- - -# DytePluginsBottomSheet - -A component which lists all available plugins from their preset, and ability to -enable or disable plugins. - -To show DytePluginsBottomSheet do in kotlin/Java as follows: - -```kotlin -val dytePluginsBottomSheet = DytePluginsBottomSheet() -dytePluginsBottomSheet.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - - - Android DytePluginsBottomSheet - diff --git a/docs/android/components/dyte-poll-form.mdx b/docs/android/components/dyte-poll-form.mdx deleted file mode 100644 index 63741051d2..0000000000 --- a/docs/android/components/dyte-poll-form.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -description: >- - Learn how to use and customize the DyteCreatePollBottomSheet component in - Dyte's Android with our detailed documentation. ---- - -# DyteCreatePollBottomSheet - -A component that lets you create a poll. - -To show DyteCreatePollBottomSheet do in kotlin/Java as follows: - -```kotlin -val dytePollsBottomSheet = DyteCreatePollBottomSheet() -dytePollsBottomSheet.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - - - Android DyteCreatePollBottomSheet - diff --git a/docs/android/components/dyte-polls.mdx b/docs/android/components/dyte-polls.mdx deleted file mode 100644 index 903c7d2de4..0000000000 --- a/docs/android/components/dyte-polls.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-polls.svg -description: >- - Learn how to use and customize the DytePollsBottomSheet component in Dyte's - Android with our detailed documentation. ---- - -# DytePollsBottomSheet - -A component which lists all available plugins a user can access with the ability -to enable or disable them as per their permissions. - -To show DytePollBottomSheet do in kotlin/Java as follows: - -```kotlin -val dytePollsBottomSheet = DytePollBottomSheet() -dytePollsBottomSheet.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - - - Android DytePollsBottomSheet - diff --git a/docs/android/components/dyte-recording-indicator.mdx b/docs/android/components/dyte-recording-indicator.mdx deleted file mode 100644 index b43b683ae0..0000000000 --- a/docs/android/components/dyte-recording-indicator.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-recording-indicator.svg -description: >- - Learn how to use and customize the DyteRecordingIndicator component in Dyte's - Android with our detailed documentation. ---- - -# DyteRecordingIndicator - -A component which indicates the recording status of a meeting. - -It will not render anything if no recording is taking place. - -```xml - -``` - -To setup the DyteRecordingIndicator inside kotlin/Java code do as follows - -```kotlin -val dyteRecordingIndicator = findViewById(R.id.dyte_recording_indicator) -dyteRecordingIndicator.activate(meeting) -``` - - - Android DyteRecordingIndicator - diff --git a/docs/android/components/dyte-settings.mdx b/docs/android/components/dyte-settings.mdx deleted file mode 100644 index 9468df41ae..0000000000 --- a/docs/android/components/dyte-settings.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-settings.svg -description: >- - Learn how to use and customize the DyteSettingsFragment component in Dyte's - Android with our detailed documentation. ---- - -# DyteSettingsFragment - -A settings component to see and change your audio/video devices. - -To show DyteSettingsFragment do in kotlin/Java as follows: - -```kotlin -val dyteSettingsFragment = DyteSettingsFragment() -dyteSettingsFragment.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - - - Android DyteSettingsFragment - diff --git a/docs/android/components/dyte-setup-screen.mdx b/docs/android/components/dyte-setup-screen.mdx deleted file mode 100644 index 03fef9c6d8..0000000000 --- a/docs/android/components/dyte-setup-screen.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-setup-screen.svg -description: >- - Learn how to use and customize the DyteSetupFragment component in Dyte's - Android with our detailed documentation. ---- - -# DyteSetupFragment - -A screen shown before joining the meeting, where you can edit your display name, -and media settings. - -To show DyteSetupFragment do in kotlin/Java as follows: - -```kotlin -val dyteSetupFragment = DyteSetupFragment() -dyteSetupFragment.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - - - Android DyteSetupFragment - diff --git a/docs/android/components/dyte-video-selector.mdx b/docs/android/components/dyte-video-selector.mdx deleted file mode 100644 index 66364bdaf1..0000000000 --- a/docs/android/components/dyte-video-selector.mdx +++ /dev/null @@ -1,21 +0,0 @@ -# DyteVideoDeviceSelector - -A video device selector component which can be used to select video devices. - -To use this component inside an xml use following syntax: - -```xml - - /> -``` - -It should look like the following when rendered on the screen: - -![Video Device Selector](/static/android-core/video-selector.png) - -Device can be changed by clicking on the dropdown and selecting the desired device. diff --git a/docs/android/components/dyte-webinar-stage-toggle.mdx b/docs/android/components/dyte-webinar-stage-toggle.mdx deleted file mode 100644 index b4cf63d625..0000000000 --- a/docs/android/components/dyte-webinar-stage-toggle.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -description: >- - Learn how to use and customize the DyteWebinarStageToggleButton component in - Dyte's Android with our detailed documentation. ---- - -# DyteWebinarStageToggleButton - -Component that lets you add provisin for localUser to Join stage. This component internally handles operations related to Request Access, Join Stage, Cancel Request Access and Leave the stage. - -```xml - -``` - -To setup the button inside kotlin/Java code do as follows - -```kotlin -val dyteStageToggleButton = findViewById(R.id.dyte_webinar_stage_toggle) -dyteStageToggleButton.activate(meeting) -``` - - - Android DyteWebinarStageToggleButton - diff --git a/docs/android/components/gallery.mdx b/docs/android/components/gallery.mdx deleted file mode 100644 index d141677b8e..0000000000 --- a/docs/android/components/gallery.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 1 -slug: /components -description: >- - Learn how to use and customize the Gallery component in Dyte's Android with - our detailed documentation. ---- - -# Gallery - - - - - - - - - Android Gallery - diff --git a/docs/android/customize-meeting-ui.mdx b/docs/android/customize-meeting-ui.mdx deleted file mode 100644 index 942f3dc6b5..0000000000 --- a/docs/android/customize-meeting-ui.mdx +++ /dev/null @@ -1,165 +0,0 @@ ---- -sidebar_position: 4 -description: >- - Customize the meeting UI of your Android application using Dyte Docs as your - guide. ---- - -# Customize your Meeting UI - -Dyte provides a range of UI customizations for meetings, including defining participant interactions within a meeting room. The default values for these options are set to facilitate integration. However, you have the flexibility to override them at the client end to suit specific use cases or events. - -When configuring a Dyte meeting, you can pass the following configuration options. - -```kotlin -val imarticusColors = ColorTokens( - brand = BrandColor( - shade300 = Color.parseColor("#ffea76"), - shade400 = Color.parseColor("#ffe865"), - shade500 = Color.parseColor("#ffe554"), - shade600 = Color.parseColor("#e6ce4c"), - shade700 = Color.parseColor("#ccb743"), - ), - background = BackgroundColor( - shade600 = Color.parseColor("#121212"), - shade700 = Color.parseColor("#454545"), - shade800 = Color.parseColor("#898989"), - shade900 = Color.parseColor("#b1b1b1"), - shade1000 = Color.parseColor("#e1e1e1") - ), - text = TextColor( - onBrand = TextColor.TextColorOnBrand( - shade1000 = Color.parseColor("#ff002b4c"), - shade900 = Color.parseColor("#e0002b4c"), - shade800 = Color.parseColor("#c2002b4c"), - shade700 = Color.parseColor("#a3002b4c"), - shade600 = Color.parseColor("#85002b4c") - ), - onBackground = TextColor.TextColorOnBackground( - shade1000 = Color.parseColor("#ff050505"), - shade900 = Color.parseColor("#e0050505"), - shade800 = Color.parseColor("#c2050505"), - shade700 = Color.parseColor("#a3050505"), - shade600 = Color.parseColor("#85050505") - ) - ) - ) - - val tokens = DyteUITokens(colors = imarticusColors, - borderRadius = BorderRadiusToken.Circular, - borderWidth = BorderWidthToken.Thin) -``` - -```kotlin {7} -val meetingInfo = = DyteMeetingInfoV2( - authToken = state.authToken, -) -val config = DyteUIKitConfig( - activity = this, - dyteMeetingInfo = meetingInfo, - designTokens = tokens -) -val dyteClient = DyteUIKitBuilder.build(config) -dyteClient.loadUi() -``` - -Here is a visual representation showcasing all the defined configuration options. - -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-opt1-setup.png) -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-opt1-meeting.png) -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-opt1-meeting-options.png) - -Dyte provides customization options for adjusting the color, border radius, and border width of your UI. Let's explore these customization options in more detail. - -## Customize color scheme to match your brand - -Customize the meeting's color scheme to match your brand and theme with Dyte. You can specify four sets of color values: - -- brandColor: Primary brand color. -- backgroundColor: Primary background color. -- textColor: The primary text color for both the brand color and background. - -### `brandColor` - -```kotlin -BrandColor( - shade300 = Color.parseColor("#ffea76"), - shade400 = Color.parseColor("#ffe865"), - shade500 = Color.parseColor("#ffe554"), - shade600 = Color.parseColor("#e6ce4c"), - shade700 = Color.parseColor("#ccb743"), -) -``` - -### `backgroundColor` - -```kotlin -BackgroundColor( - shade600 = Color.parseColor("#121212"), - shade700 = Color.parseColor("#454545"), - shade800 = Color.parseColor("#898989"), - shade900 = Color.parseColor("#b1b1b1"), - shade1000 = Color.parseColor("#e1e1e1") -) -``` - -### `textColor` - -```kotlin -text = TextColor( - onBrand = TextColor.TextColorOnBrand( - shade1000 = Color.parseColor("#ff002b4c"), - shade900 = Color.parseColor("#e0002b4c"), - shade800 = Color.parseColor("#c2002b4c"), - shade700 = Color.parseColor("#a3002b4c"), - shade600 = Color.parseColor("#85002b4c") - ), - onBackground = TextColor.TextColorOnBackground( - shade1000 = Color.parseColor("#ff050505"), - shade900 = Color.parseColor("#e0050505"), - shade800 = Color.parseColor("#c2050505"), - shade700 = Color.parseColor("#a3050505"), - shade600 = Color.parseColor("#85050505") - ) -) -``` - -## Customize border radius of elements in the meeting - -To customize the border radius of elements in your Dyte meeting, follow these steps: - -1. Create the `DyteUITokens` object: - -```kotlin -val tokens = DyteUITokens(colors = dyteColors, borderRadius = BorderRadiusToken.Rounded) -``` - -- `dyteColors`: Represents the color scheme for your meeting. -- `borderRadius`: Defines the desired border radius. By specifying the desired border radius value in the borderRadius token, you can customize the border radius of elements in your Dyte meeting. - -2. Configure `DyteUIKit` then build and load the Dyte UI. - -```kotlin {10} -val meetingInfo = DyteMeetingInfoV2( - // meeting info -) -val config = DyteUIKitConfig( - activity = this, - dyteMeetingInfo = meetingInfo, - designTokens = tokens -) -val dyteUIKit = DyteUIKitBuilder.build(config) -dyteUIKit.loadUi() -``` - -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-opt2-setup.png) -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-opt2-meeting.png) -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-opt2-meeting-options.png) - - - Android Customize your Meeting UI - - diff --git a/docs/android/participants/_category_.json b/docs/android/participants/_category_.json deleted file mode 100644 index ced656c0e4..0000000000 --- a/docs/android/participants/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 7, - "label": "Participants", - "collapsible": true -} diff --git a/docs/android/participants/introduction.mdx b/docs/android/participants/introduction.mdx deleted file mode 100644 index 29c02ab6cd..0000000000 --- a/docs/android/participants/introduction.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Types -sidebar_position: 1 ---- - -The data regarding all meeting participants is stored under `meeting.participants`. These **does not** include the local user. Use the methods and events to consume the participants data. For example, to get all the participants who joined the meeting: - -```kotlin -// get all joined participants -val joined: List = meeting.participants.joined - -// get all participants -val all: List = meeting.participants.all -``` - -The `meeting.participants` object has the following **lists** of participants - -- **all**: A list that contains all the participants who have joined the meeting except the local user -- **joined**: A list that contains all the participants who are currently in the meeting - except the local user -- **waitlisted**: A list that contains all the participants waiting to join the - meeting. -- **active**: A list that contains all the participants except the local user whose media is subscribed to i.e - participants are supposed to be on the screen at the moment except the local user -- **pinned**: A list that contains all the pinned participants of the meeting. -- **screenShares**: A list that contains all the participants who are sharing their screen. - -Therefore if you were to make a video / audio grid of participants, you'd use the `active` map, but to display the list of all participants in the meeting you'd use the `joined` map. - -Each participant in each of the `joined`, `active`, `pinned` and `screenShares` list are of type `DyteJoinedMeetingParticipant`, `waitlisted` list is of type `DyteWaitlistedParticipant` and `all` list is of type `DyteParticipant`. diff --git a/docs/android/participants/prebuilt.mdx b/docs/android/participants/prebuilt.mdx deleted file mode 100644 index 814a7e4f9d..0000000000 --- a/docs/android/participants/prebuilt.mdx +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Prebuilt -sidebar_position: 3 ---- - -# Manage Participants - -This section explains how to list and manage participants in your Dyte app. - -## Listing Participants - -To show the list of participants in your app, you can use the `DyteParticipantsFragment` class. - -You can create an instance of this class and call the show method to display the list of current participants as shown below: - -```kotlin -val dyteParticipantsFragment = DyteParticipantsFragment() -dyteParticipantsFragment.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - -It should show something like below, with the list of participants in the room: - - - -## Host Controls - -If you are the host of the room, you will see the **host controls** when you click the **three-dot menu** on the top right corner of the participants list. The host controls allow you to manage the participants in the room. - -The host controls include the following options: - -- **Mute/Unmute**: Mute or unmute a participant. -- **Kick**: Kick a participant from the room. -- **Pin**: Pin a participant's video. -- **Turn off video**: Turn off a participant's video. - - -
- -You can also use these methods from our participant object to -perform these actions programmatically. - -```kotlin -val participant = meeting.participants.joined.firstOrNull { it.id == participantId } - -participant?.let { pcpt -> - // To disable a participant's video stream - pcpt.disableVideo(); - - // To disable a participant's audio stream - pcpt.disableAudio(); - - // To kick a participant from the meeting - pcpt.kick(); -} -``` - -You can also `pin` or `unpin` a participant in the meeting. All "pinned" -participants are added to the `meeting.participants.pinned` map. - -```kotlin -val participant = meeting.participants.joined.firstOrNull { it.id == participantId } - -participant?.let { pcpt -> - // To pin a participant - pcpt.pin(); - - // To unpin a participant - pcpt.unpin(); -} -``` diff --git a/docs/android/plugins/_category_.json b/docs/android/plugins/_category_.json deleted file mode 100644 index 5772922e2f..0000000000 --- a/docs/android/plugins/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 8, - "label": "Plugins", - "collapsible": true -} diff --git a/docs/android/plugins/introduction.mdx b/docs/android/plugins/introduction.mdx deleted file mode 100644 index c9d6dbf3fc..0000000000 --- a/docs/android/plugins/introduction.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Introduction -description: Manage plugins in a meeting. -sidebar_position: 1 -tags: - - android-ui-kit - - plugins ---- - -# Introduction - -Plugins are one-click add-ons that can make your meetings more immersive and collaborative. Dyte provides a bunch of inbuilt plugins to choose from, you can also build your own plugins using the [Plugin SDK](../../plugin-sdk/). - -The meeting plugins can be accessed from the `meeting.plugins` object, it exposes the following. - -| Property | Type | Description | -| -------- | ---- | -------------------------------------- | -| active | List | All plugins that are currently in use. | -| all | List | All plugins the meeting has access to. | - -Each plugin in the list is of type `DytePlugin` which has the following public fields and methods: - -```kotlin -class DytePlugin { - val id: String - val name: String - val description: String - val picture: String - val isPrivate: Boolean - val staggered: Boolean - val baseURL: String - val config: PluginConfig - val isActive: Boolean - val enabledBy: String? - - fun activate() - fun deactivate() - fun getPluginView(): WebView - fun uploadFile(file: DytePluginFile) - fun sendData(eventName: String, data: Any?) -} -``` diff --git a/docs/android/plugins/prebuilt.mdx b/docs/android/plugins/prebuilt.mdx deleted file mode 100644 index 629dafa08e..0000000000 --- a/docs/android/plugins/prebuilt.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Prebuilt -description: Show and use plugins list in a meeting. -sidebar_position: 2 -tags: - - android-ui-kit - - plugins ---- - -## Listing plugins in a meeting - -To show the list of enabled plugins in your app, you can use the `DytePluginsBottomSheet` class. - -You can create an instance of this class and call the `show` method to display the list of enabled plugins as shown below: - -```kotlin -val dytePluginsBottomSheet = DytePluginsBottomSheet() -dytePluginsBottomSheet.show( - fragmentManager, - "SOME_TAG_HERE" -) -``` - -The bottom sheet should look like this: - - - -## Using a plugin in a meeting - -To use a plugin in a meeting, you can use the rocket icon next to the plugin name in the plugins list. - - -
- -When you click on the rocket icon, the plugin webview will be added to the meeting and -everyone in the meeting will be able to see and interact with the plugin. - - - -## Send data to the plugin - -You can send data (type `any`) to a plugin using the `sendData()` method. This method comes in handy when building your own plugin. - -```kotlin -val pluginId = '...'; -val plugin = meeting.plugins.active.firstOrNull { it.id == pluginId } - -plugin?.let { p -> - p.sendData( - eventName = "my-custom-event", - data = "Hello world" - ) -} -``` - -## Receive data from the plugin - -You can receive data from a plugin by subscribing to the `onPluginActivated` event in through our `DytePluginEventsListener` interface. - -```kotlin -private var pluginEventListener: DytePluginEventsListener = - object : DytePluginEventsListener { - override fun onPluginActivated(plugin: DytePlugin) { - // do something with the plugin - } - - ... - } - -// use while initializing the meeting -meeting.addPluginEventsListener(pluginEventListener) -``` diff --git a/docs/android/polls/_category_.json b/docs/android/polls/_category_.json deleted file mode 100644 index 38f4bee4c0..0000000000 --- a/docs/android/polls/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 9, - "label": "Polls", - "collapsible": true -} diff --git a/docs/android/polls/prebuilt-create-poll.mdx b/docs/android/polls/prebuilt-create-poll.mdx deleted file mode 100644 index d0ddeb51a3..0000000000 --- a/docs/android/polls/prebuilt-create-poll.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -sidebar_position: 2 -title: Prebuilt Create Poll Screen ---- - -In Dyte meetings, participants can create polls to gather opinions or make decisions collectively. -The ability to create polls is determined by the [polls permissions](/guides/livestream/advanced/configuring-permissions#polls) -set in the participant's preset. - -## Using Dyte's Create Poll Screen - -Dyte's Android UI Kit provides a user-friendly prebuilt screen, [DyteCreatePollBottomSheet](/android/components/dyte-poll-form), -for creating polls in a Dyte meeting. When using the DyteCreatePollBottomSheet, the poll creator can: - -- Add more options to the poll (default is 2) -- Choose to make the poll voting anonymous -- Choose to hide the poll results before voting, keeping the vote count and voters hidden from participants - -To integrate the `DyteCreatePollBottomSheet` into your app and allow participants to create polls, -use the provided code snippet: - -```kotlin -import dyte.io.uikit.screens.polls.DyteCreatePollBottomSheet - -val createPollBottomSheet = DyteCreatePollBottomSheet() -createPollBottomSheet.show(childFragmentManager, TAG) -``` - -Prebuilt Create Poll Screen - -**Wrap Up**: With Dyte's prebuilt Create Poll screen, you can easily add interactive polls features -to your app, enhancing participant engagement in Dyte meetings. diff --git a/docs/android/polls/prebuilt-polls-screen.mdx b/docs/android/polls/prebuilt-polls-screen.mdx deleted file mode 100644 index 53955c193a..0000000000 --- a/docs/android/polls/prebuilt-polls-screen.mdx +++ /dev/null @@ -1,65 +0,0 @@ ---- -sidebar_position: 1 -title: Prebuilt Polls Screen ---- - -## Introduction to Polls in Dyte Meetings - -In Dyte meetings, participants can engage in polls to gather opinions or make decisions collectively. -Polls enhance the interactive nature of meetings, allowing participants to actively express their views. -The ability to create, or interact with polls is determined by the [polls permissions](/guides/livestream/advanced/configuring-permissions#polls) -set in the participant's preset. - -## Dyte's Prebuilt Polls Screen - -Dyte's Android UI Kit provides a prebuilt Polls screen with the following features: - -- Displays all created polls if the participant has permission to view them -- Allows participants to vote by selecting a checkbox for their chosen option -- Shows the number of votes each poll option has received - -### Usage Options - -The prebuilt Polls screen is available in two variants: - -1. [**DytePollsBottomSheet**](/android/components/dyte-polls): Displays the Polls list as a full-screen bottom sheet that can be dismissed by swiping down. - -```kotlin -import dyte.io.uikit.screens.polls.DytePollsBottomSheet - -val dytePollsBottomSheet = DytePollsBottomSheet() -dytePollsBottomSheet.show(childFragmentManager, TAG) -``` - -2. **DytePollsFragment**: Shows the list of ongoing polls inside an Android fragment, providing flexibility - to show the Polls UI fullscreen or in a part of the screen along with other UI elements. - -```xml - - -``` - -```kotlin -import dyte.io.uikit.screens.polls.DytePollsFragment - -val dytePollsFragment = DytePollsFragment() -supportFragmentManager.beginTransaction() - .replace(R.id.fragment_container_view, dytePollsFragment, TAG) - .commit() -``` - -Prebuilt Polls Screen - -## Next Steps - -In the next guide, we will explore the "Prebuilt Create Poll screen" which allows participants to create polls -if they have permission in their preset. diff --git a/docs/android/quickstart.mdx b/docs/android/quickstart.mdx deleted file mode 100644 index b86e085998..0000000000 --- a/docs/android/quickstart.mdx +++ /dev/null @@ -1,173 +0,0 @@ ---- -sidebar_position: 1 -slug: / -description: >- - Dive into Dyte's Android documentation to integrate video collaboration - seamlessly into your Android applications. ---- - -import { MavenLatestInstallation } from '@site/src/components/LatestInstallation'; - -# Quickstart - -This quickstart shows how to use Dyte's Android UI Kit SDK to add live video and -audio to your Android applications. - -To get started quickly, you can use our sample code. Simply clone and run a sample application -from the Android UIKit samples, available in both [Kotlin](https://github.com/dyte-io/android-samples/tree/main/samples/android-ui-kit-sample-kotlin) and [Java](https://github.com/dyte-io/android-samples/tree/main/samples/android-uikit-sample-java). - -## Objective - -You'll learn how to: - -- [Install the Dyte SDK](#step-1-install-the-sdk-from-mavencentral) -- [Configure a Dyte meeting](#step-2-configure-a-dyte-meeting) -- [Initialize the SDK](#step-3-initialize-the-sdk) -- [Launch the meeting UI](#step-4-launch-the-meeting-ui) - -## Before Getting Started - -Make sure you've read the -[Getting Started with Dyte](/getting-started) topic and -completed the steps in the -[Integrate Dyte](/getting-started#integrate-dyte) section. -You must complete the following steps: - -- Create a [Dyte Developer Account](https://dev.dyte.io/) -- Create a - [Dyte Meeting](/api/?v=v2#/operations/create_meeting) -- [Add Participant](/api/?v=v2#/operations/add_participant) - to the meeting -- Install [Android Studio](https://developer.android.com/studio) - -## Step 1: Install the SDK from MavenCentral - - - -:::tip Note -If your app targets to lower versions of android (android api \<= 24), Please enable core desugering in your app's build.gradle file like follows. - -``` -android { - // other configurations - compileOptions { - // other configurations - isCoreLibraryDesugaringEnabled = true - - // Sets Java compatibility to Java 8 - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } -} - -dependencies { - // other dependencies - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") -} -``` - -::: - -## Step 2: Configure a Dyte meeting - -Configure the following properties in the `DyteMeetingInfoV2` class. You must pass a valid participant `authToken` -obtained from the [Add Participant](/api/?v=v2#/operations/add_participant) API. - -| Name | Description | -| ------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `authToken` | Authentication token generated using the [Add Participant API](/api/?v=v2#/operations/add_participant) after meeting creation. | -| `enableAudio` | Set whether to join the meeting with your Mic ON (`true`) or OFF (`false`). | -| `enableVideo` | Set whether to join the meeting with your Camera ON (`true`) or OFF (`false`). | -| `baseUrl` | Base URL of the Dyte environment you have created the meeting on. | - - - - -```kotlin -val meetingInfo = DyteMeetingInfoV2( - authToken = "", - enableAudio = true, - enableVideo = true, - baseUrl = "dyte.io" -) -``` - - - - - -```java -DyteMeetingInfoV2 meetingInfo = new DyteMeetingInfoV2( - "", - true, // enableAudio - true, // enableVideo - "dyte.io" -); -``` - - - - -## Step 3: Initialize the SDK - -Initialize the DyteUIKit with the `DyteUIKitBuilder` class, using the `meetingInfo` configured above. - - - - -```kotlin -val dyteUIKitInfo = DyteUIKitInfo( - activity = this, - dyteMeetingInfo = meetingInfo -) -val dyteUIKit = DyteUIKitBuilder.build(dyteUIKitInfo) -``` - - - - - -```java -DyteUIKitInfo dyteUIKitInfo = new DyteUIKitInfo(this, meetingInfo); -DyteUIKit dyteUIKit = DyteUIKitBuilder.build(dyteUIKitInfo); -``` - - - - -## Step 4: Launch the meeting UI - -To launch the meeting UI all you need to do is call `startMeeting()` which will take -care of everything for you. - - - - -```kotlin -dyteUIKit.startMeeting() -``` - - - - - -```java -dyteUIKit.startMeeting(); -``` - - - - -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-setup.png) - -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-meeting.png) - -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/mobile-meeting-options.png) - - - Android Quickstart - - diff --git a/docs/android/release-notes.mdx b/docs/android/release-notes.mdx deleted file mode 100644 index 6897411285..0000000000 --- a/docs/android/release-notes.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Release Notes -sidebar_position: 101 -sidebar_class_name: releaseSidebarHeading -tags: - - releasenotes ---- - -import ReleaseNotesGenerator from '@site/src/components/ReleaseNotesGenerator'; - - - - - Android Release Notes - diff --git a/docs/android/render-participant-videos/_category_.json b/docs/android/render-participant-videos/_category_.json deleted file mode 100644 index c27ad0df06..0000000000 --- a/docs/android/render-participant-videos/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 6, - "label": "Render participant videos", - "collapsible": true -} diff --git a/docs/android/render-participant-videos/custom-ui.mdx b/docs/android/render-participant-videos/custom-ui.mdx deleted file mode 100644 index ca432125b1..0000000000 --- a/docs/android/render-participant-videos/custom-ui.mdx +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: Building Your Own UI -sidebar_position: 2 ---- - -In this guide, we will walk you through building a custom UI to render participant videos using -Dyte's Android UI Kit. We will use an example of a video calling app like FaceTime to demonstrate -how to display participant videos in your own UI. - -## Video Calling Example - -Let's consider a video calling app where two participants are in a call. The UI of our example app -will feature: - -- **Remote Participant Tile**: This tile will render the video of the other participant, occupying - the main area of the screen -- **Local User Tile**: Positioned at the right-bottom corner, this tile will display your video - i.e. of the local user - -Video Calling Example Wireframe - -## Using DyteParticipantTileView - -To achieve this UI, we will utilize the `DyteParticipantTileView` provided by Dyte's Android UI Kit. -This custom Android view renders the video of a single participant and automatically handles displaying -the video or a placeholder when the participant turns their camera on or off. - -## Getting Started - -Before we begin, let's understand the key components we'll be working with: - -- **DyteParticipantTileView**: Renders the video of a single participant -- **DyteJoinedMeetingParticipant**: Represents a participant who has joined the meeting. The joined list - in `DyteParticipants` holds objects of this type -- **DyteSelfParticipant**: Represents the local user -- **DyteMobileClient**: Provides access to meeting and participant information. Use the `meeting.participants.joined` list - to retrieve the list of participants who have joined the meeting - -## Building the UI - -1. **XML Layout**: Define the layout of your video calling screen. Use two `DyteParticipantTileViews` - to represent the remote participant and the local user. - -```xml - - - - - - - - -``` - -2. **UI Logic**: Bind the DyteParticipantTileViews to the respective participants and activate - them to render the videos. - -```kotlin -import dyte.io.uikit.view.participanttile.DyteParticipantTileView -import io.dyte.core.DyteMobileClient - -class VideoCallActivity : AppCompatActivity() { - private lateinit var selfParticipantTileView: DyteParticipantTileView - private lateinit var remoteParticipantTileView: DyteParticipantTileView - private val meeting: DyteMobileClient by lazy { DyteUIKitBuilder.meeting } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_video_call) - - selfParticipantTileView = findViewById(R.id.dyteparticipanttileview_self_participant) - remoteParticipantTileView = findViewById(R.id.dyteparticipanttileview_remote_participant) - - activateUI(meeting) - } - - private fun activateUI(meeting: DyteMobileClient) { - val localUser = meeting.localUser - val remoteParticipant = meeting.participants.joined.firstOrNull { it.id != localUser.id } ?: return - - selfParticipantTileView.activate(localUser) - remoteParticipantTileView.activate(remoteParticipant) - } -} -``` - -3. **Adding Controls** (Bonus): You can easily add controls like mic toggle, camera toggle, - and leave call button using the [DyteMicToggleButton](/android/components/dyte-mic-toggle), - [DyteCameraToggleButton](/android/components/dyte-camera-toggle), and [DyteLeaveButton](/android/components/dyte-leave-button) - provided by Dyte's Android UI Kit. - -Here's the screenshot of the UI implemented: - -Video Calling Example UI - -## Wrap-Up - -Congratulations! You've successfully built a custom UI to render participant videos using Dyte's Android UI Kit. -With components like **DyteGridView** and **DyteParticipantTileView**, Dyte's UI Kit simplifies video rendering -in meetings and offers the flexibility to create dynamic video calling experiences. - -### Complete Code - -You can find the complete code for this example in Dyte's [Facetime sample repository](https://github.com/dyte-io/android-samples/tree/main/samples/facetime). -Feel free to explore and try it out! diff --git a/docs/android/render-participant-videos/using-dytegrid.mdx b/docs/android/render-participant-videos/using-dytegrid.mdx deleted file mode 100644 index 539f4be62b..0000000000 --- a/docs/android/render-participant-videos/using-dytegrid.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Using DyteGridView -sidebar_position: 1 ---- - -The [DyteGridView](/android/components/dyte-grid) is a custom Android View provided by Dyte's Android UI Kit, designed to simplify -the rendering of participant videos in a meeting. It abstracts the grid handling logic, making it easy to -display videos in a grid layout. - -To render participant videos using `DyteGridView`, follow these steps: - -1. **Add DyteGridView to your layout**: - -```xml - -``` - -2. **Activate DyteGridView**: In your fragment or activity class, activate the `DyteGridViewV2` by calling the - `activate` method with an instance of `DyteMobileClient`. - -```kotlin -import dyte.io.uikit.view.dytegrid.DyteGridViewV2 -import io.dyte.core.DyteMobileClient - -class MeetingFragment : Fragment() { - private lateinit var gridView: DyteGridViewV2 - private val meeting: DyteMobileClient by lazy { DyteUIKitBuilder.meeting } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - gridView = view.findViewById(R.id.dyte_grid_view) - gridView.activate(meeting) - } -} -``` - -After activation, the DyteGridView will automatically render the videos of the participants present in the meeting. - -Render Participant videos using DyteGridView - -## Building Your Own UI - -While DyteGridView provides a convenient way to render participant videos, you may want to customize the UI further. -In the next section, we will explore how to build your own UI to render participant videos according to your application's specific requirements. diff --git a/docs/android/sample-app.mdx b/docs/android/sample-app.mdx deleted file mode 100644 index 1ea027a440..0000000000 --- a/docs/android/sample-app.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -sidebar_position: 11 -description: >- - Explore and learn from the Android sample app provided in Dyte's - documentation. ---- - -# Sample app - -You can check out an example of this integration by cloning our -[Android UI Kit sample app repo](https://github.com/dyte-io/android-samples/tree/main/samples/android-ui-kit-sample-kotlin). - - - Android Sample app - - diff --git a/docs/angular-ui-kit/basics/_category_.json b/docs/angular-ui-kit/basics/_category_.json deleted file mode 100644 index ed81286200..0000000000 --- a/docs/angular-ui-kit/basics/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 5, - "label": "Build your own UI", - "collapsible": true -} diff --git a/docs/angular-ui-kit/basics/components-basics.mdx b/docs/angular-ui-kit/basics/components-basics.mdx deleted file mode 100644 index c045e2edbf..0000000000 --- a/docs/angular-ui-kit/basics/components-basics.mdx +++ /dev/null @@ -1,244 +0,0 @@ ---- -sidebar_position: 1 -description: >- - Learn the basics of components in Dyte's Angular UI Kit through our detailed - documentation. ---- - -# Components Basics - -Learn about the structure of an individual component and figure out how to use -the UI Kit effectively. - -## Usage Guide - -With the UI Kit, we provide a few set of ways to use it, depending on your needs -and use case. - -### Write less code - -You can use the provided `` monolith component in case you want -to write less code and not handle all the states and components rendering. - -It takes care of all of it and loads the entire meeting UI from your preset. - -```html - - - - - -``` - -### Using individual components - -If you wish to integrate UI Kit components into your UI at various parts, you -can use individual components as well which are used within the main `dyte-meeting` component. - -To simplify using individual components, you can the `dyte-ui-provider` component which lets you -automatically sync all the common props that you would normally pass to each individual component without -having to pass them manually to each component. These props are `meeting`, `config`, `iconPack`, `t`, `size` and `states`. - -:::info -All components sync to props passed to `dyte-ui-provider` starting from UI Kit `v2.4.0`, so make sure you on the latest version. -::: - -Here is a basic example which renders a grid if you join the meeting. - -```html -
- -
Joining...
- - -
-
- - -``` - -This way, all the components which you used will automatically sync with the changes. - -You can also pass these props individually as well like before. - -## Default Props - -Most of the components accept a set of a **Default Props** for essential -features such as meeting data, meeting APIs, UI Configuration, -internationalisation & icons. - -| Prop | Description | -| :--------- | :------------------------------------------------------------------------------- | -| `meeting` | The web-core `DyteClient` object. Contains all the meeting specific data & APIs. | -| `config` | The [`UI Config`](../reference/interfaces/UIConfig) config | -| `t` | [i18n helper](../reference/#dytei18n) method | -| `iconPack` | [`IconPack`](../reference/#iconpack) object | - -Here is a simple example of how you pass these props to components, here a -`DyteGrid`: - -```js -const gridEl = document.createElement('dyte-grid'); - -gridEl.meeting = meeting; -gridEl.config = config; -gridEl.t = t; -gridEl.iconPack = iconPack; -``` - -## Component Specific Props - -Each component also has a set of props specifically. - -Here are some examples: - -### Button variants - -```html -Primary Button (Default) -Secondary button -Danger button -Ghost button -``` - -### Participant components - -These are components which depend on a single participant object or a -participant list. - -`meeting.self` and participant objects from `meeting.participants` can be passed -as a participant to this prop. - -```js -const nameTagSelf = document.createElement('dyte-grid'); -const nameTagSelfWithYou = nameTagSelf.cloneNode(true); - -nameTagSelf.participant = nameTagSelfWithYou.participant = participant; - -// You should also pass the `meeting` object to see the -// `(you)` text in name tag to identify self -nameTagSelfWithYou.meeting = meeting; -``` - -### Grid Components - -We have a set of grid components that help you to have any kind of grid you -wish. - -There are two types of grid components, so that the grid can be easily extended -and modularized. - -- Parent Grid component - `dyte-grid` -- Normal Grid components - `dyte-simple-grid`, `dyte-mixed-grid`, - `dyte-spotlight-grid` - -#### Parent Grid Component - -The `DyteGrid` component is a monolith component which handles all grid related -events and data on it's own and passes the following props to it's children. - -| Prop | Description | -| :-------------------------- | :---------------------------------- | -| `participants[]` | Active Participants | -| `pinnedParticipants[]` | Pinned Participants | -| `screenShareParticipants[]` | Participants who are screen sharing | -| `plugins[]` | Active Plugins | - -These props are passed to it's children which it computes from the UI Config -which is passed to it. By default it will use the default UI Config. - -:::tip - -Try changing the `aspectRatio` and `gap` props. - -::: - -```html - - -``` - -#### Normal Grid Components - -These components just accept the props mentioned above and render the UI. - -Read more about them in their Reference pages. - -##### DyteSimpleGrid - -Accepts: `participants`, `pinnedParticipants`. - -This grid renders just the ParticipantTiles of the participants you pass to it. -It also brings `pinnedParticipants` to the start of the grid. - -##### DyteSimpleGrid - -Accepts: `participants`, `pinnedParticipants`. - -This grid renders the ParticipantTiles of the participants and -pinnedParticipants in separate grids. - -Pinned participants are in spotlight area, i.e; larger grid. - -##### DyteMixedGrid - -Accepts: `participants`, `pinnedParticipants`, `screenShareParticipants`, -`plugins`. - -This grid renders screenshares as well as plugins in the main larger view and -renders a smaller grid on the right side which is configurable via the UI -Config. You can use SimleGrid or SpotlightGrid here. - -If you just want to render `self` twice in a SimpleGrid: - -##### Example for SimpleGrid - -```js -// load meeting - -const simpleGrid = document.createElement('dyte-simple-grid'); -simpleGrid.aspectRatio = '1:1'; -simpleGrid.gap = 8; -simpleGrid.participants = [meeting.self, meeting.self]; -``` - - - Angular UI Kit Components Basics - - diff --git a/docs/angular-ui-kit/basics/pre-requisite.mdx b/docs/angular-ui-kit/basics/pre-requisite.mdx deleted file mode 100644 index ff72c6afc5..0000000000 --- a/docs/angular-ui-kit/basics/pre-requisite.mdx +++ /dev/null @@ -1,126 +0,0 @@ ---- -sidebar_position: 5 -description: >- - Understand the prerequisites for using Dyte's Angular UI Kit with our - comprehensive documentation. ---- - -# Prerequisite - -Make sure to read this before you start integrating the UI Kit into your app. - -These are a couple of components that are important for proper functioning of a -meeting. - -### DyteParticipantsAudio - -This component takes care of the audio playback and autoplay issues. - -:::danger Audio - -The user will not hear audio without this component. - -::: - -```html - - - -``` - -This component will also show a dialog in case the browser throws an auto play -error, requiring user interaction to allow playing audio. - -Here is more information on -[Autoplay policy in Chrome](https://developer.chrome.com/blog/autoplay/). - -Other browsers have similar policy, with some minor differences. - -### DyteNotifications - -:::danger Notifications - -The user will not be notified of important events such as network disconnection, -poor network without this component. - -::: - -```html - - - -``` - -### DyteDialogManager - -A component which handles all dialog elements in a component. This component is required for the following components to work: - -- DyteLeaveButton -- DyteSettingsToggle -- DyteBreakoutRoomsToggle -- DyteMuteAllButton - -This components depends on the values from `states` object. - -```html - - - -``` - - - Angular UI Kit Prerequisite - - diff --git a/docs/angular-ui-kit/components/_category_.json b/docs/angular-ui-kit/components/_category_.json deleted file mode 100644 index 639469d6af..0000000000 --- a/docs/angular-ui-kit/components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "position": 6, - "label": "Components", - "collapsible": true, - "collapsed": false -} diff --git a/docs/angular-ui-kit/components/dyte-audio-visualizer.mdx b/docs/angular-ui-kit/components/dyte-audio-visualizer.mdx deleted file mode 100644 index 7dfafda77f..0000000000 --- a/docs/angular-ui-kit/components/dyte-audio-visualizer.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-audio-visualizer.svg -description: >- - Learn how to use and customize the dyte-audio-visualizer component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-audio-visualizer - -An audio visualizer component which visualizes a participants audio. - -Commonly used inside `dyte-name-tag`. - -## Props - - - - - Angular UI Kit dyte-audio-visualizer - diff --git a/docs/angular-ui-kit/components/dyte-avatar.mdx b/docs/angular-ui-kit/components/dyte-avatar.mdx deleted file mode 100644 index 4fa0ff207f..0000000000 --- a/docs/angular-ui-kit/components/dyte-avatar.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-avatar.svg -description: >- - Learn how to use and customize the dyte-avatar component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-avatar - -Avatar component which renders a participant's image or their initials. - -## Props - - - - - Angular UI Kit dyte-avatar - diff --git a/docs/angular-ui-kit/components/dyte-button.mdx b/docs/angular-ui-kit/components/dyte-button.mdx deleted file mode 100644 index 9184efa2bc..0000000000 --- a/docs/angular-ui-kit/components/dyte-button.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-button.svg -description: >- - Learn how to use and customize the dyte-button component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-button - -A button that follows Dyte's Design System. - -## Props - - - - - Angular UI Kit dyte-button - diff --git a/docs/angular-ui-kit/components/dyte-camera-toggle.mdx b/docs/angular-ui-kit/components/dyte-camera-toggle.mdx deleted file mode 100644 index ed9e7a6470..0000000000 --- a/docs/angular-ui-kit/components/dyte-camera-toggle.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-camera-toggle component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-camera-toggle - -A button which toggles your camera. - -## Props - - - - - Angular UI Kit dyte-camera-toggle - diff --git a/docs/angular-ui-kit/components/dyte-chat-toggle.mdx b/docs/angular-ui-kit/components/dyte-chat-toggle.mdx deleted file mode 100644 index bfd277f06a..0000000000 --- a/docs/angular-ui-kit/components/dyte-chat-toggle.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-chat-toggle component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-chat-toggle - -A button which toggles visibility of chat. - -You need to pass the `meeting` object to it to see the unread messages count badge. - -When clicked it emits a `dyteStateUpdate` event with the data: - -```ts -{ - activeSidebar: boolean; - sidebar: 'chat' | 'none'; -} -``` - -## Props - - - - - Angular UI Kit dyte-chat-toggle - diff --git a/docs/angular-ui-kit/components/dyte-chat.mdx b/docs/angular-ui-kit/components/dyte-chat.mdx deleted file mode 100644 index 540406a37c..0000000000 --- a/docs/angular-ui-kit/components/dyte-chat.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-chat.svg -description: >- - Learn how to use and customize the dyte-chat component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-chat - -Fully featured chat component with image & file upload, emoji picker and auto-scroll. - -## Props - - - - - Angular UI Kit dyte-chat - diff --git a/docs/angular-ui-kit/components/dyte-clock.mdx b/docs/angular-ui-kit/components/dyte-clock.mdx deleted file mode 100644 index 63bbc7145d..0000000000 --- a/docs/angular-ui-kit/components/dyte-clock.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-clock.svg -description: >- - Learn how to use and customize the dyte-clock component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-clock - -## Props - - - - - Angular UI Kit dyte-clock - diff --git a/docs/angular-ui-kit/components/dyte-confirmation-modal.mdx b/docs/angular-ui-kit/components/dyte-confirmation-modal.mdx deleted file mode 100644 index 59084906e2..0000000000 --- a/docs/angular-ui-kit/components/dyte-confirmation-modal.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-confirmation-modal component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-confirmation-modal - -A confirmation modal. - -## Props - - - - - Angular UI Kit dyte-confirmation-modal - diff --git a/docs/angular-ui-kit/components/dyte-controlbar-button.mdx b/docs/angular-ui-kit/components/dyte-controlbar-button.mdx deleted file mode 100644 index c97ba0ce3c..0000000000 --- a/docs/angular-ui-kit/components/dyte-controlbar-button.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-controlbar-button.svg -description: >- - Learn how to use and customize the dyte-controlbar-button component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-controlbar-button - -A skeleton component used for composing buttons. - -## Props - - - - - Angular UI Kit dyte-controlbar-button - diff --git a/docs/angular-ui-kit/components/dyte-controlbar.mdx b/docs/angular-ui-kit/components/dyte-controlbar.mdx deleted file mode 100644 index dec3ff7bec..0000000000 --- a/docs/angular-ui-kit/components/dyte-controlbar.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-controlbar component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-controlbar - -Controlbar component provides you with various designs as variants. - -## Props - - - - - Angular UI Kit dyte-controlbar - diff --git a/docs/angular-ui-kit/components/dyte-dialog-manager.mdx b/docs/angular-ui-kit/components/dyte-dialog-manager.mdx deleted file mode 100644 index 8da5ca9259..0000000000 --- a/docs/angular-ui-kit/components/dyte-dialog-manager.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-dialog-manager component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-dialog-manager - -A component which handles all dialog elements in a component such as: - -- dyte-settings -- dyte-leave-meeting -- dyte-permissions-message -- dyte-image-viewer -- dyte-remote-access-manager -- dyte-breakout-rooms-manager - -This components depends on the values from `states` object. - -## Props - - - - - Angular UI Kit dyte-dialog-manager - diff --git a/docs/angular-ui-kit/components/dyte-dialog.mdx b/docs/angular-ui-kit/components/dyte-dialog.mdx deleted file mode 100644 index 336511bcbf..0000000000 --- a/docs/angular-ui-kit/components/dyte-dialog.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-dialog.svg -description: >- - Learn how to use and customize the dyte-dialog component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-dialog - -A dialog component. - -## Props - - - - - Angular UI Kit dyte-dialog - diff --git a/docs/angular-ui-kit/components/dyte-emoji-picker.mdx b/docs/angular-ui-kit/components/dyte-emoji-picker.mdx deleted file mode 100644 index f064788880..0000000000 --- a/docs/angular-ui-kit/components/dyte-emoji-picker.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-emoji-picker.svg -description: >- - Learn how to use and customize the dyte-emoji-picker component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-emoji-picker - -A very simple emoji picker component. - -## Props - - - - - Angular UI Kit dyte-emoji-picker - diff --git a/docs/angular-ui-kit/components/dyte-ended-screen.mdx b/docs/angular-ui-kit/components/dyte-ended-screen.mdx deleted file mode 100644 index 6e640c0457..0000000000 --- a/docs/angular-ui-kit/components/dyte-ended-screen.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-ended-screen.svg -description: >- - Learn how to use and customize the dyte-ended-screen component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-ended-screen - -A screen which shows a meeting has ended. - -## Props - - - - - Angular UI Kit dyte-ended-screen - diff --git a/docs/angular-ui-kit/components/dyte-file-message.mdx b/docs/angular-ui-kit/components/dyte-file-message.mdx deleted file mode 100644 index 5f9f42376e..0000000000 --- a/docs/angular-ui-kit/components/dyte-file-message.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-file-message component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-file-message - -A component which renders a file message from chat. - -## Props - - - - - Angular UI Kit dyte-file-message - diff --git a/docs/angular-ui-kit/components/dyte-fullscreen-toggle.mdx b/docs/angular-ui-kit/components/dyte-fullscreen-toggle.mdx deleted file mode 100644 index 758b016157..0000000000 --- a/docs/angular-ui-kit/components/dyte-fullscreen-toggle.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-fullscreen-toggle component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-fullscreen-toggle - -A button which toggles full screen mode for any -existing `dyte-meeting` component in the DOM. - -## Props - - - - - Angular UI Kit dyte-fullscreen-toggle - diff --git a/docs/angular-ui-kit/components/dyte-grid-pagination.mdx b/docs/angular-ui-kit/components/dyte-grid-pagination.mdx deleted file mode 100644 index 163bf31a69..0000000000 --- a/docs/angular-ui-kit/components/dyte-grid-pagination.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-grid-pagination.svg -description: >- - Learn how to use and customize the dyte-grid-pagination component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-grid-pagination - -A component which allows you to change current page and view mode -of active participants list. This is reflected in the `dyte-grid` component. - -## Props - - - - - Angular UI Kit dyte-grid-pagination - diff --git a/docs/angular-ui-kit/components/dyte-grid.mdx b/docs/angular-ui-kit/components/dyte-grid.mdx deleted file mode 100644 index 7dde3f873a..0000000000 --- a/docs/angular-ui-kit/components/dyte-grid.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-grid.svg -description: >- - Learn how to use and customize the dyte-grid component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-grid - -The main grid component which abstracts all the grid handling logic and renders it for you. - -## Props - - - - - Angular UI Kit dyte-grid - diff --git a/docs/angular-ui-kit/components/dyte-header.mdx b/docs/angular-ui-kit/components/dyte-header.mdx deleted file mode 100644 index d39525ffae..0000000000 --- a/docs/angular-ui-kit/components/dyte-header.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-header component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-header - -A component that houses all the header components. - -## Props - - - - - Angular UI Kit dyte-header - diff --git a/docs/angular-ui-kit/components/dyte-icon.mdx b/docs/angular-ui-kit/components/dyte-icon.mdx deleted file mode 100644 index b2f2854705..0000000000 --- a/docs/angular-ui-kit/components/dyte-icon.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-icon component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-icon - -An icon component which accepts an svg string and renders it. - -## Props - - - - - Angular UI Kit dyte-icon - diff --git a/docs/angular-ui-kit/components/dyte-idle-screen.mdx b/docs/angular-ui-kit/components/dyte-idle-screen.mdx deleted file mode 100644 index 125b4913d5..0000000000 --- a/docs/angular-ui-kit/components/dyte-idle-screen.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-idle-screen.svg -description: >- - Learn how to use and customize the dyte-idle-screen component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-idle-screen - -A screen that handles the idle state, -i.e; when you are waiting for data about the meeting, specifically the `meeting` object. - -## Props - - - - - Angular UI Kit dyte-idle-screen - diff --git a/docs/angular-ui-kit/components/dyte-image-message.mdx b/docs/angular-ui-kit/components/dyte-image-message.mdx deleted file mode 100644 index 1ad7eb47af..0000000000 --- a/docs/angular-ui-kit/components/dyte-image-message.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-image-message component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-image-message - -A component which renders an image message from chat. - -## Props - - - - - Angular UI Kit dyte-image-message - diff --git a/docs/angular-ui-kit/components/dyte-image-viewer.mdx b/docs/angular-ui-kit/components/dyte-image-viewer.mdx deleted file mode 100644 index 47ca4f210d..0000000000 --- a/docs/angular-ui-kit/components/dyte-image-viewer.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-image-viewer.svg -description: >- - Learn how to use and customize the dyte-image-viewer component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-image-viewer - -A component which shows an image sent via chat. - -## Props - - - - - Angular UI Kit dyte-image-viewer - diff --git a/docs/angular-ui-kit/components/dyte-leave-button.mdx b/docs/angular-ui-kit/components/dyte-leave-button.mdx deleted file mode 100644 index b8e48af05d..0000000000 --- a/docs/angular-ui-kit/components/dyte-leave-button.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-leave-button component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-leave-button - -A button which toggles visilibility of the leave confirmation dialog. - -## Props - - - - - Angular UI Kit dyte-leave-button - diff --git a/docs/angular-ui-kit/components/dyte-leave-meeting.mdx b/docs/angular-ui-kit/components/dyte-leave-meeting.mdx deleted file mode 100644 index 08d12e25f7..0000000000 --- a/docs/angular-ui-kit/components/dyte-leave-meeting.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-leave-meeting.svg -description: >- - Learn how to use and customize the dyte-leave-meeting component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-leave-meeting - -A component which allows you to leave a meeting or -end meeting for all, if you have the permission. - -## Props - - - - - Angular UI Kit dyte-leave-meeting - diff --git a/docs/angular-ui-kit/components/dyte-logo.mdx b/docs/angular-ui-kit/components/dyte-logo.mdx deleted file mode 100644 index 08555f5886..0000000000 --- a/docs/angular-ui-kit/components/dyte-logo.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-logo.svg -description: >- - Learn how to use and customize the dyte-logo component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-logo - -A component which loads the logo from your config, or via the `logo-url` attribute. - -## Props - - - - - Angular UI Kit dyte-logo - diff --git a/docs/angular-ui-kit/components/dyte-meeting-title.mdx b/docs/angular-ui-kit/components/dyte-meeting-title.mdx deleted file mode 100644 index 7bbfe5a978..0000000000 --- a/docs/angular-ui-kit/components/dyte-meeting-title.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-meeting-title.svg -description: >- - Learn how to use and customize the dyte-meeting-title component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-meeting-title - -A component which displays the title of the meeting. - -## Props - - - - - Angular UI Kit dyte-meeting-title - diff --git a/docs/angular-ui-kit/components/dyte-meeting.mdx b/docs/angular-ui-kit/components/dyte-meeting.mdx deleted file mode 100644 index dbc96ea2a8..0000000000 --- a/docs/angular-ui-kit/components/dyte-meeting.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-meeting.svg -description: >- - Learn how to use and customize the dyte-meeting component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-meeting - -A single component which renders an entire meeting UI. - -It loads your preset and renders the UI based on it. -With this component, you don't have to handle all the states, -dialogs and other smaller bits of managing the application. - -## Props - - - - - Angular UI Kit dyte-meeting - diff --git a/docs/angular-ui-kit/components/dyte-menu-item.mdx b/docs/angular-ui-kit/components/dyte-menu-item.mdx deleted file mode 100644 index 8f07e04840..0000000000 --- a/docs/angular-ui-kit/components/dyte-menu-item.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-menu-item component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-menu-item - -A menu item component. - -## Props - - - - - Angular UI Kit dyte-menu-item - diff --git a/docs/angular-ui-kit/components/dyte-menu-list.mdx b/docs/angular-ui-kit/components/dyte-menu-list.mdx deleted file mode 100644 index 0e7f2d2f38..0000000000 --- a/docs/angular-ui-kit/components/dyte-menu-list.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-menu-list component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-menu-list - -A menu list component. - -## Props - - - - - Angular UI Kit dyte-menu-list - diff --git a/docs/angular-ui-kit/components/dyte-menu.mdx b/docs/angular-ui-kit/components/dyte-menu.mdx deleted file mode 100644 index 4a3bd1243e..0000000000 --- a/docs/angular-ui-kit/components/dyte-menu.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-menu.svg -description: >- - Learn how to use and customize the dyte-menu component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-menu - -A menu component. - -## Props - - - - - Angular UI Kit dyte-menu - diff --git a/docs/angular-ui-kit/components/dyte-mic-toggle.mdx b/docs/angular-ui-kit/components/dyte-mic-toggle.mdx deleted file mode 100644 index 9f982c6d8e..0000000000 --- a/docs/angular-ui-kit/components/dyte-mic-toggle.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-mic-toggle component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-mic-toggle - -A button which toggles your microphone. - -## Props - - - - - Angular UI Kit dyte-mic-toggle - diff --git a/docs/angular-ui-kit/components/dyte-mixed-grid.mdx b/docs/angular-ui-kit/components/dyte-mixed-grid.mdx deleted file mode 100644 index b2adb12cf7..0000000000 --- a/docs/angular-ui-kit/components/dyte-mixed-grid.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-mixed-grid.svg -description: >- - Learn how to use and customize the dyte-mixed-grid component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-mixed-grid - -A grid component which handles screenshares, plugins and participants. - -## Props - - - - - Angular UI Kit dyte-mixed-grid - diff --git a/docs/angular-ui-kit/components/dyte-more-toggle.mdx b/docs/angular-ui-kit/components/dyte-more-toggle.mdx deleted file mode 100644 index bbea131ec8..0000000000 --- a/docs/angular-ui-kit/components/dyte-more-toggle.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-more-toggle component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-more-toggle - -A button which toggles visibility of a more menu. - -When clicked it emits a `dyteStateUpdate` event with the data: - -```ts -{ - activeMoreMenu: boolean; -} -``` - -## Props - - - - - Angular UI Kit dyte-more-toggle - diff --git a/docs/angular-ui-kit/components/dyte-name-tag.mdx b/docs/angular-ui-kit/components/dyte-name-tag.mdx deleted file mode 100644 index 52be7f61ca..0000000000 --- a/docs/angular-ui-kit/components/dyte-name-tag.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-name-tag.svg -description: >- - Learn how to use and customize the dyte-name-tag component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-name-tag - -A component which shows a participant's name. - -## Props - - - - - Angular UI Kit dyte-name-tag - diff --git a/docs/angular-ui-kit/components/dyte-network-indicator.mdx b/docs/angular-ui-kit/components/dyte-network-indicator.mdx deleted file mode 100644 index 2c4dd91849..0000000000 --- a/docs/angular-ui-kit/components/dyte-network-indicator.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-network-indicator component in Dyte's React UI - Kit with our detailed documentation. ---- - -# dyte-network-indicator - -A component that indicates poor network connection. - -It listens to the mediaScoreUpdate event of the passed participant to get the score. - -```tsx -(participant as DyteParticipant).addListener( - 'mediaScoreUpdate', - ({ kind, isScreenshare, score, scoreStats }) => { - console.log( - `Score for ${isScreenshare ? 'screen share' : ''} ${kind} was:: ${score}`, - ); - }, -); -``` - -:::note info - -This component will only be visible if the network quality is poor (less than or equal to 3, on a scale of 5, 5 being best). - -::: - -## Props - - - - - React UI Kit dyte-network-indicator - diff --git a/docs/angular-ui-kit/components/dyte-notification.mdx b/docs/angular-ui-kit/components/dyte-notification.mdx deleted file mode 100644 index 064358d577..0000000000 --- a/docs/angular-ui-kit/components/dyte-notification.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-notification.svg -description: >- - Learn how to use and customize the dyte-notification component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-notification - -A component which shows a notification. - -You need to remove the element after you receive the -`dyteNotificationDismiss` event. - -## Props - - - - - Angular UI Kit dyte-notification - diff --git a/docs/angular-ui-kit/components/dyte-notifications.mdx b/docs/angular-ui-kit/components/dyte-notifications.mdx deleted file mode 100644 index ed4b0638e1..0000000000 --- a/docs/angular-ui-kit/components/dyte-notifications.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-notifications component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-notifications - -A component which handles notifications. - -You can configure which notifications you want to see and which ones you want to hear. -There are also certain limits which you can set as well. - -## Props - - - - - Angular UI Kit dyte-notifications - diff --git a/docs/angular-ui-kit/components/dyte-overlay-modal.mdx b/docs/angular-ui-kit/components/dyte-overlay-modal.mdx deleted file mode 100644 index 56e2124a58..0000000000 --- a/docs/angular-ui-kit/components/dyte-overlay-modal.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-overlay-modal component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-overlay-modal - -A confirmation modal. - -## Props - - - - - Angular UI Kit dyte-overlay-modal - diff --git a/docs/angular-ui-kit/components/dyte-participant-count.mdx b/docs/angular-ui-kit/components/dyte-participant-count.mdx deleted file mode 100644 index f3cb8846fa..0000000000 --- a/docs/angular-ui-kit/components/dyte-participant-count.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-participant-count.svg -description: >- - Learn how to use and customize the dyte-participant-count component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-participant-count - -A component which shows count of total joined participants in a meeting. - -## Props - - - - - Angular UI Kit dyte-participant-count - diff --git a/docs/angular-ui-kit/components/dyte-participant-tile.mdx b/docs/angular-ui-kit/components/dyte-participant-tile.mdx deleted file mode 100644 index f5e9330090..0000000000 --- a/docs/angular-ui-kit/components/dyte-participant-tile.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-participant-tile.svg -description: >- - Learn how to use and customize the dyte-participant-tile component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-participant-tile - -A component which plays a participants video and allows for placement -of components like `dyte-name-tag`, `dyte-audio-visualizer` or any other component. - -## Props - - - - - Angular UI Kit dyte-participant-tile - diff --git a/docs/angular-ui-kit/components/dyte-participant.mdx b/docs/angular-ui-kit/components/dyte-participant.mdx deleted file mode 100644 index fdb2c7edcb..0000000000 --- a/docs/angular-ui-kit/components/dyte-participant.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-participant component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-participant - -A participant entry component used inside `dyte-participants` which shows data like: -name, picture and media device status. - -You can perform privileged actions on the participant too. - -## Props - - - - - Angular UI Kit dyte-participant - diff --git a/docs/angular-ui-kit/components/dyte-participants-audio.mdx b/docs/angular-ui-kit/components/dyte-participants-audio.mdx deleted file mode 100644 index 34b191fa77..0000000000 --- a/docs/angular-ui-kit/components/dyte-participants-audio.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-participants-audio.svg -description: >- - Learn how to use and customize the dyte-participants-audio component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-participants-audio - -A component which plays all the audio from participants and screenshares. - -## Props - - - - - Angular UI Kit dyte-participants-audio - diff --git a/docs/angular-ui-kit/components/dyte-participants-stage-list.mdx b/docs/angular-ui-kit/components/dyte-participants-stage-list.mdx deleted file mode 100644 index cc071b0a1c..0000000000 --- a/docs/angular-ui-kit/components/dyte-participants-stage-list.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-participants-stage-list component in - Dyte's Angular UI Kit with our detailed documentation. ---- - -# dyte-participants-stage-list - -A component which lists all participants, with ability to -run privileged actions on each participant according to your permissions. - -## Props - - - - - Angular UI Kit dyte-participants-stage-list - diff --git a/docs/angular-ui-kit/components/dyte-participants-toggle.mdx b/docs/angular-ui-kit/components/dyte-participants-toggle.mdx deleted file mode 100644 index 2d3e7ad0b1..0000000000 --- a/docs/angular-ui-kit/components/dyte-participants-toggle.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-participants-toggle component in - Dyte's Angular UI Kit with our detailed documentation. ---- - -# dyte-participants-toggle - -A button which toggles visibility of participants. - -When clicked it emits a `dyteStateUpdate` event with the data: - -```ts -{ - activeSidebar: boolean; - sidebar: 'participants' | 'none'; -} -``` - -## Props - - - - - Angular UI Kit dyte-participants-toggle - diff --git a/docs/angular-ui-kit/components/dyte-participants.mdx b/docs/angular-ui-kit/components/dyte-participants.mdx deleted file mode 100644 index 38f0fc289e..0000000000 --- a/docs/angular-ui-kit/components/dyte-participants.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-participants.svg -description: >- - Learn how to use and customize the dyte-participants component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-participants - -A component which lists all participants, with ability to -run privileged actions on each participant according to your permissions. - -## Props - - - - - Angular UI Kit dyte-participants - diff --git a/docs/angular-ui-kit/components/dyte-permissions-message.mdx b/docs/angular-ui-kit/components/dyte-permissions-message.mdx deleted file mode 100644 index dd5ed7f511..0000000000 --- a/docs/angular-ui-kit/components/dyte-permissions-message.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-permissions-message component in - Dyte's Angular UI Kit with our detailed documentation. ---- - -# dyte-permissions-message - -A component which shows permission related troubleshooting -information. - -## Props - - - - - Angular UI Kit dyte-permissions-message - diff --git a/docs/angular-ui-kit/components/dyte-plugin-main.mdx b/docs/angular-ui-kit/components/dyte-plugin-main.mdx deleted file mode 100644 index 4647207242..0000000000 --- a/docs/angular-ui-kit/components/dyte-plugin-main.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-plugin-main.svg -description: >- - Learn how to use and customize the dyte-plugin-main component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-plugin-main - -A component which loads a plugin. - -## Props - - - - - Angular UI Kit dyte-plugin-main - diff --git a/docs/angular-ui-kit/components/dyte-plugins-toggle.mdx b/docs/angular-ui-kit/components/dyte-plugins-toggle.mdx deleted file mode 100644 index 2c4d5d67a1..0000000000 --- a/docs/angular-ui-kit/components/dyte-plugins-toggle.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-plugins-toggle component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-plugins-toggle - -A button which toggles visibility of plugins. - -When clicked it emits a `dyteStateUpdate` event with the data: - -```ts -{ - activeSidebar: boolean; - sidebar: 'plugins' | 'none'; -} -``` - -## Props - - - - - Angular UI Kit dyte-plugins-toggle - diff --git a/docs/angular-ui-kit/components/dyte-plugins.mdx b/docs/angular-ui-kit/components/dyte-plugins.mdx deleted file mode 100644 index 5cc225dd26..0000000000 --- a/docs/angular-ui-kit/components/dyte-plugins.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-plugins.svg -description: >- - Learn how to use and customize the dyte-plugins component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-plugins - -A component which lists all available plugins from their preset, -and ability to enable or disable plugins. - -## Props - - - - - Angular UI Kit dyte-plugins - diff --git a/docs/angular-ui-kit/components/dyte-poll-form.mdx b/docs/angular-ui-kit/components/dyte-poll-form.mdx deleted file mode 100644 index e74b6a2403..0000000000 --- a/docs/angular-ui-kit/components/dyte-poll-form.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-poll-form component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-poll-form - -A component that lets you create a poll. - -## Props - - - - - Angular UI Kit dyte-poll-form - diff --git a/docs/angular-ui-kit/components/dyte-poll.mdx b/docs/angular-ui-kit/components/dyte-poll.mdx deleted file mode 100644 index abdb6629d7..0000000000 --- a/docs/angular-ui-kit/components/dyte-poll.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-poll component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-poll - -A poll component. - -Shows a poll where a user can vote. - -## Props - - - - - Angular UI Kit dyte-poll - diff --git a/docs/angular-ui-kit/components/dyte-polls-toggle.mdx b/docs/angular-ui-kit/components/dyte-polls-toggle.mdx deleted file mode 100644 index a0cf099d9e..0000000000 --- a/docs/angular-ui-kit/components/dyte-polls-toggle.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-polls-toggle component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-polls-toggle - -A button which toggles visibility of polls. - -You need to pass the `meeting` object to it to see the unread polls count badge. - -When clicked it emits a `dyteStateUpdate` event with the data: - -```ts -{ - activeSidebar: boolean; - sidebar: 'polls' | 'none'; -} -``` - -## Props - - - - - Angular UI Kit dyte-polls-toggle - diff --git a/docs/angular-ui-kit/components/dyte-polls.mdx b/docs/angular-ui-kit/components/dyte-polls.mdx deleted file mode 100644 index cb59680150..0000000000 --- a/docs/angular-ui-kit/components/dyte-polls.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-polls.svg -description: >- - Learn how to use and customize the dyte-polls component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-polls - -A component which lists all available plugins a user can access with -the ability to enable or disable them as per their permissions. - -## Props - - - - - Angular UI Kit dyte-polls - diff --git a/docs/angular-ui-kit/components/dyte-recording-indicator.mdx b/docs/angular-ui-kit/components/dyte-recording-indicator.mdx deleted file mode 100644 index 6f073ff00d..0000000000 --- a/docs/angular-ui-kit/components/dyte-recording-indicator.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-recording-indicator.svg -description: >- - Learn how to use and customize the dyte-recording-indicator component in - Dyte's Angular UI Kit with our detailed documentation. ---- - -# dyte-recording-indicator - -A component which indicates the recording status of a meeting. - -It will not render anything if no recording is taking place. - -## Props - - - - - Angular UI Kit dyte-recording-indicator - diff --git a/docs/angular-ui-kit/components/dyte-recording-toggle.mdx b/docs/angular-ui-kit/components/dyte-recording-toggle.mdx deleted file mode 100644 index fa2ecf4401..0000000000 --- a/docs/angular-ui-kit/components/dyte-recording-toggle.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-recording-toggle component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-recording-toggle - -A button which toggles recording state of a meeting. - -Only a privileged user can perform this action, -thus the button will not be visible for participants -who don't have the permission to record a meeting. - -## Props - - - - - Angular UI Kit dyte-recording-toggle - diff --git a/docs/angular-ui-kit/components/dyte-remote-access-manager.mdx b/docs/angular-ui-kit/components/dyte-remote-access-manager.mdx deleted file mode 100644 index 4d415465f1..0000000000 --- a/docs/angular-ui-kit/components/dyte-remote-access-manager.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-remote-access-manager.svg -description: >- - Learn how to use and customize the dyte-remote-access-manager component in - Dyte's Angular UI Kit with our detailed documentation. ---- - -# dyte-remote-access-manager - -A component which lets a user manage remote access requests for their screen. - -## Props - - - - - Angular UI Kit dyte-remote-access-manager - diff --git a/docs/angular-ui-kit/components/dyte-screen-share-toggle.mdx b/docs/angular-ui-kit/components/dyte-screen-share-toggle.mdx deleted file mode 100644 index 95d769ef6e..0000000000 --- a/docs/angular-ui-kit/components/dyte-screen-share-toggle.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-screen-share-toggle component in - Dyte's Angular UI Kit with our detailed documentation. ---- - -# dyte-screen-share-toggle - -A button which toggles your screenshare. - -## Props - - - - - Angular UI Kit dyte-screen-share-toggle - diff --git a/docs/angular-ui-kit/components/dyte-screenshare-view.mdx b/docs/angular-ui-kit/components/dyte-screenshare-view.mdx deleted file mode 100644 index af56d2baae..0000000000 --- a/docs/angular-ui-kit/components/dyte-screenshare-view.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-screenshare-view.svg -description: >- - Learn how to use and customize the dyte-screenshare-view component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-screenshare-view - -A component which plays a participant's screenshared video. - -It also allows for placement of other components similar to `dyte-participant-tile`. - -This component will not render anything if the participant hasn't start screensharing. - -## Props - - - - - Angular UI Kit dyte-screenshare-view - diff --git a/docs/angular-ui-kit/components/dyte-settings-audio.mdx b/docs/angular-ui-kit/components/dyte-settings-audio.mdx deleted file mode 100644 index 9ee2992694..0000000000 --- a/docs/angular-ui-kit/components/dyte-settings-audio.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-settings-audio component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-settings-audio - -A component which lets to manage your audio devices and audio preferences. - -Emits `dyteStateUpdate` event with data for muting notification sounds: - -```ts -{ - prefs: { - muteNotificationSounds: boolean; - } -} -``` - -## Props - - - - - Angular UI Kit dyte-settings-audio - diff --git a/docs/angular-ui-kit/components/dyte-settings-toggle.mdx b/docs/angular-ui-kit/components/dyte-settings-toggle.mdx deleted file mode 100644 index 3df9afcd2d..0000000000 --- a/docs/angular-ui-kit/components/dyte-settings-toggle.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-settings-toggle component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-settings-toggle - -A button which toggles visibility of chat. - -When clicked it emits a `dyteStateUpdate` event with the data: - -```ts -{ - activeSettings: boolean; -} -``` - -## Props - - - - - Angular UI Kit dyte-settings-toggle - diff --git a/docs/angular-ui-kit/components/dyte-settings-video.mdx b/docs/angular-ui-kit/components/dyte-settings-video.mdx deleted file mode 100644 index cad9e26670..0000000000 --- a/docs/angular-ui-kit/components/dyte-settings-video.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-settings-video component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-settings-video - -A component which lets to manage your camera devices and your video preferences. - -Emits `dyteStateUpdate` event with data for toggling mirroring of self video: - -```ts -{ - prefs: { - mirrorVideo: boolean; - } -} -``` - -## Props - - - - - Angular UI Kit dyte-settings-video - diff --git a/docs/angular-ui-kit/components/dyte-settings.mdx b/docs/angular-ui-kit/components/dyte-settings.mdx deleted file mode 100644 index e43676f803..0000000000 --- a/docs/angular-ui-kit/components/dyte-settings.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-settings.svg -description: >- - Learn how to use and customize the dyte-settings component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-settings - -A settings component to see and change your audio/video devices -as well as see your connection quality. - -## Props - - - - - Angular UI Kit dyte-settings - diff --git a/docs/angular-ui-kit/components/dyte-setup-screen.mdx b/docs/angular-ui-kit/components/dyte-setup-screen.mdx deleted file mode 100644 index da850d69e6..0000000000 --- a/docs/angular-ui-kit/components/dyte-setup-screen.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-setup-screen.svg -description: >- - Learn how to use and customize the dyte-setup-screen component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-setup-screen - -A screen shown before joining the meeting, where you can edit your display name, -and media settings. - -## Props - - - - - Angular UI Kit dyte-setup-screen - diff --git a/docs/angular-ui-kit/components/dyte-sidebar.mdx b/docs/angular-ui-kit/components/dyte-sidebar.mdx deleted file mode 100644 index 6c2d35f61a..0000000000 --- a/docs/angular-ui-kit/components/dyte-sidebar.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-sidebar.svg -description: >- - Learn how to use and customize the dyte-sidebar component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-sidebar - -A component which handles the sidebar and -you can customize which sections you want, and which section you want as the default. - -## Props - - - - - Angular UI Kit dyte-sidebar - diff --git a/docs/angular-ui-kit/components/dyte-simple-grid.mdx b/docs/angular-ui-kit/components/dyte-simple-grid.mdx deleted file mode 100644 index 2b317cc8f4..0000000000 --- a/docs/angular-ui-kit/components/dyte-simple-grid.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-simple-grid.svg -description: >- - Learn how to use and customize the dyte-simple-grid component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-simple-grid - -A grid component which renders only the participants in a simple grid. - -## Props - - - - - Angular UI Kit dyte-simple-grid - diff --git a/docs/angular-ui-kit/components/dyte-spinner.mdx b/docs/angular-ui-kit/components/dyte-spinner.mdx deleted file mode 100644 index b1b2c93094..0000000000 --- a/docs/angular-ui-kit/components/dyte-spinner.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-spinner.svg -description: >- - Learn how to use and customize the dyte-spinner component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-spinner - -A component which shows an animating spinner. - -## Props - - - - - Angular UI Kit dyte-spinner - diff --git a/docs/angular-ui-kit/components/dyte-spotlight-grid.mdx b/docs/angular-ui-kit/components/dyte-spotlight-grid.mdx deleted file mode 100644 index e248b11169..0000000000 --- a/docs/angular-ui-kit/components/dyte-spotlight-grid.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-spotlight-grid.svg -description: >- - Learn how to use and customize the dyte-spotlight-grid component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-spotlight-grid - -A grid component that renders two lists of participants: `pinnedParticipants` and `participants`. - -You can customize the layout to a `column` view, by default is is `row`. - -- Participants from `pinnedParticipants[]` are rendered inside a larger grid. -- Participants from `participants[]` array are rendered in a smaller grid. - -## Props - - - - - Angular UI Kit dyte-spotlight-grid - diff --git a/docs/angular-ui-kit/components/dyte-stage.mdx b/docs/angular-ui-kit/components/dyte-stage.mdx deleted file mode 100644 index 33d9966747..0000000000 --- a/docs/angular-ui-kit/components/dyte-stage.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-stage component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-stage - -A component used as a stage that commonly houses -the `grid` and `sidebar` components. - -## Props - - - - - Angular UI Kit dyte-stage - diff --git a/docs/angular-ui-kit/components/dyte-switch.mdx b/docs/angular-ui-kit/components/dyte-switch.mdx deleted file mode 100644 index 5fa5c5e691..0000000000 --- a/docs/angular-ui-kit/components/dyte-switch.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-switch.svg -description: >- - Learn how to use and customize the dyte-switch component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-switch - -A switch component which follows Dyte's Design System. - -## Props - - - - - Angular UI Kit dyte-switch - diff --git a/docs/angular-ui-kit/components/dyte-text-field.mdx b/docs/angular-ui-kit/components/dyte-text-field.mdx deleted file mode 100644 index 8a3be89ba9..0000000000 --- a/docs/angular-ui-kit/components/dyte-text-field.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-text-field component in Dyte's Angular - UI Kit with our detailed documentation. ---- - -# dyte-text-field - -A text field component. - -## Props - - - - - Angular UI Kit dyte-text-field - diff --git a/docs/angular-ui-kit/components/dyte-text-message.mdx b/docs/angular-ui-kit/components/dyte-text-message.mdx deleted file mode 100644 index 4b6e5484ee..0000000000 --- a/docs/angular-ui-kit/components/dyte-text-message.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-text-message component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-text-message - -A component which renders a text message from chat. - -## Props - - - - - Angular UI Kit dyte-text-message - diff --git a/docs/angular-ui-kit/components/dyte-tooltip.mdx b/docs/angular-ui-kit/components/dyte-tooltip.mdx deleted file mode 100644 index 99d34fd2bb..0000000000 --- a/docs/angular-ui-kit/components/dyte-tooltip.mdx +++ /dev/null @@ -1,18 +0,0 @@ ---- -image: /static/ui-kit/1.x.x/components/dyte-tooltip.svg -description: >- - Learn how to use and customize the dyte-tooltip component in Dyte's Angular UI - Kit with our detailed documentation. ---- - -# dyte-tooltip - -Tooltip component which follows Dyte's Design System. - -## Props - - - - - Angular UI Kit dyte-tooltip - diff --git a/docs/angular-ui-kit/components/dyte-viewer-count.mdx b/docs/angular-ui-kit/components/dyte-viewer-count.mdx deleted file mode 100644 index 21639f6007..0000000000 --- a/docs/angular-ui-kit/components/dyte-viewer-count.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: >- - Learn how to use and customize the dyte-viewer-count component in Dyte's - Angular UI Kit with our detailed documentation. ---- - -# dyte-viewer-count - -A component which shows count of total joined participants in a meeting. - -## Props - - - - - Angular UI Kit dyte-viewer-count - diff --git a/docs/angular-ui-kit/components/gallery.mdx b/docs/angular-ui-kit/components/gallery.mdx deleted file mode 100644 index e32c86b88b..0000000000 --- a/docs/angular-ui-kit/components/gallery.mdx +++ /dev/null @@ -1,74 +0,0 @@ ---- -sidebar_position: 1 -slug: /components -description: >- - Learn how to use and customize the Gallery component in Dyte's Angular UI Kit - with our detailed documentation. ---- - -# Gallery - - - - - - - - - - - Angular UI Kit Gallery - diff --git a/docs/angular-ui-kit/customizations/_category_.json b/docs/angular-ui-kit/customizations/_category_.json deleted file mode 100644 index a827607d55..0000000000 --- a/docs/angular-ui-kit/customizations/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 6, - "label": "Customizations", - "collapsible": true -} diff --git a/docs/angular-ui-kit/customizations/custom-iconpack.mdx b/docs/angular-ui-kit/customizations/custom-iconpack.mdx deleted file mode 100644 index d9f423e0ac..0000000000 --- a/docs/angular-ui-kit/customizations/custom-iconpack.mdx +++ /dev/null @@ -1,156 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Customize Meeting Icons - -Dyte's UI Kit provides all the necessary UI components to allow complete customization of all its UI Kit components. You can customize your meeting icons such as chat, clock, leave meeting, mic on and off, and more. - -Customizing the meeting icons involve the following steps: - -1. Integrate Dyte's web SDK into your web application -2. Customize the default icon pack - -## Step 1: Integrate Dyte's web SDK into your web application - -
- - To get started with customizing the icons for your meetings, you need to first integrate Dyte's Web SDK into your web application. - - 1. Install the package using npm or Yarn. - -```bash npm2yarn -npm install @dytesdk/angular-ui-kit @dytesdk/web-core -``` - -2. Create a meeting room using the [Create Meeting API](/api#/operations/create_meeting). -3. Generate an `authToken` using the [Add Participant API](/api#/operations/add_participant). An `authToken` is a unique token that is used to identify a user in the meeting. -4. Initialize the Dyte client using the `DyteClient.init({ authToken })`. It returns the meeting object. -5. Pass the meeting object to the UI Kit. - -The `dyte-meeting` component generates the default UI experience. Read more about how to customize the UI [here](/angular-ui-kit/basics/components-basics). - -```ts -class AppComponent { - title = 'MyProject'; - @ViewChild('myid') meetingComponent: DyteMeeting; - dyteMeeting: DyteClient; - - async ngAfterViewInit() { - const meeting = await DyteClient.init({ - authToken: '', - }); - meeting.join(); - this.dyteMeeting = meeting; - if (this.meetingComponent) this.meetingComponent.meeting = meeting; - } -} -``` - -
- -## Step 2: Customize default icon pack - -Now that you've integrated Dyte SDK into your application successfully, let's quickly understand how you can customize the icon set for your application. - -Dyte's default icon set is available at [icons.dyte.io](https://icons.dyte.io/). You can modify and generate your custom icon set from here. - -In order to replace Dyte's default icon set with your own, you can pass the link to your icon set in the `dyte-meeting` component like so. - -```ts -class AppComponent { - title = 'MyProject'; - @ViewChild('myid') meetingComponent: DyteMeeting; - dyteMeeting: DyteClient; - - async ngAfterViewInit() { - const meeting = await DyteClient.init({ - authToken: '', - }); - meeting.join(); - this.dyteMeeting = meeting; - if (!this.meetingComponent) { - throw Error('Component is empty'); - } - this.meetingComponent.meeting = meeting; - - // Pass the icon pack url - this.meetingComponent.iconPackUrl = 'https://example.com/my-icon-pack.json'; - } -} -``` - -## IconPack Reference - -Ƭ **IconPack**: typeof `defaultIconPack` - -Icon Pack object type: - -- Object key denotes name of icon -- Object value stores the SVG string - -### defaultIconPack - -• `Const` **defaultIconPack**: `Object` - -#### Type declaration - -| Name | Type | -| :------------------------- | :------- | -| `attach` | `string` | -| `call_end` | `string` | -| `chat` | `string` | -| `checkmark` | `string` | -| `chevron_down` | `string` | -| `chevron_left` | `string` | -| `chevron_right` | `string` | -| `chevron_up` | `string` | -| `clock` | `string` | -| `copy` | `string` | -| `disconnected` | `string` | -| `dismiss` | `string` | -| `download` | `string` | -| `emoji_multiple` | `string` | -| `full_screen_maximize` | `string` | -| `full_screen_minimize` | `string` | -| `image` | `string` | -| `image_off` | `string` | -| `join_stage` | `string` | -| `leave_stage` | `string` | -| `mic_off` | `string` | -| `mic_on` | `string` | -| `more_vertical` | `string` | -| `participants` | `string` | -| `people` | `string` | -| `pin` | `string` | -| `pin_off` | `string` | -| `poll` | `string` | -| `recording` | `string` | -| `rocket` | `string` | -| `search` | `string` | -| `send` | `string` | -| `settings` | `string` | -| `share` | `string` | -| `share_screen_person` | `string` | -| `share_screen_start` | `string` | -| `share_screen_stop` | `string` | -| `speaker` | `string` | -| `spinner` | `string` | -| `spotlight` | `string` | -| `stop_recording` | `string` | -| `subtract` | `string` | -| `vertical_scroll` | `string` | -| `vertical_scroll_disabled` | `string` | -| `video_off` | `string` | -| `video_on` | `string` | -| `wand` | `string` | -| `warning` | `string` | -| `wifi` | `string` | - - - Angular UI Kit Customize Meeting Icons - - diff --git a/docs/angular-ui-kit/customizations/custom-locale.mdx b/docs/angular-ui-kit/customizations/custom-locale.mdx deleted file mode 100644 index 49f0e9550f..0000000000 --- a/docs/angular-ui-kit/customizations/custom-locale.mdx +++ /dev/null @@ -1,103 +0,0 @@ ---- -sidebar_position: 6 -description: >- - Learn how to customize the locale settings in Dyte's Angular UI Kit with our - comprehensive documentation. ---- - -# Customize Meeting Locale - -Dyte's UI Kit allows you to customize all the text within the video call interface. You can personalize the text to align with your specific locale needs. - -Customizing the locale involve the following steps: - -1. Integrate Dyte's web SDK into your web application -2. Customize the default language pack - -## Step 1: Integrate Dyte's web SDK into your web application - -
- - To get started with customizing the icons for your meetings, you need to first integrate Dyte's Web SDK into your web application. - - 1. Install the package using npm or Yarn. - -```bash npm2yarn -npm install @dytesdk/angular-ui-kit @dytesdk/web-core -``` - -2. Create a meeting room using the [Create Meeting API](/api#/operations/create_meeting). -3. Generate an `authToken` using the [Add Participant API](/api#/operations/add_participant). An `authToken` is a unique token that is used to identify a user in the meeting. -4. Initialize the Dyte client using the `DyteClient.init({ authToken })`. It returns the meeting object. -5. Pass the meeting object to the UI Kit. - -The `dyte-meeting` component generates the default UI experience. Read more about how to customize the UI [here](/angular-ui-kit/basics/components-basics). - -```ts -class AppComponent { - title = 'MyProject'; - @ViewChild('myid') meetingComponent: DyteMeeting; - dyteMeeting: DyteClient; - - async ngAfterViewInit() { - const meeting = await DyteClient.init({ - authToken: '', - }); - meeting.join(); - this.dyteMeeting = meeting; - if (this.meetingComponent) this.meetingComponent.meeting = meeting; - } -} -``` - -
- -## Step 2: Customize the default language pack - -Now that you've integrated Dyte SDK into your application successfully, let's quickly understand how you can customize the language pack for your application. - -Dyte's default language pack can be imported like so. - -```jsx -import { defaultLanguage, useLanguage } from '@dytesdk/angular-ui-kit'; -``` - -In order to replace Dyte's default locale set with your own, you can pass your own locale to the `t` prop exposed by the UI components. - -```jsx -// Customise Dyte's default locale object -const myLanguagePack = useLanguage({ - ...defaultLanguage, - mute_all: 'Mute All Users', -}); - -// In your component -class AppComponent { - title = 'MyProject'; - @ViewChild('myid') meetingComponent: DyteMeeting; - dyteMeeting: DyteClient; - - async ngAfterViewInit() { - const meeting = await DyteClient.init({ - authToken: '', - }); - meeting.join(); - this.dyteMeeting = meeting; - if (this.meetingComponent) this.meetingComponent.meeting = meeting; - } -} -``` - -The `useLanguage` function takes in your custom locale object as an argument and generates a function that retrieves the value associated with the provided key. - -import DefaultLanguageI18N from '/docs/partials/_default-language-i18n.mdx'; - - - - - Angular UI Kit Customize Meeting Locale - - diff --git a/docs/angular-ui-kit/design-system.mdx b/docs/angular-ui-kit/design-system.mdx deleted file mode 100644 index 00deeee616..0000000000 --- a/docs/angular-ui-kit/design-system.mdx +++ /dev/null @@ -1,239 +0,0 @@ ---- -sidebar_position: 4 -description: >- - Explore the design system and guidelines for using Dyte's Angular UI Kit in - your applications. ---- - -# Design System - -Read this blog post to know more: -https://dyte.io/blog/new-dyte-video-sdk-design-system/ - -## `provideDyteDesignSystem()` utility - -This is a very handy utility to configure the design system of UI Kit components -programmatically, with very lines of code. - -```html -
- - -``` - -Read on to learn more about each token in detail. - -## Design Tokens - -UI Kit uses [design tokens](https://css-tricks.com/what-are-design-tokens/) for -it's design system. - -Design tokens are the design related values which are used to maintain a design -system, which provides flexibility in customizing the overall design of a system -with values such as: typography, spacing, colors etc. - -These design tokens are stored and shared among components with the help of -[CSS variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties). - -### Typography - -```css ---dyte-font-family: Inter; -``` - -You can tweak the font family used in your UI Kit components easily with this -token. - -You can edit this value in two ways with the provideDyteDesignSystem utility. - -#### Usage - -```js -const designTokens = { - fontFamily: 'Custom Font', - // or - googleFont: 'A Google Font', -}; -``` - -Set either of these values in your design tokens. - -1. With `fontFamily` 🪡 - Use a custom font family, you'll have to load the font - manually. -2. With `googleFont` ✨ - Use a google font, the font is loaded automatically. - -### Colors - -```css ---dyte-colors-brand-500: 33 96 253; ---dyte-colors-background-1000: 8 8 8; -/* ... rest of the shades */ -``` - -CSS Variables are set in the format: `R G B`. - -Here are all the color tokens, along with their default values. - - - - - - - - - - - -#### Usage - -:::info - -Note the exception of `text` and `text-on-brand` colors, you only specify a -single color even though there are the following shades: 1000 - 600. - -This is because the `provideDyteDesignSystem()` utility sets the color you pass -to `text-1000` and calculates lighter shades and sets them as well. - -Only pass objects for `brand` and `background` colors. - -::: - -A set of commonly used `background` shades are available by default with the -`theme` property. - -Theme values are: `light`, `dark`, `darkest`. - -Edit color tokens like this. Only the colors you specify will be set. - -```js -const designTokens = { - theme: 'darkest', - colors: { - brand: { 500: '#0D51FD' }, - background: { 1000: '#080808' }, - text: '#ffffff', - 'text-on-primary': '#ffffff', - 'video-bg': '#181818', - }, -}; -``` - -### Spacing - -```css ---dyte-space-1: 4px; -/* ... rest of the spacing scale */ -``` - -The spacing scale is used for setting width, height, margins, paddings, -positions etc. throughout the components. - -- The default value for the spacing scale base is `4px`. -- Rest of the values are calculated with this base, set to `--dyte-space-1`. -- Current spacing scale ranges from `0` to `96`. - -#### Usage - -Set the base of the spacing scale with `spacingBase` property. - -```js -const designTokens = { - spacingBase: 4, // value in px -}; -``` - -### Border Width & Border Radius - -Border Width and Border Radius properties can also be customized with design -tokens! - -| Token Name | Values | -| :------------- | :---------------------------------------------- | -| `borderWidth` | `none`, `thin`, `fat` | -| `borderRadius` | `sharp`, `rounded`, `extra-rounded`, `circular` | - -#### Usage - -```js -const designTokens = { - borderWidth: 'thin', - borderRadius: 'rounded', -}; -``` - - - Angular UI Kit Design System - - diff --git a/docs/angular-ui-kit/introduction.mdx b/docs/angular-ui-kit/introduction.mdx deleted file mode 100644 index 9b8096f959..0000000000 --- a/docs/angular-ui-kit/introduction.mdx +++ /dev/null @@ -1,33 +0,0 @@ ---- -sidebar_position: 1 -slug: / -image: /static/ui-kit/1.x.x/ui-kit-cover.jpg ---- - -# Introduction - -Dyte's UI Kit is a prebuilt design library of UI components that makes it easy -to integrate video and voice calls into any app or website within minutes. - -## Usage - -The UI Kit is a design library of prebuilt UI components built on top of the -Core SDKs. Core SDK handles all the low-level media and network handling parts -of a meeting and exposes APIs that the UI Kit uses. - -The library uses a layered design structure allowing you to start with a prebuilt component and slowly go down layers and add custom UI incrementally as your needs evolve. - -- **Use prebuilt component**: You can use prebuilt `dyte-meeting` component to - create your meeting quickly. With this component, you don't have to handle all - the states, dialogs, and other aspects of managing the application. The UI kit - also respect your permissions and theming configuration from the preset. - -- **Mix and match**: Use some components from our component library, build some custom components yourself. Read the [basics of our component design](/angular-ui-kit/basics/components-basics) and checkout the [gallery of available components](/angular-ui-kit/components) - - - Angular UI Kit Introduction - - diff --git a/docs/angular-ui-kit/quickstart.mdx b/docs/angular-ui-kit/quickstart.mdx deleted file mode 100644 index bf862995aa..0000000000 --- a/docs/angular-ui-kit/quickstart.mdx +++ /dev/null @@ -1,133 +0,0 @@ ---- -sidebar_position: 3 -description: >- - Get started quickly with Dyte's Angular UI Kit by following our step-by-step - Quickstart guide. ---- - -# Quickstart - -This quickstart shows how to use Dyte's UI Kit prebuilt components to add live -video and audio to your [Angular](https://angular.io/) application with minimal -coding and a variety of meeting UI customization options. - -For getting started quickly, you can use our -[sample code](https://github.com/dyte-io/angular-samples#samples). You can clone -and run a sample application from the -[Angular UI Kit GitHub repository](https://github.com/dyte-io/angular-samples). - -## Before Getting Started - -- Make sure you've read the [Getting Started with Dyte](/getting-started) topic - and completed the following steps: - - - Create a [Dyte Developer Account](https://dev.dyte.io/) - - Create a [Dyte Meeting](/api/?v=v2#/operations/create_meeting) - - [Add Participant](/api/?v=v2#/operations/add_participant) to the meeting - -## Step 1: Install the SDK - -Since the UI Kit is built on top of the Core SDK, you must install the -`web-core` package along with the `angular-ui-kit`. - -The web-core package handles all of the low-level logic required for a meeting -by interacting with our servers. It is used to create a meeting object, which -you need to pass to the UI Kit components. - -You can install the package using npm or Yarn. - -```bash npm2yarn -npm install @dytesdk/angular-ui-kit @dytesdk/web-core -``` - -### Version - -| | | -| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| @dytesdk/angular-ui-kit | [![npm version](https://badge.fury.io/js/@dytesdk%2Fangular-ui-kit.svg)](https://badge.fury.io/js/@dytesdk%2Fangular-ui-kit) | -| @dytesdk/web-core | [![npm version](https://badge.fury.io/js/@dytesdk%2Fweb-core.svg)](https://badge.fury.io/js/@dytesdk%2Fweb-core) | - -## Step 2: Load `DyteComponentsModule` - -Load the `DyteComponentsModule` into your app module. This is typically the -`app.module.ts` file. - -This allows you to use Dyte's UI components in your component HTML files. For -more information on the components, see -[Angular components](https://angular.io/guide/component-overview). - -```ts -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { DyteComponentsModule } from '@dytesdk/angular-ui-kit'; - -import { AppComponent } from './app.component'; - -@NgModule({ - declarations: [AppComponent], - imports: [BrowserModule, DyteComponentsModule], - providers: [], - bootstrap: [AppComponent], -}) -export class AppModule {} -``` - -**(Optional) Step 3: Allow Synthetic Default Imports** - -If you are using TypeScript, set `allowSyntheticDefaultImports` as true in your -`tsconfig.json`. - -```json -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true - } -} -``` - -## Step 4: Add Dyte Meeting to the Template File - -Load the Dyte component to your template file (`component.html`). - -```html - -``` - -## Step 5: Initialize the Dyte Meeting - -1. Get a reference to the meeting component using @ViewChild(). -2. Call the init() method and pass the authToken. - -| | | -| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| `authToken` | After you've created the meeting, add each participant to the meeting using the Add Participant API. The API response contains the authToken. | - -3. Pass the meeting object to the UI Kit component. The meeting object serves as - the link between web-core and UI Kit, allowing them to communicate with one - another. Once the UI Kit has the meeting object, it can join and leave - meetings, and so on. - -```ts -class AppComponent { - title = 'MyProject'; - @ViewChild('myid') meetingComponent: DyteMeeting; - dyteMeeting: DyteClient; - - async ngAfterViewInit() { - const meeting = await DyteClient.init({ - authToken: '', - }); - meeting.join(); - this.dyteMeeting = meeting; - if (this.meetingComponent) this.meetingComponent.meeting = meeting; - } -} -``` - - - Angular UI Kit Quickstart - - diff --git a/docs/angular-ui-kit/reference/classes/DyteNotificationsAudio.md b/docs/angular-ui-kit/reference/classes/DyteNotificationsAudio.md deleted file mode 100644 index 04a7b1ac62..0000000000 --- a/docs/angular-ui-kit/reference/classes/DyteNotificationsAudio.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -id: DyteNotificationsAudio -title: 'Class: DyteNotificationsAudio' -custom_edit_url: null ---- - -Handles notification sounds in a meeting - -## Constructors - -### constructor - -• **new DyteNotificationsAudio**() - -## Properties - -### audio - -• `Private` **audio**: `any` - -___ - -### playing - -• `Private` **playing**: `any` - -## Methods - -### play - -▸ **play**(`sound`, `duration?`): `void` - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `sound` | ``"joined"`` \| ``"left"`` \| ``"message"`` | -| `duration?` | `number` | - -#### Returns - -`void` - -___ - -### setDevice - -▸ **setDevice**(`id`): `Promise`\<`void`\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `id` | `string` | - -#### Returns - -`Promise`\<`void`\> - - - Angular UI Kit Class: DyteNotificationsAudio - - diff --git a/docs/angular-ui-kit/reference/interfaces/Notification.md b/docs/angular-ui-kit/reference/interfaces/Notification.md deleted file mode 100644 index 807069fd5c..0000000000 --- a/docs/angular-ui-kit/reference/interfaces/Notification.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -id: Notification -title: 'Interface: Notification' -custom_edit_url: null ---- - -Notification object type, which is used in ``. - -## Properties - -### button - -• `Optional` **button**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `onClick` | () => `void` | -| `text` | `string` | -| `variant?` | `ButtonVariant` | - -___ - -### duration - -• `Optional` **duration**: `number` - -Duration in milliseconds, don't pass this if you want a stagnant notification - -___ - -### icon - -• `Optional` **icon**: `string` - -___ - -### id - -• **id**: `string` - -___ - -### image - -• `Optional` **image**: `string` - -___ - -### message - -• **message**: `string` - - - - Angular UI Kit Interface: Notification - - diff --git a/docs/angular-ui-kit/reference/interfaces/PollObject.md b/docs/angular-ui-kit/reference/interfaces/PollObject.md deleted file mode 100644 index 473db8389f..0000000000 --- a/docs/angular-ui-kit/reference/interfaces/PollObject.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -id: PollObject -title: 'Interface: PollObject' -custom_edit_url: null ---- - -## Properties - -### anonymous - -• **anonymous**: `boolean` - -___ - -### hideVotes - -• **hideVotes**: `boolean` - -___ - -### options - -• **options**: `string`[] - -___ - -### question - -• **question**: `string` - - - - Angular UI Kit Interface: PollObject - - diff --git a/docs/angular-ui-kit/reference/interfaces/States.md b/docs/angular-ui-kit/reference/interfaces/States.md deleted file mode 100644 index 684fc55dfe..0000000000 --- a/docs/angular-ui-kit/reference/interfaces/States.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -id: States -title: 'Interface: States' -custom_edit_url: null ---- - -Global States object which are shared among components - -## Indexable - -▪ [state: `string`]: `any` - -## Properties - -### activeJoinStage - -• `Optional` **activeJoinStage**: `boolean` - -___ - -### activeLeaveConfirmation - -• `Optional` **activeLeaveConfirmation**: `boolean` - -___ - -### activeMoreMenu - -• `Optional` **activeMoreMenu**: `boolean` - -___ - -### activePermissionsMessage - -• `Optional` **activePermissionsMessage**: `boolean` - -___ - -### activePlugin - -• `Optional` **activePlugin**: `boolean` - -___ - -### activeRemoteAccessManager - -• `Optional` **activeRemoteAccessManager**: `boolean` - -___ - -### activeScreenShare - -• `Optional` **activeScreenShare**: `boolean` - -___ - -### activeSettings - -• `Optional` **activeSettings**: `boolean` - -___ - -### activeSidebar - -• `Optional` **activeSidebar**: `boolean` - -___ - -### activeSpotlight - -• `Optional` **activeSpotlight**: `boolean` - -___ - -### image - -• `Optional` **image**: `ImageMessage` - -___ - -### maxPeers - -• `Optional` **maxPeers**: `number` - -___ - -### meeting - -• `Optional` **meeting**: ``"idle"`` \| ``"setup"`` \| ``"joined"`` \| ``"ended"`` \| ``"waiting"`` - -___ - -### page - -• `Optional` **page**: `number` - -___ - -### prefs - -• `Optional` **prefs**: [`UserPreferences`](UserPreferences.md) - -___ - -### roomLeftState - -• `Optional` **roomLeftState**: `RoomLeftState` - -___ - -### sidebar - -• `Optional` **sidebar**: ``"chat"`` \| ``"polls"`` \| ``"participants"`` \| ``"plugins"`` \| ``"none"`` - - - - Angular UI Kit Interface: States - - diff --git a/docs/angular-ui-kit/reference/interfaces/UIConfig.md b/docs/angular-ui-kit/reference/interfaces/UIConfig.md deleted file mode 100644 index c988238842..0000000000 --- a/docs/angular-ui-kit/reference/interfaces/UIConfig.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -id: UIConfig -title: 'Interface: UIConfig' -custom_edit_url: null ---- - -A UI Config object defines the UI of the meeting - -## Properties - -### config - -• `Optional` **config**: `Config` - -___ - -### designTokens - -• `Optional` **designTokens**: `DesignTokens` - -___ - -### root - -• `Optional` **root**: `UIRoot` - -___ - -### styles - -• `Optional` **styles**: `UIStyles` - - - - Angular UI Kit Interface: UIConfig - - diff --git a/docs/angular-ui-kit/reference/interfaces/UserPreferences.md b/docs/angular-ui-kit/reference/interfaces/UserPreferences.md deleted file mode 100644 index bfd51ad5be..0000000000 --- a/docs/angular-ui-kit/reference/interfaces/UserPreferences.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -id: UserPreferences -title: 'Interface: UserPreferences' -custom_edit_url: null ---- - -User preferences object type which are -shared within the global States object. - -## Properties - -### autoScroll - -• `Optional` **autoScroll**: `boolean` - -___ - -### mirrorVideo - -• `Optional` **mirrorVideo**: `boolean` - -___ - -### muteNotificationSounds - -• `Optional` **muteNotificationSounds**: `boolean` - - - - Angular UI Kit Interface: UserPreferences - - diff --git a/docs/angular-ui-kit/reference/interfaces/_category_.json b/docs/angular-ui-kit/reference/interfaces/_category_.json deleted file mode 100644 index 34cc0b9773..0000000000 --- a/docs/angular-ui-kit/reference/interfaces/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 1, - "label": "Interfaces", - "collapsible": true -} diff --git a/docs/angular-ui-kit/reference/reference.md b/docs/angular-ui-kit/reference/reference.md deleted file mode 100644 index 5583566ce2..0000000000 --- a/docs/angular-ui-kit/reference/reference.md +++ /dev/null @@ -1,291 +0,0 @@ ---- -id: reference -title: Reference -custom_edit_url: null -sidebar_class_name: hideReferenceSidebarLink ---- - -## Interfaces - -- [Notification](interfaces/Notification.md) -- [PollObject](interfaces/PollObject.md) -- [States](interfaces/States.md) -- [UIConfig](interfaces/UIConfig.md) -- [UserPreferences](interfaces/UserPreferences.md) - -## Type Aliases - -### DyteI18n - -Ƭ **DyteI18n**: (`key`: keyof [`LangDict`](reference.md#langdict) \| `string` & {}) => `string` - -#### Type declaration - -▸ (`key`): `string` - -i18n helper method type - -##### Parameters - -| Name | Type | -| :------ | :------ | -| `key` | keyof [`LangDict`](reference.md#langdict) \| `string` & {} | - -##### Returns - -`string` - -___ - -### IconPack - -Ƭ **IconPack**: typeof [`defaultIconPack`](reference.md#defaulticonpack) - -Icon Pack object type. -- Oject key denotes name of icon -- Object value stores the SVG string - -___ - -### LangDict - -Ƭ **LangDict**: typeof [`defaultLanguage`](reference.md#defaultlanguage) - -Language dictionary object type - -___ - -### Size - -Ƭ **Size**: ``"sm"`` \| ``"md"`` \| ``"lg"`` \| ``"xl"`` - -Screen breakpoints - -## Variables - -### defaultConfig - -• `Const` **defaultConfig**: [`UIConfig`](interfaces/UIConfig.md) - -The default UI Config - -___ - -### defaultIconPack - -• `Const` **defaultIconPack**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `attach` | `string` | -| `call_end` | `string` | -| `chat` | `string` | -| `checkmark` | `string` | -| `chevron_down` | `string` | -| `chevron_left` | `string` | -| `chevron_right` | `string` | -| `chevron_up` | `string` | -| `clock` | `string` | -| `copy` | `string` | -| `disconnected` | `string` | -| `dismiss` | `string` | -| `download` | `string` | -| `emoji_multiple` | `string` | -| `full_screen_maximize` | `string` | -| `full_screen_minimize` | `string` | -| `image` | `string` | -| `image_off` | `string` | -| `join_stage` | `string` | -| `leave_stage` | `string` | -| `mic_off` | `string` | -| `mic_on` | `string` | -| `more_vertical` | `string` | -| `participants` | `string` | -| `people` | `string` | -| `pin` | `string` | -| `pin_off` | `string` | -| `poll` | `string` | -| `recording` | `string` | -| `rocket` | `string` | -| `search` | `string` | -| `send` | `string` | -| `settings` | `string` | -| `share` | `string` | -| `share_screen_person` | `string` | -| `share_screen_start` | `string` | -| `share_screen_stop` | `string` | -| `speaker` | `string` | -| `spinner` | `string` | -| `spotlight` | `string` | -| `stop_recording` | `string` | -| `subtract` | `string` | -| `vertical_scroll` | `string` | -| `vertical_scroll_disabled` | `string` | -| `video_off` | `string` | -| `video_on` | `string` | -| `wand` | `string` | -| `warning` | `string` | -| `wifi` | `string` | - -___ - -### defaultLanguage - -• `Const` **defaultLanguage**: `Object` - -Default language dictionary - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `audio` | `string` | -| `cancel` | `string` | -| `chat` | `string` | -| `connection` | `string` | -| `dismiss` | `string` | -| `end_meeting_for_all` | `string` | -| `full_screen` | `string` | -| `full_screen.exit` | `string` | -| `leave` | `string` | -| `leave_confirmation` | `string` | -| `left_meeting` | `string` | -| `mic_off` | `string` | -| `mic_on` | `string` | -| `page` | `string` | -| `participants` | `string` | -| `perm.sys_denied.message` | `string` | -| `perm_browser_denied` | `string` | -| `perm_denied_text` | `string` | -| `perm_denied_title` | `string` | -| `perm_sys_denied` | `string` | -| `plugins` | `string` | -| `polls` | `string` | -| `settings` | `string` | -| `setup_screen.join_in_as` | `string` | -| `setup_screen.joining_as` | `string` | -| `setup_screen.your_name` | `string` | -| `share_screen_start` | `string` | -| `share_screen_stop` | `string` | -| `stage.add_to_stage` | `string` | -| `stage.empty_host` | `string` | -| `stage.empty_host_summary` | `string` | -| `stage.empty_viewer` | `string` | -| `stage.join_cancel` | `string` | -| `stage.join_confirm` | `string` | -| `stage.join_summary` | `string` | -| `stage.join_title` | `string` | -| `stage.remove_from_stage` | `string` | -| `stage_request.accept_all` | `string` | -| `stage_request.accept_request` | `string` | -| `stage_request.approval_pending` | `string` | -| `stage_request.denied` | `string` | -| `stage_request.denied_tip` | `string` | -| `stage_request.deny_request` | `string` | -| `stage_request.header_title` | `string` | -| `stage_request.leave_stage` | `string` | -| `stage_request.leave_tip` | `string` | -| `stage_request.pending_tip` | `string` | -| `stage_request.request` | `string` | -| `stage_request.request_tip` | `string` | -| `video` | `string` | -| `video_off` | `string` | -| `video_on` | `string` | -| `waitlist.accept_all` | `string` | -| `waitlist.accept_request` | `string` | -| `waitlist.body_text` | `string` | -| `waitlist.deny_request` | `string` | -| `waitlist.header_title` | `string` | - -## Functions - -### extendConfig - -▸ **extendConfig**(`config`, `baseConfig?`): [`UIConfig`](interfaces/UIConfig.md) - -Extend the default UI Config with your own - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `config` | [`UIConfig`](interfaces/UIConfig.md) | Your extended UI Config | -| `baseConfig?` | [`UIConfig`](interfaces/UIConfig.md) | - | - -#### Returns - -[`UIConfig`](interfaces/UIConfig.md) - -New extended UI Config object - -___ - -### generateConfig - -▸ **generateConfig**(`oldConfig`, `toExtend?`, `options?`): `Object` - -Generates a config with older theme value. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `oldConfig` | `DyteThemePresetV1` | V1 Theme object | -| `toExtend?` | [`UIConfig`](interfaces/UIConfig.md) | UI Config object to extend the generated config | -| `options?` | `ConfigOptions` | Options for toggling components | - -#### Returns - -`Object` - -| Name | Type | -| :------ | :------ | -| `config` | [`UIConfig`](interfaces/UIConfig.md) | -| `data` | `ConfigData` | - -___ - -### provideDyteDesignSystem - -▸ **provideDyteDesignSystem**(`el`, `tokens`): `void` - -Provides the design system new tokens to consume values from for styling the Dyte UI Kit's UI. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `el` | `HTMLElement` | The element/node you want to _provide_ Dyte's design system. | -| `tokens` | `DesignTokens` | The design tokens you want to updated. | - -#### Returns - -`void` - -___ - -### sendNotification - -▸ **sendNotification**(`notification`): `boolean` - -Send notification which will be displayed in the `` component. - -#### Parameters - -| Name | Type | Description | -| :------ | :------ | :------ | -| `notification` | [`Notification`](interfaces/Notification.md) | Notification object | - -#### Returns - -`boolean` - -Return value of emitting the event - - - - Angular UI Kit Reference - - diff --git a/docs/angular-ui-kit/release-notes.mdx b/docs/angular-ui-kit/release-notes.mdx deleted file mode 100644 index c0880a7c47..0000000000 --- a/docs/angular-ui-kit/release-notes.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Release Notes -sidebar_position: 101 -sidebar_class_name: releaseSidebarHeading -tags: - - releasenotes -description: '"Stay updated with the latest features' ---- - -import ReleaseNotesGenerator from '@site/src/components/ReleaseNotesGenerator'; - -:::danger - -Dyte SDKs are now in maintenance mode and will not receive any new features or bug fixes. To migrate to Cloudflare RealtimeKit SDKs, see the [migration guide](/guides/realtimekit-migration/sdk-guide?framework=angular). - -::: - -The release notes lists all new features, resolved issues, and known issues of Angular UI Kit in chronological order. - - - - - Angular UI Kit Release Notes - - diff --git a/docs/api-reference/authentication.md b/docs/api-reference/authentication.md new file mode 100644 index 0000000000..5b0a5b142d --- /dev/null +++ b/docs/api-reference/authentication.md @@ -0,0 +1,81 @@ +--- +title: Authentication +sidebar_position: 2 +--- + +# Authentication + +Human users authenticate with JWT access/refresh token pairs; machines authenticate with API keys. Both are presented the same way: `Authorization: Bearer `. + +## Endpoints + +| Method | Path | Description | Auth | +| --- | --- | --- | --- | +| `POST` | `/auth/register` | Create a new Organization + Owner user, returns a token pair | none | +| `POST` | `/auth/login` | Exchange email/password for a token pair | none | +| `POST` | `/auth/refresh` | Exchange a refresh token for a new access token | none | +| `POST` | `/auth/logout` | Revoke the current session | Bearer | +| `POST` | `/auth/logout-all` | Revoke every session for the current user (Deel 21 §42) | Bearer | +| `GET` | `/auth/sessions` | List active sessions (device/IP metadata) | Bearer | +| `DELETE` | `/auth/sessions/:id` | Revoke one session | Bearer | +| `POST` | `/auth/api-clients` | Mint a new `ospi_.` API key | Bearer + `org:manage` | + +## Register + +```http +POST /api/v1/auth/register +Content-Type: application/json + +{ + "organizationName": "Acme Manufacturing", + "email": "owner@acme.example", + "password": "at-least-8-characters", + "firstName": "Ada", + "lastName": "Lovelace" +} +``` + +Creates the Organization, its Owner user (seeded with the `'*'` wildcard permission), and returns a token pair: + +```json +{ + "accessToken": "eyJhbGciOiJIUzI1NiIs...", + "refreshToken": "d1b2c3...", + "expiresIn": 900 +} +``` + +## Login / refresh + +```http +POST /api/v1/auth/login +Content-Type: application/json + +{ "email": "owner@acme.example", "password": "at-least-8-characters" } +``` + +```http +POST /api/v1/auth/refresh +Content-Type: application/json + +{ "refreshToken": "d1b2c3..." } +``` + +Access tokens expire in ≤15 minutes; refresh tokens back a `Session` row with an absolute 7-day cap. Revoking a session (`DELETE /auth/sessions/:id` or `POST /auth/logout[-all]`) blocks future refreshes immediately, but an already-issued access token keeps working for its own remaining TTL — a deliberate, bounded-exposure trade-off, not an oversight. + +## API keys (machine-to-machine) + +```http +POST /api/v1/auth/api-clients +Authorization: Bearer +Content-Type: application/json + +{ + "name": "ERP sync", + "scopes": ["products:write", "inventory:write"] +} +``` + +`scopes` is validated against the real, enforced permission catalogue (see [Roles & Permissions](/guides/roles-and-permissions)) — `'*'` grants full org-wide access, equivalent to the Owner role. Requires `org:manage` on the caller. + +The resulting key is used exactly like a JWT: `Authorization: Bearer ospi_.`. diff --git a/docs/api-reference/categories-and-attributes.md b/docs/api-reference/categories-and-attributes.md new file mode 100644 index 0000000000..96b471862f --- /dev/null +++ b/docs/api-reference/categories-and-attributes.md @@ -0,0 +1,60 @@ +--- +title: Categories & Attributes +sidebar_position: 6 +--- + +# Categories & Attributes + +## Categories + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/categories` | Create a category | `products:write` | +| `GET` | `/categories` | List categories | — | +| `GET` | `/categories/pending` | List `PENDING` global-category proposals | `categories:govern` | +| `POST` | `/categories/:id/approve` | Approve a global-category proposal | `categories:govern` | +| `POST` | `/categories/:id/reject` | Reject a global-category proposal | `categories:govern` | + +```http +POST /api/v1/categories +Authorization: Bearer +Content-Type: application/json + +{ "code": "DRINKWARE", "name": "Drinkware", "scope": "organization" } +``` + +`scope: "organization"` (default) is private to your org and usable immediately. `scope: "global"` creates a **proposal** for the shared cross-org registry, starting `PENDING` — only usable on a product once a `categories:govern` holder approves it. `categories:govern` is cross-organization by design; see [Roles & Permissions](/api-reference/organizations-and-roles#roles--permissions). + +## Category attribute schemas + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/categories/:categoryId/attribute-schema` | Declare an attribute's requirement level for a category | `products:write` | +| `DELETE` | `/categories/:categoryId/attribute-schema/:attributeDefinitionId` | Remove a schema entry | `products:write` | +| `GET` | `/categories/:categoryId/attributes` | Get the resolved effective schema (inherited down the tree, with child overrides) | — | + +A schema entry is `REQUIRED`, `RECOMMENDED`, `OPTIONAL`, or `FORBIDDEN`, and can be conditional on another attribute's value. This effective schema is exactly what `POST /products/:id/validate` scores a product against — see [Products & Variants](/api-reference/products-and-variants#publication-gate). + +## Attribute definitions & values + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/attribute-definitions` | Define a new attribute (datatype, code, unit) | `attributes:write` | +| `GET` | `/attribute-definitions` | List attribute definitions | — | +| `POST` | `/products/:productId/attribute-values` | Set an attribute value on a product | `products:write` | +| `POST` | `/variants/:variantId/attribute-values` | Set an attribute value on a variant | `products:write` | +| `POST` | `/attribute-values/:id/verify` | Mark a value as verified as-is | `products:write` | + +Every `AttributeValue` carries provenance: `source`, `sourceOrganizationId`, `sourceReference`, `confidence`, and a `conflictState` (`UNVERIFIED` / `VERIFIED` / `CONFLICTED`) — [ADR-030](/architecture/adr/adr-030-attribute-value-provenance). A `VERIFIED` (or already-`CONFLICTED`) value rejects a silently differing overwrite with `409` unless the request passes `forceOverride: true`. + +## Classification schemes + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/classification-schemes` | Create a classification scheme | `classification:manage` | +| `GET` | `/classification-schemes` | List schemes | — | +| `POST` | `/classification-schemes/:schemeId/nodes` | Add a node to a scheme | `classification:manage` | +| `GET` | `/classification-schemes/:schemeId/nodes` | List nodes in a scheme | — | +| `POST` | `/classification-assignments` | Assign a classification node to a product | `products:write` | + +This is a separate tree structure from the Category → Attribute Schema linkage above, and is largely independent of it — attribute requirements are attached to `Category`, not to `ClassificationNode` (see [ADR-029](/architecture/adr/adr-029-category-attribute-schema) for why). diff --git a/docs/api-reference/connections-and-sharing.md b/docs/api-reference/connections-and-sharing.md new file mode 100644 index 0000000000..5b8f0a7569 --- /dev/null +++ b/docs/api-reference/connections-and-sharing.md @@ -0,0 +1,66 @@ +--- +title: Connections & Sharing +sidebar_position: 9 +--- + +# Connections & Sharing + +This is the entire access-control model for cross-organization data. A **Connection** is the umbrella relationship between two organizations; a **Sharing Grant** riding on an `ACTIVE` connection scopes exactly what's visible. Read [ADR-010](/architecture/adr/adr-010-sharing-scope-model) and [ADR-022](/architecture/adr/adr-022-rule-based-sharing-scopes) before connecting two real organizations. + +## Connections + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/connections` | Request a connection to another organization | `connections:write` | +| `GET` | `/connections` | List the caller's connections | — | +| `POST` | `/connections/:id/accept` | Accept an incoming request | `connections:write` | +| `POST` | `/connections/:id/reject` | Reject an incoming request | `connections:write` | +| `POST` | `/connections/:id/suspend` | Suspend an active connection | `connections:write` | +| `POST` | `/connections/:id/terminate` | Terminate a connection | `connections:write` | + +Lifecycle: `REQUESTED → ACTIVE` (via accept) or `REQUESTED → REJECTED`, and `ACTIVE → SUSPENDED → ACTIVE` or `→ TERMINATED`. + +## Sharing grants + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/sharing-grants` | Create a grant on an active connection | `sharing:write` | +| `GET` | `/sharing-grants` | List grants | — | +| `DELETE` | `/sharing-grants/:id` | Revoke a grant | `sharing:write` | + +```http +POST /api/v1/sharing-grants +Authorization: Bearer +Content-Type: application/json + +{ + "connectionId": "cnx_...", + "targetType": "ALL_PRODUCTS", + "dataCategories": ["PRODUCT_DATA", "INVENTORY"], + "ruleFilter": { "attributes": [{ "code": "region", "equals": "EU" }] } +} +``` + +`targetType` is `PRODUCT`, `PRODUCT_CATEGORY`, or `ALL_PRODUCTS`. `ruleFilter` ([ADR-022](/architecture/adr/adr-022-rule-based-sharing-scopes)) additionally ANDs an attribute-based rule onto that targeting — e.g. "everything tagged `region=EU`". Rules are a flat AND list only; there is no OR/negation or rule grouping yet. + +`SharingService.hasAccess(...)` is the single enforcement point used by every cross-organization read below. + +## Partner-facing reads + +| Method | Path | Description | +| --- | --- | --- | +| `GET` | `/partner/organizations/:organizationId/products` | Products another organization has shared with you | +| `GET` | `/partner/organizations/:organizationId/products/:productId` | One shared product | +| `GET` | `/partner/organizations/:organizationId/products/:productId/inventory` | Its inventory, filtered through `quantityDisplayMode` | +| `GET` | `/partner/organizations/:organizationId/products/:productId/documents` | Its documents, filtered by document `visibility` | + +## Walkthrough: connect two organizations + +```http +POST /api/v1/connections # as A, targeting B's org ID → REQUESTED +POST /api/v1/connections/{id}/accept # as B → ACTIVE +POST /api/v1/sharing-grants # as A: targetType ALL_PRODUCTS, dataCategories [PRODUCT_DATA, INVENTORY] +GET /api/v1/partner/organizations/{aOrgId}/products # as B — now returns A's products +``` + +To also trade, continue with [Ordering & Commerce](/api-reference/ordering) — an `Offer` requires an active `ORDERING` sharing grant if the seller doesn't own the product. diff --git a/docs/api-reference/digital-product-passport.md b/docs/api-reference/digital-product-passport.md new file mode 100644 index 0000000000..a733e451cc --- /dev/null +++ b/docs/api-reference/digital-product-passport.md @@ -0,0 +1,32 @@ +--- +title: Digital Product Passport +sidebar_position: 12 +--- + +# Digital Product Passport + +:::caution Not a compliance implementation +This is a generic scaffold — a named, versioned list of required attribute codes, composed live from existing Attributes and Documents with no duplicated data storage. It is **not** mapped to actual EU ESPR delegated acts, and legal review of that mapping is explicitly deferred until post-MVP validation. See [ADR-006](/architecture/adr/adr-006-dpp-espr-stance). +::: + +## Endpoints + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/dpp-profiles` | Define a profile (which attribute codes are required) | `dpp:manage` | +| `GET` | `/dpp-profiles` | List profiles | — | +| `POST` | `/dpp-records` | Create a record for a product against a profile | `products:write` | +| `POST` | `/dpp-records/:id/validate` | Check completeness against the profile | `products:write` | +| `POST` | `/dpp-records/:id/publish` | Publish (issues/keeps the public access token) | `products:write` | +| `POST` | `/dpp-records/:id/suspend` | Unpublish | `products:write` | +| `POST` | `/dpp-records/:id/rotate-token` | Rotate the public access token without deleting the record | `products:write` | +| `GET` | `/dpp-records/:id` | Get one record (owner view) | — | +| `GET` | `/dpp/:accessToken` | Public view (unauthenticated) | none | + +## Public access + +`GET /dpp/:accessToken` mirrors "scan a QR code, no login." Access is gated by a dedicated, rotatable 256-bit token — **deliberately not the OSPI code checksum**, which at 3 characters is far too low-entropy to serve as a security barrier ([ADR-013](/architecture/adr/adr-013-dpp-public-access-token)). The database ID is never exposed in the public URL. This endpoint is rate-limited as defense-in-depth on top of the token's entropy. + +```http +GET /dpp/8f3a2c1e9b7d4f6a0e5c3b1a9d7f2e4c6a8b0d2f4e6a8c0b2d4f6a8e0c2b4d6f +``` diff --git a/docs/api-reference/documents.md b/docs/api-reference/documents.md new file mode 100644 index 0000000000..62b65558a8 --- /dev/null +++ b/docs/api-reference/documents.md @@ -0,0 +1,49 @@ +--- +title: Documents +sidebar_position: 7 +--- + +# Documents + +Document metadata — datasheets, certificates, manuals, images — attached to products, with real file storage behind a swappable abstraction ([ADR-017](/architecture/adr/adr-017-document-storage-abstraction)). + +## Endpoints + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/documents` | Create document metadata (reference an already-stored file) | `documents:write` | +| `POST` | `/documents/upload` | Upload file content and create the document in one call | `documents:write` | +| `GET` | `/documents` | List documents, filterable by `?documentType=` | — | +| `GET` | `/documents/:id` | Get one document | — | +| `PATCH` | `/documents/:id` | Metadata-only correction | `documents:write` | +| `GET` | `/documents/:id/download-url` | Resolve a stored document to a fetchable reference | — | + +## Upload + +```http +POST /api/v1/documents/upload +Authorization: Bearer +Content-Type: application/json + +{ + "productId": "prd_...", + "documentType": "DATASHEET", + "fileName": "datasheet-v2.pdf", + "contentBase64": "JVBERi0xLjQK...", + "visibility": "PUBLIC" +} +``` + +Content is currently accepted as base64-in-JSON (no `multipart`/`multer` dependency wired up in this build). Uploads are deduplicated by a real SHA-256 `checksum` — identical bytes reuse the existing `storageRef` instead of being stored twice. Storage is currently a real local-filesystem implementation — durable for a single API process, but not redundant and not shared across multiple processes; swapping in a cloud backend is a provider-binding change, not a rewrite of `DocumentsService` or any controller. + +## Metadata fields + +`documentType`, `lifecycleStatus`, `validFrom`/`validUntil`, `checksum` (SHA-256), `sortOrder`, and `certificateMetadata` ([ADR-034](/architecture/adr/adr-034-document-metadata)). + +## Visibility + +Each document carries a producer-set `visibility`: + +- **`PUBLIC`** — always returned, including through the unauthenticated [OSPI Code Resolver](/api-reference/search#resolver). +- **`RESTRICTED`** — only returned once the caller's organization is the owner or holds an active `CONTENT` sharing grant. +- **`PRIVATE`** — never returned through the resolver or partner-facing reads. diff --git a/docs/api-reference/intro.md b/docs/api-reference/intro.md new file mode 100644 index 0000000000..177fa44428 --- /dev/null +++ b/docs/api-reference/intro.md @@ -0,0 +1,88 @@ +--- +title: API Reference +sidebar_label: Overview +sidebar_position: 1 +slug: / +--- + +# OSPI Platform API + +This is the reference for the real, implemented **OSPI Platform API** ([`ospi-platform`](https://github.com/BrickeVD/ospi-platform)) — a NestJS/PostgreSQL REST API covering identity, organizations, products, categories, documents, inventory, cross-organization sharing, search, ordering and the Digital Product Passport scaffold. + +A running instance also serves this same information as interactive OpenAPI/Swagger UI at `/api/docs` (JSON at `/api/docs-json`). Every endpoint below is also documented as an interactive page — with request/response schemas and a live "Try It" console — under **Endpoints** in the sidebar, generated directly from that same OpenAPI spec (see [Endpoints overview](/api-reference/reference/ospi-platform-api)). + +## Base path + +Every route below is shown relative for brevity. The real path is prefixed with `/api/v1`: + +``` +POST /auth/register → POST /api/v1/auth/register +``` + +The only two exceptions, which stay unprefixed and unversioned: `GET /health` (infra-level monitoring convention) and the Swagger UI/JSON (`/api/docs`, `/api/docs-json`). + +## Authentication + +Every authenticated route accepts a single `Authorization: Bearer ` header, for either: + +- A **JWT access token**, issued by `POST /auth/login` or `POST /auth/register` (short-lived, ≤15 minutes) and renewed via `POST /auth/refresh`. +- An **API key**, `ospi_.`, minted via `POST /auth/api-clients` for machine-to-machine use. + +See the [Authentication guide](/guides/authentication) for the full register → login → refresh flow, and [Roles & Permissions](/guides/roles-and-permissions) for what each permission code gates. + +## Response conventions + +**Errors** are always: + +```json +{ + "error": { + "code": "VALIDATION_ERROR", + "message": "email must be a valid email address", + "requestId": "b6f1c2b0-2f3e-4b9a-9b0e-1a2b3c4d5e6f" + } +} +``` + +Stack traces are never sent to the client — see `GlobalExceptionFilter`. + +**List endpoints** accept standard pagination/filter/sort query parameters and return: + +```json +{ + "data": [ /* ... */ ], + "meta": { "page": 1, "pageSize": 20, "total": 137, "totalPages": 7 } +} +``` + +| Query param | Default | Notes | +| --- | --- | --- | +| `page` | `1` | 1-indexed | +| `pageSize` | `20` | max `100` | +| `sortBy` | — | field name | +| `sortDir` | `asc` | `asc` \| `desc` | + +## Idempotency + +`POST /products`, `POST /products/bulk`, `POST /products/:id/serialized-units/bulk`, `POST /ospi-identities`, `POST /orders`, and `POST /orders/:id/submit` accept an opt-in `Idempotency-Key` header. Replaying the same key on the same endpoint for the same organization/actor returns the original response unchanged, marked `Idempotent-Replay: true`, instead of executing a duplicate write. Keys are scoped per organization/actor/endpoint/key with a 24-hour TTL. There is no distributed lock — two genuinely concurrent requests with the same key can still both execute. + +## Rate limiting + +`POST /auth/login`, `POST /auth/register`, `POST /auth/refresh`, `GET /search/resolve/:code`, and `GET /dpp/:accessToken` are rate-limited. The limiter is in-memory and per-process, not distributed — behind more than one API process the effective limit multiplies by process count. + +## API sections + +| Section | Covers | +| --- | --- | +| [Authentication](/api-reference/authentication) | Register, login, refresh, sessions, API keys | +| [Organizations & Roles](/api-reference/organizations-and-roles) | Organization profile, legal entities, users, custom roles, permission catalogue | +| [Producers & OSPI Codes](/api-reference/producers-and-ospi-codes) | Producer registration, Producer Codes, OSPI Identity issuance & lifecycle | +| [Products & Variants](/api-reference/products-and-variants) | Products, variants, bulk create, publication lifecycle, serialized units, translations, relationships | +| [Categories & Attributes](/api-reference/categories-and-attributes) | Category registry, attribute definitions/values, classification schemes | +| [Documents](/api-reference/documents) | Document upload/metadata, visibility | +| [Inventory](/api-reference/inventory) | Locations, stock, derived availability | +| [Connections & Sharing](/api-reference/connections-and-sharing) | Organization-to-organization connections, sharing grants, partner reads | +| [Search & Discovery](/api-reference/search) | Full-text product search, related products, OSPI code resolver | +| [Ordering & Commerce](/api-reference/ordering) | Offers, orders, order groups/lines | +| [Digital Product Passport](/api-reference/digital-product-passport) | DPP profiles, records, public access | +| [Webhooks](/api-reference/webhooks) | Event subscriptions, delivery log, retries | diff --git a/docs/api-reference/inventory.md b/docs/api-reference/inventory.md new file mode 100644 index 0000000000..6167234c39 --- /dev/null +++ b/docs/api-reference/inventory.md @@ -0,0 +1,42 @@ +--- +title: Inventory +sidebar_position: 8 +--- + +# Inventory + +Owner-scoped locations and stock records ([ADR-009](/architecture/adr/adr-009-inventory-record-shape)). + +## Endpoints + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/locations` | Create a location | `inventory:write` | +| `GET` | `/locations` | List locations | — | +| `GET` | `/locations/:id/inventory` | List inventory records at a location | — | +| `PUT` | `/products/:productId/inventory` | Upsert a product's stock at a location | `inventory:write` | +| `GET` | `/products/:productId/inventory` | List a product's inventory across locations | — | + +## Upsert stock + +```http +PUT /api/v1/products/{productId}/inventory +Authorization: Bearer +Content-Type: application/json + +{ + "locationId": "loc_...", + "quantityOnHand": 480, + "quantityReserved": 12, + "visibility": "PARTNER_ONLY", + "quantityDisplayMode": "EXACT" +} +``` + +## Derived availability + +`availableQuantity` and `availabilityStatus` are **never stored** — they are always computed at read time from the stock quantities, via pure functions shared with the OSPI code engine's testing approach. This means availability is always consistent with the latest stock write, with no separate reconciliation step. + +## Partner visibility + +`InventoryRecord.visibility` and `quantityDisplayMode` control what a connected partner organization sees through `GET /partner/organizations/:orgId/products/:productId/inventory` (see [Connections & Sharing](/api-reference/connections-and-sharing)) — e.g. an owner can expose only an availability status ("In stock" / "Low stock" / "Out of stock") without revealing exact quantities. diff --git a/docs/api-reference/ordering.md b/docs/api-reference/ordering.md new file mode 100644 index 0000000000..3948ed7b74 --- /dev/null +++ b/docs/api-reference/ordering.md @@ -0,0 +1,53 @@ +--- +title: Ordering & Commerce +sidebar_position: 11 +--- + +# Ordering & Commerce + +An **Offer** is a seller's commercial listing for a product — sellable even without owning it, given an active `ORDERING` sharing grant from the owner. An **Order** splits per seller into one **OrderGroup** each, containing **OrderLines** ([ADR-011](/architecture/adr/adr-011-ordering-mvp-simplifications)). + +There is no payment integration, no automatic stock reservation, and no credit-limit/contract-term validation — accepting an order is still a manual seller decision. Offers and Orders are nonetheless real commercial records; get commercial/legal sign-off before connecting real trading partners. + +## Offers + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/offers` | Create an offer | `offers:write` | +| `GET` | `/offers` | List the caller's own offers | — | +| `GET` | `/products/:productId/offers` | List offers for a product | — | +| `DELETE` | `/offers/:id` | Withdraw an offer | `offers:write` | +| `POST` | `/offers/:id/buyer-minimums` | Set a buyer-specific minimum order quantity | `offers:write` | +| `GET` | `/offers/:id/buyer-minimums` | List per-buyer minimum overrides | `offers:write` | +| `DELETE` | `/offers/:id/buyer-minimums/:buyerOrganizationId` | Remove an override | `offers:write` | + +A per-buyer minimum ([ADR-021](/architecture/adr/adr-021-per-buyer-offer-minimum)) replaces the offer's default `minimumQuantity` for that one buyer; `addLine` checks the override before falling back to the default. + +## Orders + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/orders` | Create a draft order | `orders:write` | +| `GET` | `/orders` | List orders | — | +| `GET` | `/orders/:id` | Get one order | — | +| `POST` | `/orders/:id/lines` | Add a line, referencing an offer | `orders:write` | +| `DELETE` | `/orders/:id/lines/:lineId` | Remove a line | `orders:write` | +| `POST` | `/orders/:id/submit` | Submit the draft, creating one `OrderGroup` per seller | `orders:write` | +| `POST` | `/orders/:id/groups/:groupId/accept` | Seller accepts their group | `orders:write` | +| `POST` | `/orders/:id/groups/:groupId/reject` | Seller rejects their group | `orders:write` | +| `PUT` | `/orders/:id/groups/:groupId/status` | Move a group through `PROCESSING → FULFILLED → COMPLETE` | `orders:write` | + +`OrderLine.quantity` and both `minimumQuantity` fields are `Decimal`, not integers — quantities like `4.5 kg` are representable ([ADR-024](/architecture/adr/adr-024-product-identity-lifecycle-and-decimal-quantity)). + +## Walkthrough + +```http +POST /api/v1/offers # as A, for one of its products +POST /api/v1/orders # as B → draft +POST /api/v1/orders/{id}/lines # as B, referencing A's offer +POST /api/v1/orders/{id}/submit # as B → creates one OrderGroup for A +POST /api/v1/orders/{id}/groups/{groupId}/accept # as A +PUT /api/v1/orders/{id}/groups/{groupId}/status # as A: PROCESSING → FULFILLED → COMPLETE +``` + +`POST /orders` and `POST /orders/:id/submit` both support the `Idempotency-Key` header — see [API conventions](/api-reference#idempotency). diff --git a/docs/api-reference/organizations-and-roles.md b/docs/api-reference/organizations-and-roles.md new file mode 100644 index 0000000000..b60f7f19f3 --- /dev/null +++ b/docs/api-reference/organizations-and-roles.md @@ -0,0 +1,70 @@ +--- +title: Organizations & Roles +sidebar_position: 3 +--- + +# Organizations & Roles + +An Organization is the tenant. Every row elsewhere in the API is scoped to one, either directly or transitively. + +## Organization & legal entities + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `GET` | `/organizations/me` | Get the caller's own organization | — | +| `PATCH` | `/organizations/:id` | Update organization profile | `org:manage` | +| `GET` | `/organizations/me/legal-entities` | List legal entities | — | +| `POST` | `/organizations/me/legal-entities` | Add a legal entity | `org:manage` | + +## Users + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `GET` | `/organizations/me/users` | List users in the caller's organization | `org:manage` | +| `POST` | `/organizations/me/users` | Invite a second user (needed before any role beyond the sole Owner exists) | `org:manage` | +| `GET` | `/organizations/me/roles` | List roles available in the organization | — | + +Every organization is created with exactly one user — its Owner, holding the `'*'` wildcard permission. `POST /organizations/me/users` is what makes a second user, and therefore custom/scoped roles, possible at all. + +## Roles & permissions + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `GET` | `/permissions` | The canonical, enforced permission catalogue | — | +| `POST` | `/roles` | Create a custom role | `roles:manage` | +| `GET` | `/roles` | List roles | — | +| `GET` | `/users/:userId/roles` | List a user's roles | — | +| `POST` | `/users/:userId/roles` | Assign a role to a user | `roles:manage` | +| `DELETE` | `/users/:userId/roles/:roleId` | Revoke a role from a user | `roles:manage` | + +### Permission catalogue + +`GET /permissions` returns the flat list every `@RequirePermissions(...)` check actually enforces: + +```json +[ + "producers:write", "products:write", "orders:write", "offers:write", + "connections:write", "inventory:write", "org:manage", "dpp:manage", + "documents:write", "attributes:write", "classification:manage", + "sharing:write", "roles:manage", "webhooks:manage", "categories:govern" +] +``` + +`'*'` is a separate wildcard — not a real resource permission — that grants every permission within the caller's own organization; it's what the seeded Owner role holds. + +A role can additionally be scoped to a single Category or Location (enforced for `products:write` and `inventory:write`), and two system roles — **Catalog Editor** and **Read Only** — are seeded for every organization automatically. + +`categories:govern` is cross-organization by design: it approves or rejects proposals for the *shared* global category registry, not the granting organization's own data. There is no separate "platform tenant" concept beyond an env-configured `PLATFORM_OPERATOR_ORG_ID` — grant it only to roles in the platform operator's own bootstrap organization. + +### Create a custom role + +```http +POST /api/v1/roles +Authorization: Bearer +Content-Type: application/json + +{ + "name": "Inventory Manager", + "permissions": ["inventory:write", "products:write"] +} +``` diff --git a/docs/api-reference/producers-and-ospi-codes.md b/docs/api-reference/producers-and-ospi-codes.md new file mode 100644 index 0000000000..b3fc011c25 --- /dev/null +++ b/docs/api-reference/producers-and-ospi-codes.md @@ -0,0 +1,88 @@ +--- +title: Producers & OSPI Codes +sidebar_position: 4 +--- + +# Producers & OSPI Codes + +An organization registers as a **Producer**, is issued a **Producer Code** (the `AAAA` segment), and then mints **OSPI Identities** — the global, checksum-verified product/variant identifier. See [ADR-004](/architecture/adr/adr-004-ospi-code-checksum) and [ADR-008](/architecture/adr/adr-008-ospi-code-segment-widths) for how the identifier format and checksum are actually implemented. + +## Endpoints + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/producers` | Register a producer under the caller's organization | `producers:write` | +| `GET` | `/producers` | List producers | — | +| `POST` | `/producers/:producerId/codes` | Issue a Producer Code | `producers:write` | +| `POST` | `/ospi-identities` | Mint an OSPI Identity | `products:write` | +| `POST` | `/ospi-identities/validate` | Validate a code's checksum without minting anything | — | +| `GET` | `/ospi-identities/:code` | Look up an identity by its full code | — | +| `POST` | `/ospi-identities/:id/retire` | `RESERVED/REGISTERED/ACTIVE/SUSPENDED → RETIRED` | `products:write` | +| `POST` | `/ospi-identities/:id/suspend` | `→ SUSPENDED` | `products:write` | +| `POST` | `/ospi-identities/:id/reactivate` | `SUSPENDED → ACTIVE` | `products:write` | + +## Register a producer and issue a code + +```http +POST /api/v1/producers +Authorization: Bearer +Content-Type: application/json + +{ "name": "Acme Manufacturing" } +``` + +```http +POST /api/v1/producers/{producerId}/codes +Authorization: Bearer +Content-Type: application/json + +{ "code": "ACME" } +``` + +`code` is the `AAAA` segment: A–Z0–9, up to 12 characters. + +## Mint an OSPI Identity + +```http +POST /api/v1/ospi-identities +Authorization: Bearer +Idempotency-Key: 6b1f... +Content-Type: application/json + +{ + "producerCodeId": "prc_...", + "categoryCode": "123456", + "companyProductId": "00012345", + "variantCode": "0001", + "serialBatch": "00000001", + "version": 1 +} +``` + +| Field | Segment | Notes | +| --- | --- | --- | +| `producerCodeId` | `AAAA` | The issued Producer Code | +| `categoryCode` | `BBBBBB` | Up to 6 chars | +| `companyProductId` | `CCCCCCCC` | Producer-supplied product identifier (Deel 4 §14), up to 8 chars | +| `variantCode` | `DDDD` | Optional, up to 4 chars | +| `serialBatch` | `EEEEEEEE` | Optional, up to 8 chars | +| `version` | `V` | 1–9, default 1 | +| — | `FFF` | Computed checksum, never supplied — see ADR-004 | + +Pass `reserved: true` (optionally with `reservedUntil`) to **reserve** an identity — the code exists and is held, without a product attached yet — for ERP sync, bulk import, or manufacturing workflows that need a code before the product record is fully assembled ([ADR-024](/architecture/adr/adr-024-product-identity-lifecycle-and-decimal-quantity)). Attaching it to a product later moves it straight to `ACTIVE`, no separate un-reserve step needed. + +In practice you usually don't call this endpoint directly — `POST /products` accepts the same fields under an `identity` block and mints the identity in the same call. Use this endpoint directly when you need to reserve a code before the product exists, or when issuing identities in bulk ahead of catalog creation. + +### Lifecycle + +``` +RESERVED → REGISTERED → ACTIVE → SUSPENDED → RETIRED +``` + +`SUSPENDED` and `RETIRED` are one-way past `ACTIVE` except the explicit `reactivate` action (`SUSPENDED → ACTIVE` only — `RETIRED` is terminal). + +## Validate and resolve a code + +`POST /ospi-identities/validate` checks a code's structure and checksum without touching the database — useful for client-side scan validation before calling the network at all. + +For looking up what a code actually identifies (product, manufacturer, variants, documents), see the public [OSPI Code Resolver](/api-reference/search#resolver) — it doesn't require authentication, matching the "scan a code, no login" use case (Deel 4 §26-27). diff --git a/docs/api-reference/products-and-variants.md b/docs/api-reference/products-and-variants.md new file mode 100644 index 0000000000..b714118a51 --- /dev/null +++ b/docs/api-reference/products-and-variants.md @@ -0,0 +1,114 @@ +--- +title: Products & Variants +sidebar_position: 5 +--- + +# Products & Variants + +## Endpoints + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/products` | Create a product (optionally minting its OSPI identity in the same call) | `products:write` | +| `POST` | `/products/bulk` | Create up to 500 products, partial-success per item | `products:write` | +| `GET` | `/products` | List/search the caller's products | — | +| `GET` | `/products/:id` | Get one product | — | +| `PATCH` | `/products/:id` | Update a product | `products:write` | +| `POST` | `/products/:id/validate` | Completeness score against the category's attribute schema | — | +| `POST` | `/products/:id/publish` | `→ PUBLISHED` (rejects `400` if not `readyForPublication`) | `products:write` | +| `POST` | `/products/:id/unpublish` | Revert publication | `products:write` | +| `POST` | `/products/:id/retire` | `→ ARCHIVED` | `products:write` | +| `POST` | `/products/:id/recall` | `→ RECALLED` | `products:write` | +| `POST` | `/products/:id/variants` | Add a variant (always requires its own OSPI identity) | `products:write` | +| `GET` | `/products/:id/variants` | List variants | — | +| `POST` | `/products/:id/serialized-units` | Register one serial/batch unit | `products:write` | +| `GET` | `/products/:id/serialized-units` | List serialized units | — | +| `POST` | `/products/:id/serialized-units/bulk` | Register up to 1000 units, partial-success per item | `products:write` | +| `PUT` | `/products/:id/translations/:locale` | Set a locale's `name`/`description` | `products:write` | +| `GET` | `/products/:id/translations` | List translations | — | +| `DELETE` | `/products/:id/translations/:locale` | Remove a translation | `products:write` | +| `POST` | `/products/:id/relationships` | Create a directional relationship to another product | `products:write` | +| `GET` | `/products/:id/relationships` | List relationships | — | +| `DELETE` | `/products/:id/relationships/:relationshipId` | Remove a relationship | `products:write` | + +## Create a product + +```http +POST /api/v1/products +Authorization: Bearer +Idempotency-Key: 9c2a... +Content-Type: application/json + +{ + "name": "Stainless Steel Water Bottle 750ml", + "description": "Double-walled, vacuum-insulated.", + "categoryId": "cat_...", + "gtin": "04006381333931", + "identity": { + "producerCodeId": "prc_...", + "categoryCode": "123456", + "companyProductId": "00012345", + "version": 1 + } +} +``` + +`identity` mints a new OSPI Identity for the product in the same call — see [Producers & OSPI Codes](/api-reference/producers-and-ospi-codes). Pass `ospiIdentityId` instead to attach an identity you already reserved. `gtin` (GTIN-8/12/13/14) is checksum-validated but not confirmed against GS1's registry ([ADR-005](/architecture/adr/adr-005-gs1-relationship)). + +Statuses: `DRAFT → ACTIVE → PUBLISHED`, with `RECALLED`/`DISCONTINUED`/`ARCHIVED` as terminal-ish states, plus an independent `publicationState` audience field (`PRIVATE`/`PARTNER_ONLY`/`PUBLIC`/`SCHEDULED`). + +## Variants + +Every variant carries its **own** OSPI identity — `POST /products/:id/variants` always requires an `identity` block or `ospiIdentityId`, the same shape as product creation ([ADR-015](/architecture/adr/adr-015-pricing-vs-serialization)). Pricing (`Offer`) resolves against this SKU-level identity, not against individual serialized units. + +## Serialized units + +A serialized unit is a lightweight per-unit serial/batch record computed from its parent identity's segments — optional, and never required for pricing: + +```http +POST /api/v1/products/{id}/serialized-units +Authorization: Bearer +Content-Type: application/json + +{ "serialBatch": "00000001" } +``` + +Add `"variantId": "..."` to register the unit under a specific variant instead of the base product. Only reachable by the authenticated owner today — there is no public lookup-by-serial endpoint. + +## Publication gate + +`POST /products/:id/publish` calls the same logic as `POST /products/:id/validate` and rejects with `400` if the product isn't `readyForPublication` — publication is genuinely gated on category-schema completeness, not just an advisory check: + +```json +{ + "score": 0.86, + "requiredCompleted": 6, + "errors": [], + "warnings": ["attribute 'care_instructions' recommended but missing"], + "readyForPublication": true +} +``` + +## Optimistic concurrency + +`PATCH /products/:id` accepts an opt-in `expectedVersion` field on the update payload; a stale write returns a real `409`. + +## Relationships + +```http +POST /api/v1/products/{id}/relationships +Authorization: Bearer +Content-Type: application/json + +{ + "targetProductId": "prd_...", + "type": "REPLACEMENT_FOR", + "visibility": "PUBLIC" +} +``` + +`type` is one of `REPLACEMENT_FOR`, `ACCESSORY_FOR`, `COMPATIBLE_WITH`, `PART_OF`, `CONTAINS`, `VARIANT_OF`, `SUPERSEDES`, `REQUIRES`. Creating a relationship only requires owning the source product — the target can belong to any organization; `PRIVATE`/`PUBLIC` visibility gates whether the other organization can read it back. + +## Localization + +`GET /products/:id?locale=fr-BE` resolves `name`/`description` through a fallback chain — exact locale → language-only prefix → base fields — resolved independently per field. The base `Product.name`/`description` never change; no `locale` query param means no behavior change. diff --git a/docs/api-reference/reference/auth-controller-create-api-client.ParamsDetails.json b/docs/api-reference/reference/auth-controller-create-api-client.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-create-api-client.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-create-api-client.RequestSchema.json b/docs/api-reference/reference/auth-controller-create-api-client.RequestSchema.json new file mode 100644 index 0000000000..85b4eb4226 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-create-api-client.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"scopes":{"type":"array","example":["products:write"],"description":"Real, enforced permission codes — see src/auth/permissions.ts. '*' grants full org-wide access, same as the Owner role.","items":{"type":"string","enum":["producers:write","products:write","orders:write","offers:write","connections:write","inventory:write","org:manage","dpp:manage","documents:write","attributes:write","classification:manage","sharing:write","roles:manage","webhooks:manage","categories:govern","*"]}}},"required":["name","scopes"],"title":"CreateApiClientDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-create-api-client.StatusCodes.json b/docs/api-reference/reference/auth-controller-create-api-client.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/auth-controller-create-api-client.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-create-api-client.api.mdx b/docs/api-reference/reference/auth-controller-create-api-client.api.mdx new file mode 100644 index 0000000000..efe6303cd1 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-create-api-client.api.mdx @@ -0,0 +1,69 @@ +--- +id: auth-controller-create-api-client +title: "AuthController_createApiClient" +description: "AuthController_createApiClient" +sidebar_label: "AuthController_createApiClient" +hide_title: true +hide_table_of_contents: true +api: eJztmO9u2zYQwF/lwC9rC9pxEm9r9c11MiADimRJ2n0IgoKmThZbiVTJkx3PELCH2DvsPfYoe5LhKNlW4iFdgX30J1sUebw/P554txauQq/IOHuRikRMasqnzpJ3RYH+o/aoCCeVmRYGLQkpKuVViYQ+iOTuXgqPX2oM9NalK5Gs46PxmIqEfI1SaGeJFyZroaqqMDpudfQpOMtjQedYKv5HqwpFItzsE+q4j2fFyGDgt1aV2JsVyBs7F40UQbuqndK9Ut6rlZACH1RZFSiSOxaV1ppCsvSGUNxLkWLQ3lSsikjENapCAtrMeY0pVOhLE4JxFrRLMcDfv/8BARGC10eqpvxoNyMMKQzhu1ffwdwrSwGyuijA+flgaVIEpTWGICGoEkEFoBzhcmnRg3cFDoUUhrAM+5ZJgbYud8qj32gvn5ojhfNp/73Lsv6jdtaiZlN3Y8Yu0JLzq56MeVIqq+b8kFZV78HpukTb208ReTOrCXubFCoEk3Xh3S0OuWJ7tvPY7LB7vcRZ7tzn3ohWhHPnDYZk7hborZDilbhvmkb22LprgdiG/14KMsTRFtPHxJ6RE023OlTOhhaW8WjEP485+KAKk0YDIFOmwFSC8zFmHeSwMK5QhAEUzOpgLIYAvm4j+T+Rjt47//VpTOa/YrPBXrydnH28Pv/l/fnNrXhK/A2pWYFQKp0biwOPKo0DcfNI/ZAPV4khcFie3WfPa5A5D84iO690HiEzWKQhSuwcyanmOZnp8fhkNk714CQbnQzGr38YDWbfn74ZvMnG2cmP2fh4NHu9Z9TUeY9teCg3oTNmaSiHgH6BfhD4TBZuzro84Sn6c2dxX9MeXOcs8gxJmaIF67GQNnZP51934O1QHI+O9+l7xxnFziWUqsicLzv88KFi8aA9pmjJqCIcaDvQ9k20ne7Txt95xonzbSphVhOULYDbhBex630MXzgPhgJ4DK72GiEmXwmTs+vB6OT05QHLA5bfhOV4H8vb3ccW0x1pqcMA1hHggwkU86JpBxYmGA4aucitVnxtPZB4IPGbSHzzLImgnc0Koym06kcIOVMGUoTwAofzIShI6xYzhNqaLzXCQhU1HtLiAcb/DmMjBak5l9aCK02eH1DX3tBKJHdrMUPl0XPl3eyVsV8t3Uuk3HGRX7nQlvKUi0QcqcocLY7b0lZVZqDjgsDlVfRNV+lvFLlhWlvSNup0CLNZ3ZDs/vzkfKlIJOLnX2856C5U5iNMri7gM3KZ3sU5J6qiy/hIXO9aCuebsG9aADsiNpX/fn3fcIGbuYhR5+zLm6sLuCoU8c2at98jJM54cVmhhRtSNlU+hatWMFzEm/emun0JmsmtOmlDePfhqr0L8W2JF/GphKmzgQzVkf6//hyfJp0cWkm49HNlzW9RXpDAoZPdduhhym0HCVGl7n+nSpDwQXnDrQYJ022tLGGyrcklTB8V4xLONhU8b5Qa4ozEYW0NHw2Ph6MuRynNOYrjwIiUyvYczzrCji9o+YJJZWBL2COXbg8x4QMdVYUylo957Qt+18J3J1RlWJ1j7isw8VL0EbyXImdYkzuxXs9UwPe+aBoe/lKjX7VgLtgjs9jr4djnqNJ4RtaCGePDH7Pv4JbV4elFHTtFTzNxIzcrJlpjRc/Ove+dp6vLmEdnXQ+sjPlXeLXkXKGWIhHcYYluiccmjq1Foey8jjlUtDLZ8dEJO989OU7Rqk2ny656Gq7X7Yxb9xlt0wjZmUL8LBruoPwDXBfdrg== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +AuthController_createApiClient + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-list-sessions.ParamsDetails.json b/docs/api-reference/reference/auth-controller-list-sessions.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-list-sessions.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-list-sessions.RequestSchema.json b/docs/api-reference/reference/auth-controller-list-sessions.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/auth-controller-list-sessions.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-list-sessions.StatusCodes.json b/docs/api-reference/reference/auth-controller-list-sessions.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/auth-controller-list-sessions.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-list-sessions.api.mdx b/docs/api-reference/reference/auth-controller-list-sessions.api.mdx new file mode 100644 index 0000000000..0a250d75b0 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-list-sessions.api.mdx @@ -0,0 +1,69 @@ +--- +id: auth-controller-list-sessions +title: "AuthController_listSessions" +description: "AuthController_listSessions" +sidebar_label: "AuthController_listSessions" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQx19lwFMWoL8St93o5jppkQKLpHE2ewiMgJbGFnclUuGM3LiGnqfv0SdbDKXEaQxkm7tPYajhn/Px45jcKl9hMGy9u8hUoiY151PvOPiiwHBfWOIZElnvSGlVmWBKZAykkru5VgGp8o6QVLJV4+FQ/mRIabCVKKpE3ZrCZlEelsYWmGnwAThHCPhQIzGsrS8MI4GBRU3WIRGEusC+0ir1jtGxyJqqKmwalQZfSbS3itIcSyMj3lSoEuUXXzFlcTRIWGxbzzAEH35slvoMX1gRB+tWSit8NGVVyNSvk7P76/M/P5/PbpR+FemMzaJAKE2aW4e9gCaLE3FzEO2+arQqkcisfrDPXtZg6QN4h5K80geEpcUio6jYJVLK95ZmNhofL8ZZ2jteDo97448/D3uLn05Oe6fL8fL4l+V4NFx83Atq6kPAtjycW+qC+ctyDoRhjaFHNkMo/Ep86ZyxATOV3LX53EX80tO5Vmw5+nUukmfIxhZn7PdE2tq9tr/uwGtXyJrxcLRP3ydLZN1KQ2mKpQ9lhx8+ViIPacAMHVtT0IG2A23vou1knzbpnYJTalhAW9QMZQvgc8OL2FUY4rx3cOQDWCYISL4OKQKlvkINk7Pr3vD45MMBywOW78JyvI/lze7HFrMdaZlHAucZ8NESx75o24m1JStFYx+5TY1cBQ4kHkh8F4mnb5IIqXfLwqZMrfsRQumUxIYRjrC/6oOBrG4xQ6idfagR1qao8dAWDzD+fxgbrdis5MWiTM252BOmdbC8UcndVi3QBAzyoGnmr2N8+zlUIudeXk0rjMQYzlWiBqayg/VoIJsNaGfdJqV7OT15MBNMW8Se/OjYlXi6Kd0NfvOhNKwS9ceXG6m2p8rew+TqAr7hRumnAufMVcyVdUsfC9+l53J2dQFXhWG5C8u6vZpGi6PLCh3M2LjMhAyugs/qlOEi3pWX3UH7AKmwVnVqffh0e9XeXuR+I4vkHMHUO2LLdeT133/GJ0mnwxsNl2FlnP076pEGSbbutsMAU58haYgudePOFdJwa4I1TkZTw7jywcr3CXOwi5plPC0M0bO7Gs58WpcYl0zqzLL0EKlHG/iwP+oPu65iUukqksDKE5cm9hNnYkXER9gRAUIEvEDiP+l8PnKMjzyoCmOdHMo6FPKtxeVOmcqKKyOlWz4Fjk5vrlXuicVqu10Yws+haBqZfqgxbFqU1pKKhRT4bt5olaPJIs5bJVQkapKmWAmfsXeqZL9dCvfPLP9+fvPkyS6AVyBG9e6TcZsX2ttta3Hjv6FrGqU7J1j+V828aZrvmiukiQ== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +AuthController_listSessions + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-login.ParamsDetails.json b/docs/api-reference/reference/auth-controller-login.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-login.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-login.RequestSchema.json b/docs/api-reference/reference/auth-controller-login.RequestSchema.json new file mode 100644 index 0000000000..9094a25df9 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-login.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"],"title":"LoginDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-login.StatusCodes.json b/docs/api-reference/reference/auth-controller-login.StatusCodes.json new file mode 100644 index 0000000000..0fbae6ed8a --- /dev/null +++ b/docs/api-reference/reference/auth-controller-login.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-login.api.mdx b/docs/api-reference/reference/auth-controller-login.api.mdx new file mode 100644 index 0000000000..88eeffe26a --- /dev/null +++ b/docs/api-reference/reference/auth-controller-login.api.mdx @@ -0,0 +1,69 @@ +--- +id: auth-controller-login +title: "AuthController_login" +description: "AuthController_login" +sidebar_label: "AuthController_login" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQgF9lwNMuQP8kcduNb14nBVK0iDfJpgcjCChxZHFLkQo5cuIafp6+R5+sGEqJ3TjY7QI92hfTFDm/34zGa+FrDIqMdxdajMWkoXLqHQVvLYZ76xfGCSlqFVSFhCGK8fxOioAPDUb66PVKjNfppwmoxZhCg1Lk3hE64keqrq3Jk4LBl+gd78W8xErxilY1irHw2RfMifUENocMRn6KlTJ251ikYNxCbNieGB990G883Mgdc+adjJ0bd1KQIctXfmXvzsiLzaa9FmvvYqt7NBzyl8aYB1Oz+WIsbpU1OvkChTIWtQQfgEqELiCwNN4qwggKsiYahzFCaCz2xf8XlRB8+Pax3GvcD48U+KSqOrn/cXJ2f3X+6fP59Y2Qrzy9JpVZhErlpXHYC6h02kjKgWX3OQ8VxqgW39CzFzUofADvkINX+YBQGLQ6JoldIC/eSO2uTH00Os5GOu8dF8Pj3ujDj8Ne9sPJae+0GBXHPxWjo2H2Yc+pqQ8B2/RQaWLnzKOhEiKGJYZeNBrB+gXb8gqkFM+tx7uW7iB1ziLPkJSxLVivaEy5e33+qgNvi+JoeLJPH9cmOmJumLysIahMjMYtXhBkPVBjSPvewTsfwFCEgNE3IUeIua9RwuTsqjc8Pnl/wPKA5XdhOdrH8mbb/lBvSdMeIzhPgE8mUmqUpt1Ymmg4aeQTt7niV82BxAOJ30Xi6VdJhNy7wpqcYmt+gpA7ZSRFCO+wv+iDAt20mCE0zjw0CEtlGzy0xQOM/x3GjRSkFjwYC9VQyef339tvzNQVUul55q59TEAoKsVYDFRtBsujAcsaPJ9tHe6G74h5EwytrhnBFp8MVcDwwiXb2m3JbvGzD5UiMRa//H7DmfSxNvcwmV3AH7gS8jl5JVGd4sCcX22n/PPnXL5M5ds8b4fxnQnduMInKLrQXV7PLmBmFRU+VKx3L9/pxLvLGh1ck3JaBQ2z4HWTE1xoHnyKrgjfQ84c1p20Pvx2O2snG559+BLXGEy9i2SoSSz//dfoZNzJoZWEy7BQzvyZ5EUJnCPZqcMAU68xSkgmdevOlCjhVgWjHK+minDhg+HnE6JgsoZ4PbUqxhdzJZz5vKkwXZk02hD3F85n6/iwf9Qfdh1H5dxxOAFMRaVSr3EqZZRthC1I8AzHv8L4UoaETzSorTKO09GE9EeqZWwuVG3YhCMhW2alaIXdSVEyjeO5WK8zFfFzsJsNbz80GFYtf0v2P+Oszu82UpSoNLM3XwtGiQs3dc7eDRvCx23DBu110Y18vjHJc6zpq2fvdgpmdpl6YNb9+6xS7xRBPXKdq0cxFkIKnwKSqiPtrYVVbtGk/idamfz5B1+yJrw= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +AuthController_login + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-logout-all.ParamsDetails.json b/docs/api-reference/reference/auth-controller-logout-all.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-logout-all.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-logout-all.RequestSchema.json b/docs/api-reference/reference/auth-controller-logout-all.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/auth-controller-logout-all.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-logout-all.StatusCodes.json b/docs/api-reference/reference/auth-controller-logout-all.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/auth-controller-logout-all.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-logout-all.api.mdx b/docs/api-reference/reference/auth-controller-logout-all.api.mdx new file mode 100644 index 0000000000..3f4428bf74 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-logout-all.api.mdx @@ -0,0 +1,69 @@ +--- +id: auth-controller-logout-all +title: "AuthController_logoutAll" +description: "AuthController_logoutAll" +sidebar_label: "AuthController_logoutAll" +hide_title: true +hide_table_of_contents: true +api: eJztl9tu4zYQhl9lwKssQJ8St93oznVSIAUWcZNs9sIwAkoaWdylSIUcufEaep6+R5+sGEo5bAxkm3tfhaHIX//MfBqTO+Fq9Iq0sxe5SMSsoXLuLHlnDPo749auoZkxQopaeVUhoQ8iWa6k8BhqZwMGkezEdDzmPzmGzOua5UQibpXRedSGQmmDuQTngUoEj/cNBoKNdkYRBlCQNkFbDAF8Y3AopMicJbTEsqqujc6i0uhrYO2dCFmJleIRbWsUiXDpV8yIjXqOiXTnDL13/ufLMpfji1WBvLZrIQU+qKo2PPX77Ozu6vyvz+fXN0K+ivSaVGoQKpWV2uLAo8rjRHw5sPZQtFJUGIJa/+Q9e1mDwnlwFjl5lfMIhUaTh6jYJ5Jr95ZmPpkep9M8GxwX4+PB9OOv40H6y8np4LSYFse/FdPJOP24F9TceY9deajUoQ/mb00lBPQb9IOgcwTj1uylN6M95iJZdvl8jvil05UUpCn6OmfJMySlzRm5PZGudq/XX/XgdTt4z3Q82afvkw5B27WESpnC+arHDx9qlofMY46WtDLhQNuBtnfRdrJPGzdOxilTxKClDUHVAfjU8CJ2Nfo47ywcOQ+aAngMrvEZQshcjRJmZ1eD8fHJhwOWByzfheV0H8ub5x9bzJ9Jyx0GsI4AH3Sg2Bd1N7HRQXPRyEVuM8XngAOJBxLfReLpmyRC5mxhdEahsx8h5E4ZSBHCEQ7XQ1CQNx1mCI3V9w3CRpkGD23xAOP/h7GVgtSabyxCNVTy+oBZ4zVtRbLciRSVR88Xmnb1OsY37kIVUun4vlS7EHlRVIpEjFStR5vJiF816tYPVNzQJaW/OT06uGZMO8QeffTscjz9lOwHfzhfKRKJ+PPLDVfbhVrfwWxxAd9wK+RjgUuiOuZK28LFwvfpubxeXMDCKOKzMO/bq2lccXRZo4VrUjZXPoeFd3mTEVzEs3LRf2gfIGPW6l5tCJ9uF93phc83vIm/I5g7G0hTE3n995/pSdLr0FbCpV8rq79HvSCBky3716GHucsxSIiW+nFvJUi4VV4ry6O5Ilw7r/n5jMjrtCEez40K4cmuhDOXNRXGLbMm18Q9hOvRBT4eTobjvquojLsKJ5BLW6nYT6yKFWGP8EwEdBWGDokfcvn0vRE+0Kg2Slv+Ihtv+FlHy1KoWrOPiZAdnFK8YGYlRclwJUux26Uq4Gdv2pan7xv0246kDWci5fouV60UJao80rwTDEUiZlmGNQMaW6dI9rslY/9E8+Iy9q9o5jmGVyBG+f6RstsX4rtdt+LGfUPbtkL2Loj/F+2qbdv/AHtGomc= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +AuthController_logoutAll + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-logout.ParamsDetails.json b/docs/api-reference/reference/auth-controller-logout.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-logout.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-logout.RequestSchema.json b/docs/api-reference/reference/auth-controller-logout.RequestSchema.json new file mode 100644 index 0000000000..891e27fa21 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-logout.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"],"title":"RefreshDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-logout.StatusCodes.json b/docs/api-reference/reference/auth-controller-logout.StatusCodes.json new file mode 100644 index 0000000000..0fbae6ed8a --- /dev/null +++ b/docs/api-reference/reference/auth-controller-logout.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-logout.api.mdx b/docs/api-reference/reference/auth-controller-logout.api.mdx new file mode 100644 index 0000000000..c54a1efb03 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-logout.api.mdx @@ -0,0 +1,69 @@ +--- +id: auth-controller-logout +title: "AuthController_logout" +description: "AuthController_logout" +sidebar_label: "AuthController_logout" +hide_title: true +hide_table_of_contents: true +api: eJztl19v4zYMwL8KoaceoPxpm21Xv+XSDuiAoVna6x6CopBtOtadLbkSlTYX5PPse+yTDZTdpG2G3g7YY/IShaZIivyJZtbCNugUaWsuc5GIcaByYg05W1Xo7iu7sIGEFI1yqkZC50Uyv5PC4UNAT59svhLJOv7UDnORkAsoRWYNoSF+pJqm0ln0MPjirWGZz0qsFa9o1aBIhE2/YBb9OI6HNPrWbOHQlzf2K5oX2p6cNgux2cgXjuevte+kIE0Vq89a+TlZsdm0m3xjjW99jIZD/srRZ043HKZIxK2qdB5jhkLpCnMJ1gGVCN3BYaltpQg9KEiD1wa9Bxcq7Iv/7fTonHXfV8tsjvvJkQKfVN3EBHwan9/PLv74fHF9I+Sbk16TSiuEWmWlNthzqPIoiM6BbffFRooavVeL7/jZyxoU1oE1yMmrrUMoNFa5jxa7RDJ179nMj0cn6SjPeifF8KQ3+vjzsJf+dHrWOytGxckvxeh4mH7cO9TEOodteajUvjvMo6YSPLolup7XOUJlFxzLG4xiPncnfhnpC6gu2OQ5ktJVC9ZrI23t3urPOvB2KI6Gp/v08SVEQ8wNk5cGglp7r81iiyD7gQZdlFsDR9aBJg8OvQ0uQ/CZbVDC+HzWG56cfjhgecDyh7Ac7WN5s2t/mO9Iyy16MJYAn7Sn2Ch1K1hqr7loZCO3meJ3yoHEA4k/ROLZuyRCZk1R6Yx8G36EkDulJ0UIR9hf9EFBHlrMEILRDwFhqaqAh7Z4gPG/w7iRgtSCB2ChApWsv//e/rfhuUYqLU/XjfXtME2lSMRANXqwPB6wscFWuT1yN2Z7zILTtLpmCFuAUlQO3ZZMjrYTyW7xq3W1IpGI3/684Vpa3+h7GE8v4SuuhHwuX0nUxEww6bPdPH/xXM238/d27pZCm8JGErp8XV1PL2FaKSqsq9nVXpGjxtFVgwauSZlcuRymzuYhI7jMedopupv3ATKGr+ms9eH322k7zvDAw5v4YsHEGk+aQgT4779Gp0lnh1YSrtxCGf0t2vMSuDCyc4cOJjZHLyGG1K27ULyEW+W0MryaKMKFdZqfj4mcTgPxelIp77fhSji3WagxbhmHXBM3FS5he/Bh/7g/7NqMyrjNcM6ZhFrFBmNULCLHCDt6YAvEqzxuLx/hEw2aSmnD9Qiu4mctWHOhGs0xHAvZkipFZ+1OipIZTOZivU6Vx8+u2mxY/BDQrVrolpyBlOs6v9tIUaLKGbj5WjA/fF9jw+zdcCSsXgWOaK95buTzjnGWYUPv6t69uCbTq9j60u7PZR1bpnDqka+3ehSJEFLYmJH2byLL1qJSZhFi2xOtTf78A02yHcQ= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +AuthController_logout + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-refresh.ParamsDetails.json b/docs/api-reference/reference/auth-controller-refresh.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-refresh.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-refresh.RequestSchema.json b/docs/api-reference/reference/auth-controller-refresh.RequestSchema.json new file mode 100644 index 0000000000..891e27fa21 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-refresh.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"],"title":"RefreshDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-refresh.StatusCodes.json b/docs/api-reference/reference/auth-controller-refresh.StatusCodes.json new file mode 100644 index 0000000000..0fbae6ed8a --- /dev/null +++ b/docs/api-reference/reference/auth-controller-refresh.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-refresh.api.mdx b/docs/api-reference/reference/auth-controller-refresh.api.mdx new file mode 100644 index 0000000000..7dbd53d77c --- /dev/null +++ b/docs/api-reference/reference/auth-controller-refresh.api.mdx @@ -0,0 +1,69 @@ +--- +id: auth-controller-refresh +title: "AuthController_refresh" +description: "AuthController_refresh" +sidebar_label: "AuthController_refresh" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQgF9lwFMWoH+SuO3GN6+TAilQxE2y6cEIAkoaWdyVSGU4cuI1/Dx9jz5ZMZQSJ3GR7QI92hfT1HB+P47Ga+VrJMPWu/NMjdWk4WLqHZMvS6Q7wpwwFEqr2pCpkJGCGs9vtSK8bzDwJ5+t1Hgdf1rCTI2ZGtQq9Y7RsTwydV3aNJoYfAneyV5IC6yMrHhVoxorn3zBlMUOiUNsMbRqo/1r/xXdC+nAZN1CbTb6heH5a+lbrdhyKeKX7f4pe7XZtIdC7V1obYyGQ/nKMKRka3FTjdWNKW0WfYbc2BIzDZ6AC4QucFhaXxrGAAaSJliHIQA1JfbV/xY9Enn6vljqM9xNjlb4aKo6JuDT5PTu8uyPz2dX10q/ifSKTVIiVCYtrMMeocniRjQOoruvNlpVGIJZfMfOTtYg9wTeoSSv8oSQWyyzEDV2iRTs3tOZHY6OklGW9o7y4VFv9PHnYS/56fikd5KP8qNf8tHhMPm4E9TUE2FbHi5s6IJ5sFxAQFoi9YLNEEq/EF/eYBTzuY34pacvoDoTlafIxpYtWK+VtLV7K3/ZgbdFcTQ83qVPbiE6Fm6EvKRhqGwI1i2eERQ7UCPFfe/gwBNYDkAYfEMpQkh9jRomp5e94dHxhz2Weyx/CMvRLpbX2/aH2Za0zGMA5xnw0QaOjdK2G0sbrBSNfeQ2NfJS2ZO4J/GHSDx5l0RIvctLm3Jo3Y8QSqcMbBjhAPuLPhjImhYzhMbZ+wZhacoG921xD+N/h3GjFZuFDMDKNFyI/O57+1+n5wq58DJf1z5EJAwXaqwGpraD5eFAtA220m3Q3aAdMG3I8upKMGwRStAQ0jOb4m+3pbvFr54qw2qsfvvzWqrpQ23vYDI7h6+4UvqpgAVzHXMhrF9uJ/qzp3q+ncCfJ2+trMt9ZKHL2MXV7BxmpeHcUyWmdsocJQ4uanRwxcZlhjKYkc+alOE8k3kn7+7eB0gFv7rT1offb2btQCMjjxySqwVT7wJbbiLCf/81Oh53enil4YIWxtlvUV/QIKXRnTkkmPoMg4boUrfuXAkabgxZ42Q1NYwLT1aeT5jJJg3LelqaEJ7d1XDq06bCeGTSZJalrUgJ28CH/cP+sGs0JpVGIzkXFCoTW4wzsYjiI2z5gS0RrxL5fP8YH3lQl8Y6KUhDpTxr0ZorU1tx4lDpFlb9VErBthAMx3O1Xicm4GcqNxvZvm+QVi12S8lBIpWd3260KtBkgtx8rYQgubOxafauxRURLxtxaaeBbvTTiUmaYs3vyt6+uCmzi9j+ku4PZhXbpiLzIJGYBzVWSisfU9L+VZS9tSqNWzSx9alWp3z+Aal0H20= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +AuthController_refresh + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-register.ParamsDetails.json b/docs/api-reference/reference/auth-controller-register.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-register.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-register.RequestSchema.json b/docs/api-reference/reference/auth-controller-register.RequestSchema.json new file mode 100644 index 0000000000..6ceb29e7bd --- /dev/null +++ b/docs/api-reference/reference/auth-controller-register.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"organizationName":{"type":"string","description":"Name of the new organization"},"email":{"type":"string"},"password":{"type":"string","minLength":8},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["organizationName","email","password"],"title":"RegisterDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-register.StatusCodes.json b/docs/api-reference/reference/auth-controller-register.StatusCodes.json new file mode 100644 index 0000000000..0fbae6ed8a --- /dev/null +++ b/docs/api-reference/reference/auth-controller-register.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-register.api.mdx b/docs/api-reference/reference/auth-controller-register.api.mdx new file mode 100644 index 0000000000..dd66b19db9 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-register.api.mdx @@ -0,0 +1,69 @@ +--- +id: auth-controller-register +title: "AuthController_register" +description: "AuthController_register" +sidebar_label: "AuthController_register" +hide_title: true +hide_table_of_contents: true +api: eJztl19v4zYMwL8Koac7QPnTNtvavOXSDuiwrVnb6x6CopBtOtbNllyJTpsF/jz7HvtkA2W3di/Z3Q7YY/IShaIoivyJEbfClugUaWsuEzEVs4qyuTXkbJ6je3C40p7QCSlK5VSBhM6L6fJeCoePFXr6YJONmG7DT+0wEVNyFUoRW0NoiKdUWeY6DnuMPnlrWObjDAvFI9qUKKbCRp8wJt7HsUek0fOsdStl9J9h8a+qwN4KT06blZAiQR87XbKKmArWApsCZQgGn6BvQdRSYKF0vmum5hN6/2Rdsm+PQpuf0awoE9PTWopUO0/7/amlyNW/TtayF6nl7vFe/Ot5cy8FacrZynWbjnOyoq4bY760xjfBmozH/PU2Hncq10nYAFKlc0wkWBei02YQ1trmitCDgqjy2qD34Koch+J/SyM6Z93X1WKb7M0wPquiDBH4MDt/uL747ePFze1O5m9IRTlCoeJMGxw4VEkQhM2BbQ85OwV6r1Zf2WcnapBaB9YgB6+wDiHVmCc+WGwDebmXnM5mcjQ5jiZJPDhOx8eDyen340H03cnZ4CydpMc/pJOjcXS6c6i5dQ6b9FCmfXuYJ00ZeHRrdAOvE4TcrtiXz/AK8exO3Pe0R9UFmzxHUjpvwHprpMnd5/rXLXgdipPxyS59XE/QEHPD5EUVQaG912b1iiDvAyW6ILcG3lkHmjw49LZyMYKPbYkSZufXg/HxyfsDlgcsvwnLyS6Wt135w6QjLbHowVgCfNaeQqHUjWCtveakkQ3cxor/Hg8kHkj8JhLPvkgixNakuY7JN+4HCLlSelKE8A6HqyEoSKoGM4TK6McKYa3yCg9l8QDjf4exloLUil/yQlWUsf7u//b+PqBAyiy3CqX1gQnFj2IxUqUerY9GbG7UU2+O3fYMHuPKadrcMIgNRBEqh+6VTva4Fcl28KN1hSIxFT/9fsv5tL7UDzBbXMIfuBHyJYUZURmiwbRfd83JxUtG9zUTvcQ3bUEn6LqBTtZ79nfC7rXfawG0SW3gq83C1c3iEha5otS6gp3fQSdovLsq0cANKZMol8DC2aSKCS4TfkOl7X1+DzEjXbbWhvDL3aJ5JPEzihfxdYW5NZ40VeFa/P3X5GTa2qGNhKteKLwETrdst0MHc5uglxBcasetK17CnXJaGR7NFeHKOs3zMyKno4p4PM+V96/uSji3cVVgWDKrEk1cqhiK5uDj4dFw3BYvFXPx4iwyXYUKZcs0wWUfoWMSepC9ieTrpSZ8plGZKx36vsqFrq/BdSlUqdmLIyGbG8C3qLV3L0XGbE+XYruNlMePLq9rFj9W6DYNymuOQsS5Xd7XUmSoEsZ4uRVMJVeCUIoHt+wLq+cV+7RTlmv5smIWx1jSF3Xve9dvcRWKatT230UoxsKpJz6KehJTIaSwISbhogXZVuTKrKpQUEVjkz//AAKDg8g= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +AuthController_register + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-revoke-session.ParamsDetails.json b/docs/api-reference/reference/auth-controller-revoke-session.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/auth-controller-revoke-session.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-revoke-session.RequestSchema.json b/docs/api-reference/reference/auth-controller-revoke-session.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/auth-controller-revoke-session.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-revoke-session.StatusCodes.json b/docs/api-reference/reference/auth-controller-revoke-session.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/auth-controller-revoke-session.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/auth-controller-revoke-session.api.mdx b/docs/api-reference/reference/auth-controller-revoke-session.api.mdx new file mode 100644 index 0000000000..8126b6c10d --- /dev/null +++ b/docs/api-reference/reference/auth-controller-revoke-session.api.mdx @@ -0,0 +1,69 @@ +--- +id: auth-controller-revoke-session +title: "AuthController_revokeSession" +description: "AuthController_revokeSession" +sidebar_label: "AuthController_revokeSession" +hide_title: true +hide_table_of_contents: true +api: eJztmN1OKzcQx19lNFcgOR9A2h72LgUqUfUIChx6gRBy1pOsD7v2Ys+m0Gifp+/RJ6vGuxAOqTjlPldx/DH+e/ybiScr9DUFzda7U4MZThsujrzj4MuSwl2gpb+nS4rReocKax10RUwhYnazQqcrwgytQYWBHhobyGDGoSGF1mGGteYCFca8oEpjtkJ+qmVF5GDdAtv2VhbG2rtIUcYn47F8GIp5sLXIwgyvdWlN0ghzbUsyCnwALghkU4oMS+tLzRRBw6yJ1lGMEJqShqgw947JsZjVdV3aPFkafY1ie7Wpzc++Us5y2CC+YdspoxB8+P603BvaPKhCetRVXUrXz9Pju4uT37+cXF6henPSS9azkqDSeWEdDQJpkzrS5iC2h9gqrChGvfjOPhteg7kP4B2J8yofCOaWShOTxd6RwsB7Ns3eZH82Mflgfz7eH0w+/TgezH44OBwczifz/Z/mk73x7NPGoY58CNRdDxc29of503IBkcKSwiBaQ1D6hWhpX6N00/lzfeLXSm8VsuWk60RMHhNrWx6z3zDS3d3b+Rc9eN0KWTMZ723S99nGaN1CQaXLuQ9Vjx891mIe8kCGHFtdxi1tW9o+RNvBJm2SgAWnXLOANmsYqg7Al4SXsKsppH7vYMcHsBwhUPRNyAli7mtSMD2+GIz3D3a3WG6x/BCWk00sr9Y/tmTWpBlPEZxnoEcbOeVF23UsbbRyaewTt7mW98SWxC2JHyLx8F0SIfduXtqcYyc/QSiZMrJmgh0aLoagwTQdZgSNsw8NwVKXDW3T4hbG/w9jq5D1Qqoe1A0XMj9S3gTLT6kSmpEOFDC7uZWSZvMn/Z2aqiIuvNRehkpiSlUWF5jhSNd2tNwbyYaj2M2Po5U1rZRUyTsi6JWUS+G1Y+1ZUA+xHKzvUn3jFx8qzZjhr39cybX7WNs7mJ6fwj09oXq+6YK5Tk6zbu4TAb2fzi7PT+G81CyPYlm3cblpxs5ZTQ4uWTujg4Hz4E2TM5ymR/O8j7hdyAW6urc2hM/X590zRh46skgCCo68i2y5SeD+8/fkIOvt8JOCs7DQzv6V7EUF4nXVb0cBjryhqCBJ6tu9lKjgWgernbSONNPCByvjU+ZgZw1L+6jUMb7IVXDs86aitGTaGMuSTOQ+uoOPh3vDcZ9edC7pRRxY+8iVTomlL5xFI6zRgA4NWLPxjT9fgo/pkUd1qa2T8GxCKWMdNDeoayta9lB1pAodHTqoMLMpNAofWeauVjMd6Uso21a6HxoKTx1RS/HITO75ZoXGRmkbzOa6jLQh6yWL4s5FH1m7sCboW7l9p3bCWMrEmCEqFOjSXwntbauwIG1SPK36gWmeU82vlmzkawm8l1g6Pvnt5Ork2Qdr172JgbTBfyparboZV/6eXNu+CGT5Lhrb9l9/mebR +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +AuthController_revokeSession + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-approve.ParamsDetails.json b/docs/api-reference/reference/categories-controller-approve.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-approve.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-approve.RequestSchema.json b/docs/api-reference/reference/categories-controller-approve.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/categories-controller-approve.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-approve.StatusCodes.json b/docs/api-reference/reference/categories-controller-approve.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-approve.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-approve.api.mdx b/docs/api-reference/reference/categories-controller-approve.api.mdx new file mode 100644 index 0000000000..9853da4472 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-approve.api.mdx @@ -0,0 +1,69 @@ +--- +id: categories-controller-approve +title: "CategoriesController_approve" +description: "CategoriesController_approve" +sidebar_label: "CategoriesController_approve" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbBImmTTgxEEtDiyuSuRXHLkJjX0PH2PPlkxlGJn40W2uftkmtIM/5z5zZj0RjiPQZFx9kKLTMwU4dIFg3HmLAVXlhgelPfBrVFI4VVQFRKGKLL5RlhVociE0UKKgF9rE1CLjEKNUhgrMuEVrYQUMV9hpUS2EfTk2SJSMHYpmuaeDaN3NmLk5+PhiD80xjwYz7JEJkQjxWQ43H9wp0qjk3golClRS3ABaIXAajASrI0rFWEEBYs6GosxQqhL7AspcmcJLbFb5X1p8uRp8Dmy782+aLf4jDlxFAIHjUwrGUNw4cev5U7jfgSkwEdV+ZKnfp2ePVyf//Hp/OZWyFc7vSG1KBEqla+MxV5ApdNEWhzYd5+jVGGMavmDdfaiBoUL4Cxy8CoXEAqDpY7JYxdIhuMtn3o0GS8mOu+Ni+G4N/nw87C3+OnktHdaTIrxL8VkNFx82NvUzIWAbXpoZWK3mb8MrSBiWGPoRaMRSrdkLc1LxuZtPHc7fqn0XgoylHSds8szJGXKM3J7TtrcvX7/uiOytWgSfd/B8qOJ0dilhEqVhQtVhx8+enYPeUCNlowq44G2A23vou1kn7ZpTSvGKVfEoC1qgqoFcNvwEnYeQ5p3Fo5cAEMRAkZXhxwh5s6jhOnZdW84Pjk+YHnA8l1YTvaxvN392KLekaYdRrCOAB9NpNQXTTuxNtFw0sglbnPFR4wDiQcS30Xi6ZskQu5sUZqcYis/QcidMpIihCPsL/ugQNctZgi1NV9rhLUqazy0xQOM/x/GRgpSy5hW3d6d2CpiXgdDT+mitEAVMIhsfs83nlc7ffvKVSGtHF/NvIuJHL5SZWKgvBmsR4PdooON0c1gZ9iGiZW9UHPD4LbQPWvqaOYddlOyG/zmQqVIZOL3P285/y568wDTqwv4gk9CPqd8ReRT9IwtXEKhC9jlzdUFXJWK+HTMdntZTm8cXXq0cEPKahU0XAWn65zgIp2ei670jiFn+nznrQ8f767a8wyfeNiIKwtmzkYyVCeC//1ncpJ1fuhJwmVYKmv+Tv6iBD5RyW45DDBzGqOEJKkbd1KihDsVjLI82qVLwpQomEVNPJ6VKsatXAlnLq8rTCbTWhvirsL5aDc+7I/6w67PqJz7DAeQU1yp1GG6q/VuNdjRAbskfxPObRESPtLAl8pYLtM6lPysBWculDcsZcSr74iVIkvX+GfX91KsGLhsLjabhYr4KZRNw9NfawxPLVVrjsqCcz3fCG0ij7XIClVG3NO2bani6Lors2PYUfSt5m5SWeYstWX+H0AKBi/94dDcN1KsUOlUVpvuwTTP0dMLk73mzfW3Lamry9ROVc2R2UbvVRUk99/Vs9m0b9y6L2ibZiuP+DsrbJr/AJPz850= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +CategoriesController_approve + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-create.ParamsDetails.json b/docs/api-reference/reference/categories-controller-create.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-create.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-create.RequestSchema.json b/docs/api-reference/reference/categories-controller-create.RequestSchema.json new file mode 100644 index 0000000000..01871f6724 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-create.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"scope":{"type":"string","description":"'organization' (default): private to your org, usable immediately, no review. 'global': a PROPOSAL for the shared cross-org registry (ADR-020) — created PENDING, only usable once a `categories:govern` holder approves it via POST /categories/:id/approve.","enum":["organization","global"]}},"required":["code","name"],"title":"CreateCategoryDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-create.StatusCodes.json b/docs/api-reference/reference/categories-controller-create.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-create.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-create.api.mdx b/docs/api-reference/reference/categories-controller-create.api.mdx new file mode 100644 index 0000000000..9c72b11362 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-create.api.mdx @@ -0,0 +1,69 @@ +--- +id: categories-controller-create +title: "CategoriesController_create" +description: "CategoriesController_create" +sidebar_label: "CategoriesController_create" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uGzcQgK8y4IttgJJlW23jfVNst3DRxKrlpA+GkVDLkcSES27IWdmqsEAP0Tv0Hj1KT1IMd2XJkZE2RR/1pBX/5u+bWc4uhS8xKDLeXWqRiTNFOPXBYDzzjoK3FsO7PKAiFFKUKqgCCUMU2e2dFAE/VRjppdcLkS3TXxNQi4xChVLk3hE64ilVltbkSc7hh+gdj8V8hoXiJ1qUKDLhxx8wJ5YTWCsyGHk29xo3VkUKxk1FLYVTxfMTpQroiA16ZjLmvnxmmxQaYx5MyTqKTOz5MFXO/Jp03oN9jRNVWTrIoAxmrgiBPCx8FcCHqYQqqrFFMEWB2ihCu5DgPAScG7zvwt7U+rGyexkoGF5fDa9Gg59g4gPQDCHOVEANefAxdnyYQsCpiRQWsD84v+70jnsH8Ndvv0MTBw3Di9fnl69/kOCdXawke5cjKHifP0Ywm/o5BvceZt5qDKDKMvg5RjAEc6NgeDW6gcP1+sPM6MN2UVdIga4qRHYrNh0hpGgsEXd1LTciftuEqQ3KnRRkyLJ7z5LSLVeLc/KirputsfQuNiE+7h3xz9MIcLD6vd72xFtljU7qwEQZi1pC68kWSJgbbxVhBAXjKhqHMUKobDLrf6ISQ/Dhv8IrBT6ookwOejk4f3d98fObi9HNFoQjSrEtVD4zDjsBlU4DSTjw2V32UoExquk/yNnyWuLPO2TnFT4gTAxaHdOJrSOfS6HNM/VR/3jc13nneNI77vRffNvrjL85Oe2cTvqT4+8m/aPe+MWWUWc+BGzCQzMTW2PuDc0gYphj6ESjEayfsi7PU7ayeFPTDegu+MhzJGVsQ9zTQ5rYfb7+uiVyzWj/OSxfmRiNm0oolJ34ULT44UNpmixGjY6MsnFH2462r6LtZJu2QUUzxonLtJYwrgiKBsDHgpewKzGkce9g3wcwFCFg9FXIEdIbT0LzLjk52GG5w/KrsOxvY3mzftmiXpOmPUZwngAfTKRUF00zMDfRcNDIJ25zxTfLHYk7Er+KxNMvkgi5dxNrcoqN+glCrpSR+L6+j91pFxToqsEMoXLmU4UwV7bCXVncwfjvYaylIDWNSepjA8W7IuZVMLQQ2e1SjFEFDNwr13dbln6x0y6QZp4b8tLHBI6imcjEoSrN4fxoo2kTLJId07bkK/kjRrXBbKVFyy/b1A7J9uF7HwpFIhM//nLDEfexNO9gMLyEj7gQchXkGVGZ/MX5cL3u/S9WMV8hvcahadHX/9ed+Xqsbcif9pm1FMZNfEKsDcTVaHgJQ6uIb92s3RY9acX+VYkORqScVkHDMHhd5QSX6VY+aVP6AHKmumxP68Krt8PmnsQ3Kd7EGQtn3kUyVKXM+POP/knWnkMLCVcb+kYJfFOTrTgMcOY1RglJpfa5VSVKeKuCUY6f1hhIGBAFM66In8+sivFRXQnnPq8KTFsGlTbE1Yqj3hje6x51e239UjnXLw4Ts1OoVLnaOKylwZo6eKTuiTcfc5vwgQ5Lq0yKShUszzVA3gpVGtbkiIU/SYQZg5vdiuVyrCK+CbauefhThWHRoDpnJ4w5tLd3tRQzVDoly1IwdVwLUjHu3LAavNxWrM5WYa7lascgz7GkL66928gt/gDCOdB+vioadoO659Kh7vkThBQ+uSMlUhpbCqvctEolVTRnsq9Vxf549NlnCZasaqeUW2xouFw2K278R3R1LWRrCvF/Ud/Vdf03bqW/Uw== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +CategoriesController_create + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-list-pending.ParamsDetails.json b/docs/api-reference/reference/categories-controller-list-pending.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-list-pending.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-list-pending.RequestSchema.json b/docs/api-reference/reference/categories-controller-list-pending.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/categories-controller-list-pending.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-list-pending.StatusCodes.json b/docs/api-reference/reference/categories-controller-list-pending.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-list-pending.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-list-pending.api.mdx b/docs/api-reference/reference/categories-controller-list-pending.api.mdx new file mode 100644 index 0000000000..7d56367c8e --- /dev/null +++ b/docs/api-reference/reference/categories-controller-list-pending.api.mdx @@ -0,0 +1,69 @@ +--- +id: categories-controller-list-pending +title: "CategoriesController_listPending" +description: "CategoriesController_listPending" +sidebar_label: "CategoriesController_listPending" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQx19lwFMWoD/jthvdXCctUmARN8mmh8AIKGpkc1ciFXLkjWvoefoefbJiKMVO42LT3H0KQ5H/+fpxTG6Fq9ArMs5eZiIRM0W4dN5gmDlL3hUF+ofCBJqjzYxdCikq5VWJhD6I5H4hhcdQORswiGQrxsMh/8kwaG8qlhWJEI0Uk//6cKcKk0XjkCtTYCbBeaAVgsfHGgPB2rhCEQZQkNbBWAwBfF1gX0ihnSW0xLKqqgqjo9LgS2DtrQh6haXiEW0qFIlw6RfUxBF4DppM6zJ67/zby7TL8MWqQL5NBz6psip46ufp+cP1xe+fL25uhXwV6Q2ptEAolV4Ziz2PKosT0Tiwdp+zVGIIavmGnYOsQe48OIucvNJ5hNxgkYWo2CWSi/s9zWw0GaeTTPfG+XDcm3z8cdhLfzg9653lk3z8Uz4ZDdOPB0HNnPfYlodWJnTBfDO0goB+jb4XTIZQuCX70jljPGYiuW/zuY/4pacLKchQ9OuCJc+RlCnOyR2ItLV7vf66I7Ld0UT6Rof0fTIhGLuUUKoid77s8MOniuVBe8zQklFFONJ2pO1dtJ0e0jatacU4aUUMWloTlC2Au4YXsavQx3ln4cR5MBTAY3C11whBuwolTM+ve8Px6Ycjlkcs34Xl5BDL2/2PLWZ70jKHAawjwCcTKPZF006sTTBcNHKRW634inAk8Ujiu0g8+y6JoJ3NC6MptO5HCLlTBlKEcIL9ZR8UZHWLGUJtzWONsFZFjce2eITx/8PYSEFqGaLV3duHdwXUtTe0Ecn9VqSoPHp+7zSLg0jffjKVSCvHz6slRngUrUQiBqoyg/VosLc7qHZb2iR1T6xnX24Y2xa5Z486ljm+bkp2g1+cLxWJRPz2xy1X34XKPMB0fglfcSPkc8FXRFXMnbG5iyB06bq6mV/CvFDEd2Ped1DjuOLkqkILN6RspnwGc++yWhNcxrtz3h28D6CZvapT68Onu3l7m+H7Dm/icwUzZwMZqiO/f/81OU06HdpIuPJLZc2fUS9I4PuU7Myhh5nLMEiILnXjzpUg4U55oyyP9sWSMCXyJq2Jx7NChbBzV8K503WJccu0zgxxT+F6tIEP+6P+sOsySnOX4QRWLlCpYn+xKlZkbw32bACzAXs4/pXT3TkkfKJBVShj+aTWvuBvLTj3QlWG/RmxC3topXjGZyHFygXipdttqgJ+9kXT8PRjjX7TQrXmpKRc6vtFI8UKVRYR3wrmIxFTrbFiXGNXFclhI+WzsEP71wvubKpmD3dRvEIyqneflN280N5u2xW37ivaphGyc4L4f9Esmqb5B9uIuAE= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +CategoriesController_listPending + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-list.ParamsDetails.json b/docs/api-reference/reference/categories-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-list.RequestSchema.json b/docs/api-reference/reference/categories-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/categories-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-list.StatusCodes.json b/docs/api-reference/reference/categories-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-list.api.mdx b/docs/api-reference/reference/categories-controller-list.api.mdx new file mode 100644 index 0000000000..e7bf8d36e9 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: categories-controller-list +title: "CategoriesController_list" +description: "CategoriesController_list" +sidebar_label: "CategoriesController_list" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQx19lwFMWoB3bcduNbq6TFimwSBpn00MQBJQ0srhLkQo5cuMaep6+R5+sGEqxs3GRbe4+haHI/3z9OCY3wtXoFWlnL3KRiLkiXDqvMcydJe+MQf9gdCAhRa28qpDQB5Hc3UvhMdTOBgwi2YjJaMR/cgyZ1zXriUSIVorpf324VUbn0SoUShvMJTgPVCJ4fGwwEKy0M4owgIK0CdpiCOAbg0MhReYsoSWWVXVtdBaVjr8E1t6IkJVYKR7RukaRCJd+wSxG4Dla0p3L6L3z31+WuRxfrArktV0KKfBJVbXhqZ9nZw/X579/Pl/cCPkq0gWp1CBUKiu1xYFHlceJaBxYe8hZqjAEtfyOnb2sQeE8OIucvMp5hEKjyUNU7BPJVX1LMx9PJ+k0zwaTYjQZTD/+OBqkP5ycDk6LaTH5qZiOR+nHvaDmznvsykOlDn0wf2oqIaBfoR8EnSMYt2Rfeme0x1wkd10+dxG/9PReCtIU/TpnyTMkpc0ZuT2Rrnav11/3RHY72kjfeJ++TzoEbZcSKmUK56seP3yqWR4yjzla0sqEA20H2t5F28k+bbOGSsYpU8SgpQ1B1QG4bXgRuxp9nHcWjpwHTQE8Btf4DCFkrkYJs7PrwWhy8uGA5QHLd2E53cfyZvdji/mOtNxhAOsI8EkHin1RdxMrHTQXjVzkNlN8NziQeCDxXSSevkkiZM4WRmcUOvcjhNwpAylCOMLhcggK8qbDDKGx+rFBWCnT4KEtHmD8/zC2UpBahmh1++jhXQGzxmtai+RuI1JUHj2/d9r7vUjfeCtVSKXjB9USu6cTlSIRx6rWx6vx8QuDbI+z0r+pno0vmNOOsWcXeng5oH5K9oNfnK8UiUT89scNl9uFWj/A7OoCvuJayOcKl0R1TJa2hYuV7/Nzubi6gCujiC/DvG+vqHHF0WWNFhakbK58Dlfe5U1GcBEvy0V/0j5AxrDVvdoQPt1eddcXvuDwJj5IMHc2kKYmAvvP39OTpNehtYRLv1RW/xX1ggS+QMneHHqYuxyDhOhSP+5dCRJuldfK8mhXHQkzIq/Thng8NyqErbsSzlzWVBi3zJpcEzcRrkcX+Gg4Ho76tqIybiucwNoFqlRsKFbFiuyswQ4G6GH4JpfbA0f4RMe1UdrykWy84W8dKHdC1Zr9GLPpb+gsXSBesNmkKuBnb9qWpx8b9OsOoRWnIOXC3t23UpSo8kjwRjANiZhlGdbsVmyaItnvk4z6FuBfz7lxqYb92vr+CsCo3n9Sdv1Ce7PpVty4r2jbVsjeCeL/RXvftu2/ojKpKQ== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +CategoriesController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-reject.ParamsDetails.json b/docs/api-reference/reference/categories-controller-reject.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-reject.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-reject.RequestSchema.json b/docs/api-reference/reference/categories-controller-reject.RequestSchema.json new file mode 100644 index 0000000000..a7ab6b7f9d --- /dev/null +++ b/docs/api-reference/reference/categories-controller-reject.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string"}},"title":"RejectCategoryDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-reject.StatusCodes.json b/docs/api-reference/reference/categories-controller-reject.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-reject.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/categories-controller-reject.api.mdx b/docs/api-reference/reference/categories-controller-reject.api.mdx new file mode 100644 index 0000000000..71709bfe65 --- /dev/null +++ b/docs/api-reference/reference/categories-controller-reject.api.mdx @@ -0,0 +1,69 @@ +--- +id: categories-controller-reject +title: "CategoriesController_reject" +description: "CategoriesController_reject" +sidebar_label: "CategoriesController_reject" +hide_title: true +hide_table_of_contents: true +api: eJztmM1uGzcQgF9lwJMDUD+21TbZmyK7gAsEdm3HPRhGMFqOJCa75IacdawI+zx9jz5ZMdy11rECpwF61Mk0lzOcn48jDjfKVxSQrXdnRmVqhkxLHyzFmXccfFFQ+BDoI+WstKowYElMIarsdqMclqQyZY3SKtDn2gYyKuNQk1bWqUxVyCulVcxXVKLKNorXlUhEDtYtVdPctYIU+a03a1nxXE/uHZNj+YRVVdg82Tr6GL2TuR3Vfv5oaxDP2FJs1WIn8dwErdhyIVOXyc0uAusT9qpp5HugWHkXW0VH40P5YyjmwVZii8qUarSajMe7H26wsCZZDAu0BRkNPgCvCDq34d76ApkiIMzraB3FCKEuaKj+N98pBB9+vCz3hnYDpBU9YFmlAL2dnny4PP3z/enVtdLPPL1inBcEJeYr62gQCE2aSJuD6B5KlEqKEZc/2GcnarDwAbwjCV7pA8HCUmFi0tgFUuh9Sac5nBzNJyYfHC3GR4PJ61/Hg/kvx28GbxaTxdFvi8nheP56x6mZD4Ha9PDKxs6ZL5ZXECncUxhEawgKvxRbmqen4LaNZ+/xU0vveuhOReUJMdqiJe5bJW3unq+/7IjsGZ18D8t3NkbrlhpKLBY+lB1+9FCJesgDGXJssYh72va0/RRtx7u0TWteCU45soA2rxnKFsBtwUvYVRTSvHdw4ANYjhAo+jrkBDH3FWmYnlwOxkfHr/ZY7rH8KSwnu1he9z+2ZHrSjKcIzjPQg42c6qJtJ+5ttJI09onbHOUOtCdxT+JPkfjmRRIh925R2Jxja36CUCplZGSCAxouh4Bg6hYzgtrZzzXBPRY17cviHsb/DqM0OLiMaddtcydSkfI6WF6nVm5OGCio7PZOerJnnr7YE5bEKy+tY+Vj2yPySmVqhJUd3R+O+j1HG2ua0VauDZLY9cSWK8G2Re7Roo5l8a+b0t3gdx9KZJWpP/66luz7WNkPML04g0+0Vvox4SvmKsVOzsZl322ePua/7w63XaH0rwufqOlie351cQYXBbJcpGWTHSDSioPzihxcMTqDwcBF8KbOGc7SRXvRndJXkAuoVadtCO9uLtqrj1yOREhiBDPvIluuE+z//D05zjo9vNZwHpbo7NekL2qQy5futqMAM28oakgmdePOlKjhBoNFJ6M+sxqmzMHOa5bxrMAYt+ZqOPF5XVISmdbGshQgSV7r+Hh4OBx3JQlzKUkSbcGhxFSMuneCfjfoQYItEN9Ec3tcmR54VBVonWSlDoV8axm7VVhZseRQNu/Z1irrniSS5jutVoJmdqs2mzlGeh+KppHpzzWFdQvgvcRkLpm+3Shjo4yNyhZYRNoxbVt71cFldx5fQQ/ctyZ3k+gEyVS/5cFAK2E0vZ00d41WK0KTzt+m+zBr9xhci3gvuFPrG/0oMc1zqvjFtXdPjuvFearU8+7dpUwVXgX8IpHDL62RPvncvqDI3EYV6JZ1qtKq1Sm5xlrysc3Zs3OavPpuGDabdsW1/0SuabZRYflfAtM0/wJkIWOY +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +CategoriesController_reject + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-add-node.ParamsDetails.json b/docs/api-reference/reference/classification-controller-add-node.ParamsDetails.json new file mode 100644 index 0000000000..77db864e83 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-add-node.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"schemeId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-add-node.RequestSchema.json b/docs/api-reference/reference/classification-controller-add-node.RequestSchema.json new file mode 100644 index 0000000000..46ac99bd80 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-add-node.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"}},"required":["code","name"],"title":"CreateClassificationNodeDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-add-node.StatusCodes.json b/docs/api-reference/reference/classification-controller-add-node.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-add-node.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-add-node.api.mdx b/docs/api-reference/reference/classification-controller-add-node.api.mdx new file mode 100644 index 0000000000..08f582ba04 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-add-node.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-add-node +title: "ClassificationController_addNode" +description: "ClassificationController_addNode" +sidebar_label: "ClassificationController_addNode" +hide_title: true +hide_table_of_contents: true +api: eJztmNtuGzcQQH9lwCcHoC621TbZN0V2ARdI7dhO+mAYwWg5kpjskhty1pcK+z39j35ZMdyVJVlG0hR91JNWvAzncmaWs0vlKwrI1rszozI1KTBGO7N5Gpp4x8EXBYVPaMzv3pDSqsKAJTGFqLKbpXJYkspUzBdU0plRWgX6WttARmUcatLKOpWpCnmhdLsMVbZU/FilfRysm6umuW03UuS33jzKiudycu+YHMsUVlXR6Tj4HL2TsR3RfvqZchaNgxjJlqLM5mLGrgK6s+SFiQoDORb/7Kq9ae5NK7uTdKsVWy5k9SQQMm37Vrx5wl41TSskVt7FVsOj4aH8GIp5sJUsVpkSRUbD4e7ERyysSSJhhrYgo8EH4AVB50+4s75ApggI0zpaRzFCqAvqq//NqRSCD//V91rRA5ZVctXb8cmny9P3H06vrpV+ZukV47QgKDFfWEe9QGjSQDocRHZfvFRSjDj/zjk7XoOZD+AdifNKHwhmlgoTk8TOkS8RsCnTHI6OpiOT945mw6Pe6PXPw970p+M3vTez0ezol9nocDh9vWPUxIdAbXh4YWNnzL3lBUQKdxR60RqCws9Fl5d5W1m8qekGfqci8oQYbdESty2kjd3z9ZcdkWtGRy9h+c7GaN1cQ4nFzIeyw48eKhEPeSBDji0WcU/bnrYfou14l7ZxzQvBKUcW0KY1Q9kC+FTwEnYVhTTuHRz4AJYjBIq+DjlBzH1FGsYnl73h0fGrPZZ7LH8Iy9Eultfrly2ZNWnGUwTnGejBRk510bYDdzZaCRr7xG2Ocsfak7gn8YdIfPNNEiH3blbYnGOrfoJQKmVkZIID6s/7gGDqFjOC2tmvNcEdFjXty+Iexn8PY6MV4zymU7eaHNkZKa+D5cfULU4JAwWV3dxKw/fM2u/3niXxwkufWvmYCJKuMlMDrOzg7nCwfXiv7UnjYLlqTpuB84ai9KHJfaLxhoZX7XoJ5ErPjnKxvBvS3cOvPpTIKlO//XEtXPhY2U8wvjiDL/So9AqFBXOVvCpZc7lucE9XZKzAX0Oz6qhX/9ft50ZPat3MJ+K6uJxfXZzBRYEsl3BRYwemtOLgvCIHV4zOYDBwEbypc4azdElfOe4V5AJ51Unrw7uPF+21SS5WskkSGCbeRbZcp0T5+6/RcdbJ4UcN52GOzv6Z5EUNcnHT3XEUYCJh0JBU6p47VaKGjxgsOnmaINPcByvzY+ZgpzXL8zYpGk58XpeUtoxrY1mKl4S3NXzYP+wPu3KGuZQziYcQVGIqZJ3Dt6XCGkBAY6AjcMunTwnP9MCDqkDrJDZ1KGSuhfNGYWVFn0NR4UVAlVbZxveTltFbrRYCeXajlsspRvoQiqaR4a81hceW3Dtx1VQAuFkqY6M8G5XNsIi0o+tTOVcHl12Kv4I1qds2dIPohOX0SpBvEFoJ3Btfe5rbRqsFoUlJveymJ+1JvWsRst6+8xJp9GrHOM+p4m+uvd1I/4vz9AqYdl+KyjaDAt5LmcP7VlWfLE/pnMaWqkA3r1P5V61MAQFrCdNTKJ+lebLqRWcsl+2Ka/+FXNM8+Yblvzimaf4BWqCl4A== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_addNode + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-assign.ParamsDetails.json b/docs/api-reference/reference/classification-controller-assign.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-assign.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-assign.RequestSchema.json b/docs/api-reference/reference/classification-controller-assign.RequestSchema.json new file mode 100644 index 0000000000..c4aac3f7f1 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-assign.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productId":{"type":"string"},"classificationNodeId":{"type":"string"}},"required":["productId","classificationNodeId"],"title":"AssignClassificationDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-assign.StatusCodes.json b/docs/api-reference/reference/classification-controller-assign.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-assign.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-assign.api.mdx b/docs/api-reference/reference/classification-controller-assign.api.mdx new file mode 100644 index 0000000000..dbb0d8a30c --- /dev/null +++ b/docs/api-reference/reference/classification-controller-assign.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-assign +title: "ClassificationController_assign" +description: "ClassificationController_assign" +sidebar_label: "ClassificationController_assign" +hide_title: true +hide_table_of_contents: true +api: eJztmFFvIjcQx7/KyE85yRAgtL3wxpFUSqVrckkufUAo8noH8N2uvbFnSSjaz9Pv0U9WjXcJENJLI/WRJ7y2d/yfmZ8He1fCFegVGWcvUjEQo0yFYKZGx66Rs+RdlqG/5+6ZFVIUyqscCX0Qg/FECo8PJQb65NKlGKzio/GYigH5EqXQzhJa4iFVFFlj+PhbcJb7gp5jrrhFywLFQLjkG2ridTwrI4OBRwvv0lITa3yeGsgbOxOVFHpH9e8uxVcnVnJL3njL5r9YmEhBhjI2MYzu70bnjJyoqtpqKJwNtdRep8s/KQbtTcETxUCwyn6nsz9wpzKTRnMwVSbDVILzQHOEJrCwMC5ThAEUJGUwFkMAX2bYFv9bdNF759+epl2K+2GVAp9UXsQwfRqe3V+ff/l6fnMr5AtPb0glGUKu9NxYbHlUaeyIiwPbbnOUcgxBzd5YZy9qMHUenEUOXu48wtRgloZosQnka0hs20y7/V7ST3WrN+30Wv2PP3dayU8np63TaX/a+2Xa73aSj3tOjZz3WKeH5iY0zjwamkNAv0DfCiZFyNyMtbwAMMZz4/G20i30ztnkGZIyWU3crpE6dy/nXzdEbhjtv4blZxOCsTMJucqmzucNfvhUsHnQHlO0ZFQWDrQdaHsXbSf7tA1LmjNOWhGDlpQEeQ3gc8GL2BXoY7+zcOQ8GArgMbjSa4SgXYEShmfXrU7v5MMBywOW78Kyv4/l7ebPFtMNaanDANYR4JMJFOuiqTsWJhhOGrnIrVZ8QjqQeCDxXSSe/pBE0M5OM6Mp1PIjhFwpAylCOML2rA0K0rLGDKG05qFEWKisxENZPMD432GspCA1C3HVnQsOvxlQl97QUgzGK5Gg8uj53ldN9rx98+aYI80dXzILFyJAiuZiII5VYY4X3ePdtVv1azlaCoJlcMCaK+da0w0jXOO3VtZwzb42XbJp/Op8rkgMxG9/3DIJLhTmHoZXF/Adl0Kukz8nKmIceZ9cb+6252sWdu6iG1Zev4Ju3VGNnboIWZOKy5urC7jKFPG5m3Xs8RNnHF0WaOGGlE2VT+GqXhsu4rl8vdwH0Mx10Vhrw+e7q/qkxGcpfon3LIycDWSojHvj77/6J4PGDi0lXPqZsubPaC9I4LOabJZDDyOXYpAQJTXtRkqQcKe8UZZbI0U4c97w+JDIm6Qkbu/CIeHM6TKmlhdKDXG94vzWjnfa3XanqWBKcwXjhDA1uYq1y6qY4V2rsGEOnpnbiejzDid8ouMiU8ZyZkqfxbRGHMdCFYbVdPeSuoPkRIo5YzwYi9UqUQG/+qyquPuhRL+sQV1wYBJO93hSSTFHlcbtsxLMHFeIWKJbtyyLp2cly9sr15VcvzHUGgv64dzJ1k67uozFNmk+zuSxSAuvHrmgqEf+MCGFi+GJ2yj2rUSm7KyMhVbUNjn+quT4PMfwxfaKXjVDyi63FK5W9Yxb9x1tVQnZuEL8LKpJVVX/AKCpYqg= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_assign + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-create-attribute-definition.ParamsDetails.json b/docs/api-reference/reference/classification-controller-create-attribute-definition.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-create-attribute-definition.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-create-attribute-definition.RequestSchema.json b/docs/api-reference/reference/classification-controller-create-attribute-definition.RequestSchema.json new file mode 100644 index 0000000000..9108667c9f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-create-attribute-definition.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"dataType":{"type":"string","enum":["STRING","TEXT","INTEGER","DECIMAL","BOOLEAN","DATE","DATETIME","ENUM","MEASUREMENT","REFERENCE","URL","EMAIL"]},"enumValues":{"description":"Required when dataType = ENUM","type":"array","items":{"type":"string"}},"unitCode":{"type":"string","description":"Default unit code, used when dataType = MEASUREMENT"}},"required":["code","name","dataType"],"title":"CreateAttributeDefinitionDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-create-attribute-definition.StatusCodes.json b/docs/api-reference/reference/classification-controller-create-attribute-definition.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-create-attribute-definition.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-create-attribute-definition.api.mdx b/docs/api-reference/reference/classification-controller-create-attribute-definition.api.mdx new file mode 100644 index 0000000000..f2f5cf98c2 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-create-attribute-definition.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-create-attribute-definition +title: "ClassificationController_createAttributeDefinition" +description: "ClassificationController_createAttributeDefinition" +sidebar_label: "ClassificationController_createAttributeDefinition" +hide_title: true +hide_table_of_contents: true +api: eJztmF9vIjcQwL+KNU93kklIQts7pD5wsHeiOpIUSFoJoZPZHcB3u/aePZuEov08/R79ZNV4l0ACTXunPvKUZWyP58/PE4/XYHN0irQ1/QTa0E2V93qu4yDqWkPOpim6T7FDRdghcnpWEPZwro3mOSAhV05lSOg8tCdTCQ6/FujpnU1W0F6Hn9phAm1yBUqIrSE0xEMqz9N6r9PP3hqW+XiJmeIvWuUIbbCzzxgT7+PYWNLoeTS2Ce7M8uS0WUApwajs8ECiSI2D8PmgBDRFBu0JjMbD/uUHkDCOfh+DhP7lOPoQDUFCL+r2B52PIOHd1dXHqHPJss44qv+M+wP+jC5vBiBhEHVGN8NoEF2ykmH0PhpGl12ecDNkFdGg0/8I07La+FalReVUgj52Og+BbcOwjpy4X6IRG/PFz6LepXZCOadWIEETZv6A56WEwmjqHgyYfLZnD+eqSEnwCsExlqLwB0zY9ZB32GZ5UqWmTsRO2KcSSFPKm3f/CaceWSjLSqHPrfFVXM6bZ/vh4Zy2ms39gVuV6iRQJeZKp5hIYZ2gJYoaTXGnbaoIvVBiVnht0HvhihRP4H/jE52z7nsxloAPKstDrN51ep+G0a830Wi8l60RqVmKIlPxUhtsOFRJEITNQ/pOOEoZeq8W/7LPXtTE3DphDXLwMutQzDWmiQ8a60By0XhJZ3LWOp+1krhxPm+eN1pvfmw2Zj9cvG28nbfm5z/NW2fN2Zs9p7rWOazSQ0vta2fuNS2FR3eHruF1giK1C7blMHsbj3ct3eEvYpU9JKXTirinSqrcPZ8/rIncMto6hOVAe6/NQopMpXPrsho/fMjDWY4dJmhIq9QfaTvS9k20XezT1iloyTjFihi0WUEiqwB8LHgBuxxdkFsjXlknNHnh0NvCxSh8bHOUotMbNprnF6+PWB6x/CYsW/tYjrf/bDHZkpZY9MJYEvigPYW6qCvBnfaak0Y2cBsrvnYeSTyS+E0kvn2RRBFbM091TL4yP0DIldKTIhSv8GRxIpRIigoz5Evw1wLFHd/Pj2XxCON/h7GUQGrhw65Pempe6TEunKYVtCdrmKFy6LhzLqd73n5PO54hLS0387n1gSlFS2jDqcr16d3ZqdosaiSPqzywURy+uoXfWDhioCsYN3bWlLPntUjWH++tyxRBG375bcxcWJ/rT6Jz3RdfcLVtV5dEeYgqn5rh9q0g2pCxAX8LTdXS77Ssj538tmHfbaQnm6nT3dZ35ylAm7kNdNY5vBpd98V1qogv7GzyHnhhxqurHI0YkTKJcom4djYpYhL9cKHfpOm1iPlA5LW2EzG4va6uWHwJ40V82EXXGk+ainCo/vqzddGu9dBKiiu3UEb/EfR5KfiSJ+vt0Al2x0sRTKq/a1O8FLfKaWX4q6sIF9ZpHn9EheVPqJKiZ+Miw7CkUySauNAxCpXjzZOzk2Zd+lTMpY9zx2xlKhS9OjlPtYotrKKCdWuCeILrkzA/1gvCBzrNU6UNp6twKY9VJE9A5ZpNPAMJh2meSlgy/O0JrNcz5fHGpWXJ4q8FulXF+B0Hasbpn/BDzBJVEs7hGhhXLjWh1jcCaDw9LcJry/O6X8rNik4cY04vzp3unM/rq1C1Z/U7WVZB6tQ9VyZ1zy8cEmxeucQPaSxbQ6rMoggVGyqdnA9VcGgew/fsZAavNq9FZrVj4XpdzRjbL2jKEmTtCvFvKKdlWf4NJhLjOQ== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_createAttributeDefinition + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-create-scheme.ParamsDetails.json b/docs/api-reference/reference/classification-controller-create-scheme.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-create-scheme.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-create-scheme.RequestSchema.json b/docs/api-reference/reference/classification-controller-create-scheme.RequestSchema.json new file mode 100644 index 0000000000..bd1386b8b3 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-create-scheme.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["code","name"],"title":"CreateClassificationSchemeDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-create-scheme.StatusCodes.json b/docs/api-reference/reference/classification-controller-create-scheme.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-create-scheme.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-create-scheme.api.mdx b/docs/api-reference/reference/classification-controller-create-scheme.api.mdx new file mode 100644 index 0000000000..685baba9ca --- /dev/null +++ b/docs/api-reference/reference/classification-controller-create-scheme.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-create-scheme +title: "ClassificationController_createScheme" +description: "ClassificationController_createScheme" +sidebar_label: "ClassificationController_createScheme" +hide_title: true +hide_table_of_contents: true +api: eJztmFFvIjcQx7/KyE930kKA0PbCG0dSKZVOoSGXPiAUDbsD+G7X3tizJBTt5+n36CerxrsECCi9VH3kCa/HOx7/5+fB3rWyOTlkbc11onpqkKL3eqbj0DWwhp1NU3IPsSNkGsULykhFKkeHGTE5r3rjSaQcPRbk+bNNVqq3Do/aUaJ67AqKVGwNk2ExYZ6ntfuzb94a6fPiFqXFq5xUT9npN4pZ5nESH2vyYo1tQjujPDtt5qqMlMHsuCEhHzudy2xH7GW0E+m4cl87m0SKNacyehCWvq9MJcQlW1WWlRufW+OrMDuttvzsza0kmm6rdWi4x1QnwSnMUKeURGAd8IKgFhWW2qbI5AFhWnhtyHtwRUpN9b8pS85Z918TECl6xiwPYn3uXz7cXv3+9Wp0p17Jr0aM05Qgw3ihDTUcYRI6wuQgvpuiUkbe4/xf5jlQDWbWgTUk4mXWEcw0pYkPHmshhfC3fCbtbmfaTeJGZ9bqNLqffm41pj+dXzQuZt1Z55dZt92afjpY1MA6R1V6eKF9vZgnzQvw5JbkGl4nBKmdSyzHiduseDfSHQCvxOUlMeq0Im7fSZW71+NvayK3jHaPYflFe6/NPIIM05l1WY0fPefiHmJHCRnWmPoTbSfa3kXb+SFt/YIXglOMLKBNC4asAvCl4AXscnKh3xr4YB1o9uDI28LFBD62OUXQv7xttDrnH09YnrB8F5bdQyzvtn+2lGxJSyx5MJaBnrXnUBd11bHUXkvS2AZuY5Qz0onEE4nvIvHiTRIhtmaW6ph9FX6AUCqlZ2SCD9ScNwEhKSrMCAqjHwuCJaYFncriCcYfh7GMFOPch1n3rjnypqe4cJpXqjdeqymhIyd3vnJysNofvDtmxAsrl83c+oAR8kL11Bnm+mzZPtuPoBEoJa8kEJGsvnBuohrV5t42tppsWW3dFdWNX63LkFVP/fbHnbBgfa4foD+8hu+0UtEm/QvmPCgpO+V2e7O92tCwgX0LSnUB3T7vK7O9j2ozswG0Oh03o+E1DFNkOXtLJAfvhhEfbnIyMGI0CboEhs4mRcxwHc7mG6k+Qixs57W3Jny5H1anJTlPyUuyb2FgjWfNRdgff//VPe/VfngVwY2bo9F/Bn8+AjmvRfV05GBgE/IRhJDqdh2Kj+AenUYjrQEyza3TYu8zOz0tWNr7gERwaeMio/BKv0g0S82SDFcLbzXbzVZdxTCWKiYpEWYyDPWr1nzfK2y5g4o7eAHv+McApmc+y1PURhJUuFRsFZNjhbmWoNoSx3EuJ5FaCMe9sVqvp+jpq0vLUrofC3KritalaDOVjI8nZaQWhEnYRWsl4EmhCJW6cSchyfC0kNAOqnYZbd7oxzHl/ObYyc5WG96Emjutv89kFb4On6Su4JN8n4iUDdKEvRT61ipFMy9CvVWVT0kBFqLNi36v9lhYVW1Cs9qJcL2uRtzZ72TKUkX1UlieVTkpy/IfgbZihw== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_createScheme + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.ParamsDetails.json b/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.ParamsDetails.json new file mode 100644 index 0000000000..03597ce12f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"categoryId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.RequestSchema.json b/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.StatusCodes.json b/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.api.mdx b/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.api.mdx new file mode 100644 index 0000000000..c024932fd9 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-get-effective-attribute-schema.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-get-effective-attribute-schema +title: "ClassificationController_getEffectiveAttributeSchema" +description: "ClassificationController_getEffectiveAttributeSchema" +sidebar_label: "ClassificationController_getEffectiveAttributeSchema" +hide_title: true +hide_table_of_contents: true +api: eJztmM9u4zYQxl9lwFMC0H/jthvdXCctUmCRNMmmhyAIKHFkc1ciFXLkxjX0PH2PPlkxlGLH8WK36dmnKBQ5/PjxxzFHa+Eq9IqMsxdaJGJWqBBMbrLYNHOWvCsK9I9zpPM8x4zMEqdE3qQ14U22wFIJKSrlVYmEPojkfi2sKlEkIlOEc+dXF1pI4fGpNh61SMjXKIWxIhGVooWQIrRxkrWgVcUjA3lj56JpHnhgqJwNGPj9eDjkPxpD5k3FGkUiRCPF5Gsv7lRhdFwJ5MoUqCU4D7RAYDUYCJbGFYowgIK0DsZiCODrAvtCisxZQkscVlVV0Xky+Bw49npftEs/Y0bshmdTybSS0Xvnv98tcxr3HZACn1VZFdz08/Ts8fr890/nN7dCvlnpDam0QChVtjAWex6Vjg1xcuDYfXapxBDU/Dvz7LkGufPgLLJ5pfMIucFChxixM5Lh+VZMPZqM04nOeuN8OO5NPvw47KU/nJz2TvNJPv4pn4yG6Ye9Rc2c99huDy1M6Bbzp6EFBPRL9L1gNELh5qylec3YfevndsWvlT5IQYairnMOeYakTHFGbi9Iu3dv+193RLYjmkjfaJ++jyYEY+cSSlXkzpcdfvhccXjIPGq0ZFQRDrQdaHsXbSf7tE1rWjBOnHS1hLQmKFsANwkvYlehj+3OwpHzYCiAx+BqnyGEzFUoYXp23RuOT44PWB6wfBeWk30sb7c/tqi3pGmHAawjwGcTKOZF0zYsTTC8aeQit5ni68eBxAOJ7yLx9JskQuZsXpiMQis/QsiZMpAihCPsz/ugQNctZgi1NU81wlIVNR7S4gHG/w5jIwWpeYiz7tRWPDJgVntDq1g0pag8epHcP3DV82a1/68sK5EWjsu6OUaouNpKxEBVZrAcDbryzGAYrLelWjNQL3ECl2bRTNb/Sm+coEXzRXXHPPvQNcnu4RfnS0UiEb/9ccuUuFCZR5heXcAXXAn5AsaCqIoeG5u7CExn6+XN1QVcFYr4Ds3j9liIPY4uK7RwQ8pq5TVceafrjOAi3rFfnDuGjBmtumh9+Hh31d56+F7Eg/j8wczZQIbqyPk/f09Oki4OrSRc+rmy5q8YL0jge5fspkMPM6cxSIiSuudOSpBwp7xRlp9mG+8lbPaN23c2WsKZy+oS45BprQ1x7uH9aBc+7I/6wy4bqYyzERtYuUClinmoK8R3o8KWH5gjwQagrRLYILTj9OYUEz7ToCqUsXzOa1/wuxave6EqwypHLGyzTCFFsvM94BVlD1IsXCAeu16nKuAnXzQNNz/V6Fcte0v2LmUi7tdCm8DPWiS5KgLuydykZ3F03R3ZY9iytiu/a1SWaYwpnr8pSMF47nzEaB4aKRaodDym667DNMuwoldD934Q+DxvjuKv55yhVc1ebfx8c2Ri9K/KWq/bHrfuC9qm2agk/p8FNs2/Nokgzg== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_getEffectiveAttributeSchema + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-attribute-definitions.ParamsDetails.json b/docs/api-reference/reference/classification-controller-list-attribute-definitions.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-attribute-definitions.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-attribute-definitions.RequestSchema.json b/docs/api-reference/reference/classification-controller-list-attribute-definitions.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-attribute-definitions.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-attribute-definitions.StatusCodes.json b/docs/api-reference/reference/classification-controller-list-attribute-definitions.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-attribute-definitions.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-attribute-definitions.api.mdx b/docs/api-reference/reference/classification-controller-list-attribute-definitions.api.mdx new file mode 100644 index 0000000000..dcd6499ab4 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-attribute-definitions.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-list-attribute-definitions +title: "ClassificationController_listAttributeDefinitions" +description: "ClassificationController_listAttributeDefinitions" +sidebar_label: "ClassificationController_listAttributeDefinitions" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQgF9lwFMWoB3bcduNbq6dFimw2DTJpofACMbSyOauRCrkyI1r6Hn6Hn2yYijlx/Fit+nZJ9NDznB+Po7IrXIVeWTj7HmmEjUtMASTmzSKps6yd0VB/q4wgSfM3ixqphnlxhpZEZRWFXosickHldzOtfIUKmcDBZVs1WgwkJ+MQupNJSoqUarRavy1iRssTBa3hhxNQZkG54FXBJ7uawoMa+MKZAqAsKiDsRQC+LqgvtIqdZbJspjFqiq6II4/B7G9VSFdUYky4k1FKlFu8ZlSlgi8ZIFN6zJ57/z3l6UuoxerAntjl0oresCyKkT082R2d3n2+6ezq2ulX0V6xbgoCEpMV8ZSzxNmURA3B7HdlyyVFAIuv7PPXtYgdx6cJUle6TxBbqjIQrTYJVKq/S2b2XA8WoyztDfKB6Pe+P2Pg97ih5PT3mk+zkc/5ePhYPF+L6ip857a8vDKhC6YPw2vIJBfk+8FkxEUbim+dM4YT5lKbtt8Pkf80tO5Vmw4+nUmJmfEaIoZuz0jbe1er7/siGw1mkjfcJ++DyYEY5caSixy58sOP3qoxDyknjKybLAIB9oOtL2JtpN92iY1rwSnFFlAW9QMZQvgU8OL2FXko9xZOHIeDAfwFFztU4KQuoo0TGaXvcHo5N0BywOWb8JyvI/l9fPHlrJn0jJHAaxjoAcTOPZF0wrWJhgpGrvIbYpyXziQeCDxTSSefpNESJ3NC5NyaN2PEEqnDIxMcET9ZR8QsrrFjKC25r4mWGNR06EtHmD87zA2WjEuQ9x15zEkmoHS2hveqOR2qxaEnry8eZr5XrT/4x1VEq+cPMKWFIlCXqlEHWNljtfDY3xU6mU7Wm3yuqfXo39XgnOL4qOXHeMSdyfS3eAX50tklajf/rgWKlyozB1MLs7hC22UfgRhxVzFnBqbuwhIl8aPVxfncFEgy51Z9PZqH1ccfazIwhWjzdBncOFdVqcM5/FO/Zipd5AKk1VnrQ8fbi7aW47cg0RJzhtMnQ1suI5c//P3+CTp7PBGw0e/RGv+ivaCBrln6W478jB1GQUN0aVu3LkSNNygN2hlNEWmpfNG5p/qJfKdwmqYubQuKapM6syw9BqpRxv4oD/sD7rug6l0H0lg5QKXGPuOxViRXavwzAsIL88OwC4xO1l+OrFMD3xcFWisnOnaFzLX0nSrsDLi4VBp9XWi5lqtXGBZu90uMNAnXzSNiO9r8puWs7XkaSHVv503Wq0Is3gStkqQSdQkTakSiGMDVsl+z5Uj8wT8r2fSBLEWF5/CeEVptN5Nod28sL3dtiuu3ReyTaN05wTLf9XMm6b5F8Os0X8= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_listAttributeDefinitions + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-nodes.ParamsDetails.json b/docs/api-reference/reference/classification-controller-list-nodes.ParamsDetails.json new file mode 100644 index 0000000000..77db864e83 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-nodes.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"schemeId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-nodes.RequestSchema.json b/docs/api-reference/reference/classification-controller-list-nodes.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-nodes.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-nodes.StatusCodes.json b/docs/api-reference/reference/classification-controller-list-nodes.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-nodes.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-nodes.api.mdx b/docs/api-reference/reference/classification-controller-list-nodes.api.mdx new file mode 100644 index 0000000000..6704542fbe --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-nodes.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-list-nodes +title: "ClassificationController_listNodes" +description: "ClassificationController_listNodes" +sidebar_label: "ClassificationController_listNodes" +hide_title: true +hide_table_of_contents: true +api: eJztmM1SIzcQx1+lSyeokj9xkmVujiEpUrWBAEsOFEXJox5buzPSIPV4IVPzPHmPPFmqNYOxMbW73H2yrI/Wv1s/tdWuhSvRKzLOnmmRiFmuQjCZSWPXzFnyLs/R3+cm0J9OYxBSlMqrAgl9EMltLawqUCQipEss8EwLKTw+VMajFgn5CqUwViSiVLQUsp2mRFILeirjOvLGLkTT3PHCUDobMPD4eDjkD40h9aZkPSIRopFi8tbAjcqNjqohUyZHLcF5oCUCq8FAsDIuV4QBFMyrYCyGAL7KsS+kSJ0ltMRmVVnmnf+Dz4Ft17ui3fwzpsSx8BxAMq1k9N75709LncbdCEiBj6ooc+76dXpyf3n616fTq2shX3l6RWqeIxQqXRqLPY9Kx464ObDtPkepwBDU4jv77EQNMufBWeTgFc4jZAZzHaLFLpAMyrds6tFkPJ/otDfOhuPe5MPPw978p6Pj3nE2yca/ZJPRcP5hx6mZ8x7b46GlCZ0zXw0tIaBfoe8FoxFyt2AtzSZjt208XzzeVHonBRmKuk7Z5AmSMvkJuR0j7dm9nn/ZEdmuaCJ9o136PpoQjF1IKFSeOV90+OFjyeYh9ajRklF52NO2p+1dtB3t0jataMk4pYoYtHlFULQArhNexK5EH/udhQPnwVAAj8FVPkUIqStRwvTksjccHx3usdxj+S4sJ7tYXr/82KJ+IU07DGAdAT6aQDEvmrZjZYLhQyMXuU0VPzX2JO5JfBeJx98kEVJns9ykFFr5EULOlIEUIRxgf9EHBbpqMUOorHmoEFYqr3CfFvcw/jiMjRSkFiHuulVH8cqAaeUNPcWSaY7KoxfJ7R1XPa+8/ZESrEBaOi7YFhgR4toqEQNVmsFqNNjevddWZmFQP5dozcB2dtr4seQNiVftfD7JZ6Ed5ux61yW7xm/OF4pEIv74+5rBcKE09zC9OIMv+CTkMwtLojKG1djMRUa6SJ5fXZzBRa6In828buf444yD8xItXJGyWnkNF97pKiU4i8/qZ08PIWUsy85aHz7eXLQPHX4K8SK+cjBzNpChKqL937+To6SzQ08Szv1CWfNPtBck8FNLdtuhhxnHTUKU1LU7KUHCjfJGWW7NFOHCecPjUyJv5hVxe/tsJZy4tCowLplW2hCnGz6P1vFhf9QfdglIpZyAOIClC1SomHq6ynvbKrwgA4wMPDOzFdX1JSV8pEGZK2P5Glc+57GWp1uhSsOKRiziTaaEFMlG4d9idSfF0gViA3U9VwE/+bxpuPuhQv/UwrbiYM0ZgdtaaBO4rUWSqTzgjtZ1ChYHl921PIQXuLZ96DqVZfxiGuf/DaRgHjf+pmjuGimWqHS8iHU3PE1TLGlj4U7K5xu7vn6/n3IOVhWHax3SVzckWn9TVF23M67dF7RNs9ZI/J0FNs3/stgMoQ== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_listNodes + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-schemes.ParamsDetails.json b/docs/api-reference/reference/classification-controller-list-schemes.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-schemes.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-schemes.RequestSchema.json b/docs/api-reference/reference/classification-controller-list-schemes.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-schemes.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-schemes.StatusCodes.json b/docs/api-reference/reference/classification-controller-list-schemes.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-schemes.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-list-schemes.api.mdx b/docs/api-reference/reference/classification-controller-list-schemes.api.mdx new file mode 100644 index 0000000000..c32c011a58 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-list-schemes.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-list-schemes +title: "ClassificationController_listSchemes" +description: "ClassificationController_listSchemes" +sidebar_label: "ClassificationController_listSchemes" +hide_title: true +hide_table_of_contents: true +api: eJztl81u2zgQx19lwFMKyI7teHcb3bxOdpEFimSTND0ERkBJI4utRCqckTdeQ8+z77FPVgylxElctM3dJ9P8GP5n5scRuVGuRq/ZOHuWqVjNS01kcpOGrrmz7F1Zor8rDfFVWmCFpCJVa68rZPSk4ttFpDxS7SwhqXijJqOR/GRIqTe12FGxUm2kpt8auNGlycJukGtTYhaB88AFgsf7BolhZVypGQk0JA0Zi0TgmxKHKlKps4yWxayu67LXffiZxPZGkSjW0uJ1jSpWLvmMKYsHXhxn00lG753/8bTUZfhsFrE3dqkihQ+6qkvp+n12cnd5+vfH06trFb3y9Ip1UiJUOi2MxYFHnYWOsDmI7aFEqUIivfzBPjtRg9x5cBYleJXzCLnBMqNgsQ+kJPh7NrPxdJJMs3QwyUeTwfT9r6NB8svR8eA4n+aT3/LpeJS833Fq7rzHLj1cGOqd+cdwAYR+hX5AJkMo3VK09GKMx0zFt108tx4/V7qIFBsOuk7F5AmyNuUJux0jXe5ez7/siexWtIG+8S59HwyRscsIKl3mzlc9fvhQi3lIPWZo2eiS9rTtaXsTbUe7tM0aLgSnVLOAljQMVQfgU8EL2NXoQ7+zcOA8GCbwSK7xKQKlrsYIZieXg9Hk6N0eyz2Wb8Jyuovl9fZji9mWtMwhgXUM+GCIQ100XcfKkJGksQvcplquCHsS9yS+icTj75IIqbN5aVKmTn6AUColsWaEAxwuh6AhazrMEBpr7huElS4b3JfFPYw/D2MbKdZLCru+eP/ISsK08YbXKr7dqAS1Ry9vnnax4+3PPZ0q5MLJU2uJASLNhYrVoa7N4Wp8+HL/AT0t6wLWP7ceNT1ajbfKeq7F174r6ht/OF9pVrH669O1kOCoNncwuziDL7hW0WPyC+Y6xNHY3AUo+tCdX12cwUWpWe7Jsm4n32HGwXmNFq5Y20z7DC68y5qU4Szcox8dewepcFj31obw4eaiu9nI3UcWyRmDubPEhpvA8v//TY/i3g6vIzj3S23Nv8EeRSB3q6jfDj3MXYYUQZDUt3spFMGN9kZbac0149J5I+MzZm+ShqX9MpkRnLi0qTAsmTWZYakvko/O8dFwPBz1FUenUnEkgLUjrnSoNVaHjLy0CltGQBiBLSQv4vp0Lhkf+LAutbFychtfylgH0K3StRFNY5HxbYgWkSocsUzebBJN+NGXbSvd9w36dYfWSkKTSMJvF22kCtRZAH6jhJJYzdIUawE31FkV75ZWORlPkP95KrVON6LxyY9XYAbr/ZC262e2N5tuxrX7grZtVdSLYPmv2kXbtl8Bt2fBrw== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_listSchemes + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.ParamsDetails.json b/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.ParamsDetails.json new file mode 100644 index 0000000000..279380e6c7 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"categoryId","required":true,"in":"path","schema":{"type":"string"}},{"name":"attributeDefinitionId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.RequestSchema.json b/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.StatusCodes.json b/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.api.mdx b/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.api.mdx new file mode 100644 index 0000000000..31efeb6a2f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-remove-category-attribute-schema.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-remove-category-attribute-schema +title: "ClassificationController_removeCategoryAttributeSchema" +description: "ClassificationController_removeCategoryAttributeSchema" +sidebar_label: "ClassificationController_removeCategoryAttributeSchema" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQgF9lwFMC0L9x241urp0CKbpImmTTQxAEtDiyuSuRCjly4xp6nr5Hn6wYSrHjONht9tCTT5ZH5HB+Po44XAtXoldknD3XIhGTXIVgMpNG0cRZ8i7P0T94LNwSJ4pw7vxqTOTNrCK8ThdYKCFFqbwqkNAHkdythVUFikSk7fhzLaTw+FgZj1ok5CuUwliRiFLRQkgRGj3JWtCq5JmBvLFzUddyo0w9LzrFzFjT2vy9eu95YiidDRj4/bDf5x+NIfWmZOUiEaKWYvTWi1uVGx1jBJkyOWoJzgMtENgaDARL43JFGEDBrArGYgjgqxy7QorUWUJLrFaVZd5Gu/c5sO71vtFu9hlT4ih7TheZxmT03vlvD0udxv0ISIFPqihzFv08nj5cnf3+6ez6RshXnl6TmuUIhUoXxmLHo9JREBcH1t3lKBUYgpp/Y529qEHmPDiLHLzCeYTMYK5D1NgGkrH8mk49GA1nI512hll/2Bl9+LHfmf1wcto5zUbZ8KdsNOjPPuw5NXHeY5MeWpjQOvOnoQUE9Ev0nWA0Qu7mbEv9krG7Jp5bj19aei8FGYp2nbHKKZIy+ZTcnpImd6/HX7VENjPqSN9gn76PJgRj5xIKlWfOFy1++FSyekg9arRkVB4OtB1oexdtJ/u0jStaME5czLWEWUVQNABuCl7ErkQf5c7CkfNgKIDH4CqfIoTUlShhPL3q9IcnxwcsD1i+C8vRPpY3248t6i1p2mEA6wjwyQSKddE0gqUJhpNGLnKbKj7YHEg8kPguEk+/SiKkzma5SSk05kcIuVIGUoRwhN15FxToqsEMobLmsUJYqrzCQ1k8wPjfYaylIDUPcdWdro1nBkwrb2gVm7EZKo9eJHf33PW88vZ7G74CaeG4ZdSYI2FsAWkhEtFTpektB7229zMYeuttH1j3Nm1cp2G5t36zsau5e4vxZhdfuBQtaOh9dqzdFhyqViTbh1+cLxSJRPz6xw2D5EJpHmB8eQ5fcCXkMzsLojKmwdjMRabayF9cX57DZa6Ij9k8bw+XOOLookQL16SsVl7DpXe6SgnO4zH8ObjHkDLGZautCx9vL5uDER+deBJvUZg4G8hQFbfCP3+PTpJWD60kXPi5suavqC9I4KOZbJdDDxOnMUiIJrXPrSlBwq3yRll+mmwyI2GTWJbvsCBh6tKqwDhlXGlDXJ44H43j/e6g228Llkq5YHEASxeoULFUtW37rlbYIgYNYs/mrLa2wIaynVhvtjrhE/XKXBnLxaDyOb9r8LsTqjRs54BN2zgqpEh2LiNeU8gD3r5guJdi4QKx6vV6pgJ+8nlds/ixQr9q4FxycGeMzN1aaBP4WYskU3nAPS82JV4cXbXb/hi2MO561wqVZVzjZ4LvJaRgfncuWPim5H9c+e1g1fe1FAtUOtabdTt2nKZY0gste182LkybijI9++3s5oyTVHFKN2l/tbfjAm8auV43I27cF7R1vbGZ+D/bWNf/Ap+ciJI= +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_removeCategoryAttributeSchema + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-category-attribute-schema.ParamsDetails.json b/docs/api-reference/reference/classification-controller-set-category-attribute-schema.ParamsDetails.json new file mode 100644 index 0000000000..03597ce12f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-category-attribute-schema.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"categoryId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-category-attribute-schema.RequestSchema.json b/docs/api-reference/reference/classification-controller-set-category-attribute-schema.RequestSchema.json new file mode 100644 index 0000000000..4b41380b26 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-category-attribute-schema.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attributeDefinitionId":{"type":"string"},"requirement":{"type":"string","enum":["REQUIRED","RECOMMENDED","OPTIONAL","FORBIDDEN"]},"conditionOnAttributeDefinitionId":{"type":"string","description":"Deel 11 §32: this rule only applies when the product's value for this OTHER attribute equals conditionOnValue."},"conditionOnValue":{"type":"object","description":"Required together with conditionOnAttributeDefinitionId."}},"required":["attributeDefinitionId","requirement"],"title":"SetCategoryAttributeSchemaDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-category-attribute-schema.StatusCodes.json b/docs/api-reference/reference/classification-controller-set-category-attribute-schema.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-category-attribute-schema.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-category-attribute-schema.api.mdx b/docs/api-reference/reference/classification-controller-set-category-attribute-schema.api.mdx new file mode 100644 index 0000000000..c3deaddc60 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-category-attribute-schema.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-set-category-attribute-schema +title: "ClassificationController_setCategoryAttributeSchema" +description: "ClassificationController_setCategoryAttributeSchema" +sidebar_label: "ClassificationController_setCategoryAttributeSchema" +hide_title: true +hide_table_of_contents: true +api: eJztmM1y2zYQgF9lB5c6M9SfrbYJb4qkTNWpI1VW3IPGk4HIlYSUBGhgKVvV8HnyHnmyzoLUn+XESadHnUSBwGJ/vl0QuxEmQytJGT2IRSi6iXROzVXkh7pGkzVJgvajQ+pKwoWx6w6RVbOc8CZaYipFIDJpZYqE1olwuhFapihCEVXzB7EIhMX7XFmMRUg2x0AoLUKRSVqKQLhSTrgRtM54pSOr9EIUxV25EB29NfGaZzyVExlNqIlfySxLKsUbn5zRPHYi2sw+YUSss2XLSaHza7c29XCutNr640SjnSFptenx+0CgzlMRTsW4/+eHwbjfE4EY97vD6+v++57/NxxNBsP3nT9EIN4Nx28HvV7/vbgrvCWx33ioO9+nTSBidJFVGU8QoeghJtBqwZfPV5ch0FI5sHmCYHSyBu8ddPCwRA20RMisifOIfnKwkkmOMDe2XDOc/NYfw84jgPe5TBwc6HfLC+riWGk/+Jynj5UcVwEEMgukJVp4ULSEl6yvi6I4pGj6lZAdB+guEKQoYXVuvgpwj4woilK8y4x2JRKXzRb/HGvPNrebzdMXtzJRsWcP5lIlGAfg/YlQAQwrZRJJ6EDCLHdKoyvDUxf/G8VorbEvT4tMjM+y+yjTzDvrbaf3kQnu30xOAnhDcpYgpDJaKo01izL2A35zYNmejBSdk4sX9jnxmqfQaGTnpcYizBUmsatvMw8dPZ8Je5lxq305a8dR7XLevKy1X//SrM1+vnpTezNvzy9/nbdbzdnrE6O6xlosw+NzoDTGk+nQrtDWnIoRErNwpyR6f+4tPtT0AMA+i+whSZWUxB0LKWP3dP64InLPaPs5LK+Vc0ovAkhlMjc2rfDDx8ynWmQxRk1KJu5M25m2H6Lt6pS2Tk5LxokP+DiAWU6QlgDuCp7HLkPrx42GC2NBkQOLzuQ2QnCRyTCATm9ca15evTpjecbyh7Bsn2I52R+2GO9Jiw060IYAH5UjXxdVObBSTnHQyHhuI8lfumcSzyT+EIlvvkkif9jOExWRK9X3EHKldCQJ4QLrizpIiPMSM4Rcq/scy2/yc1k8w/j9MBaBILlwftejazyvdBjlVtHaX9BnKC1aEU7v+Ib9xNr/1AFIkZaGGwiZcR4qvtmHoiEz1Vi1GlUrQKFrbPZtgaKxu8PV3FZS6VK24kBrv08J6Fb3inz2RjUUVA/vjE0liVD8/teEWTEuUx+hMxrA37gWwRaPJVHmPc2ZNN53GfpbWr7aFdiTddQMOLzzv3yZ3wt55g7Naik9N57mKubDm9EARokk/sBnc05A9TMuhhlquCGpY2ljGJW3fBj4C8A2rK8g4gTKKml1uL4dlZ9k/NHGi7g4QNdoR4pyn4RfPrevwkoOrQMY2oXU6h8vzwXAH4VBtR1a6JoYXQBepeq5UsUFcCutkpqfujswAtg5isePKAygZ6Kcvew3ihVxYWRMSsOb9Va9WZVKGVHlQEYxlb5IVh2pY6mwhxsc0laX9V4R2PF95OhdhSF8pEaWSKW5BuU24Xcl+lMhM8VKtlivnZUiEOFRX+wkA+4CseQcCqdis5lJhx9sUhQ8fJ+jXZd5sWIHzhiL6UbEyvFzLMK5TByeKLs7QMTFtvnyCvZ5cGxENSg1Z8qqxFGIQHDqHLX0Cu5ZLVHGvpBsqgndcq/ahMXsBZwcXEWwXdGJIszom3PvDurLaOiPnVnVDkz9cSWsfOBslA+lssbb7suFH9uIROpF7o8cUcpkQGTOkdpF80kZ8VY9647NppwxMX+jLoqdd4j/s2OK4l//5WBt +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_setCategoryAttributeSchema + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-product-attribute-value.ParamsDetails.json b/docs/api-reference/reference/classification-controller-set-product-attribute-value.ParamsDetails.json new file mode 100644 index 0000000000..91b3148849 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-product-attribute-value.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-product-attribute-value.RequestSchema.json b/docs/api-reference/reference/classification-controller-set-product-attribute-value.RequestSchema.json new file mode 100644 index 0000000000..5d29326c91 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-product-attribute-value.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attributeDefinitionId":{"type":"string"},"value":{"type":"object","description":"Value shape depends on the attribute's dataType"},"source":{"type":"string","enum":["MANUFACTURER","SUPPLIER","IMPORT","USER","API","CALCULATED","INFERRED"]},"sourceOrganizationId":{"type":"string","description":"Which organization supplied this value (field-level federation, Deel 11 §75). Defaults to the caller's own organization."},"sourceReference":{"type":"string","description":"A document id/URL/system name to look up more detail — e.g. a certificate or ERP record."},"confidence":{"type":"number","description":"0..1"},"forceOverride":{"type":"boolean"}},"required":["attributeDefinitionId","value"],"title":"SetAttributeValueDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-product-attribute-value.StatusCodes.json b/docs/api-reference/reference/classification-controller-set-product-attribute-value.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-product-attribute-value.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-product-attribute-value.api.mdx b/docs/api-reference/reference/classification-controller-set-product-attribute-value.api.mdx new file mode 100644 index 0000000000..1d9a03f73e --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-product-attribute-value.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-set-product-attribute-value +title: "ClassificationController_setProductAttributeValue" +description: "ClassificationController_setProductAttributeValue" +sidebar_label: "ClassificationController_setProductAttributeValue" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uGzcQgK8y4EttYPVnK02iN0VSABV2rOrHeRCMgFrOSkx2yQ3Jla0KC/QQvUPukaP0JMVwV/9O0hR91JNW/BnODL8ZkrNmOkXDndSqL1iLdWJurYxk6Js6Wjmj4xjNB4tuYLTIQtd2zshZ5vCexxmygKXc8AQdGsta0zVTPEHWYmkxui9YwAx+zqRBwVrOZBgwqWgAdwsWMBsuMOGstWZuldJE64xUc5bnD8VEtO6NFisacSwn1MqhctTF0zQuta59tFpR24loPfuIoSOVDZntJFo/d2NRFyOp5MYZJxoFbOlNfkagQBsamdJU1mLeM2AXPEUQmKISFrQCt0DYrvWLBcEdH5OgPGBWZybE00UDhipLWGvKbtvvJm/bnfFk2BuygI0mg8FN33/2bwd3wzEL2GTk/7cHfRawTvumM7lpj3tdGvLubW847HXZw3atOzPnSv7Bv2XusVHvFzJcgN6bBTYjr6MAt5AWvHPgIpIYi0qMS4whQlHSFUAXMYZGA75+efnisgpdjHgWOwtOe8eEnDj7xYJ+VAerVHfuGWKEBtXzfjrUtg1Ch1mCyoEUtcnwpmZX1mEChCetGWv9CbIUEm1okxyXMfz951+A1XkVOISEh48DBG2gNxyAwVAb4dUJtYqkONJEZckMzYkm9Wq1QXMiTU5fojFS7E+baR0jVyzP9wNl+g0qNww+BMxJF5OAER7FZNdplueFPJtqZQvMr+oN+jnUjjRr1uunHfc8lqLY5ojLGEVAfqCdKoMSllLH3KEFDrPMSoXWgslirLL/LTLRGG1+PCzU4vnQeeJJ6n30pt39MOz9PumNxicbNHJ8FiMkPFxIhRWDXPgGvziQbL/nCVrL5z9Y58RrEGkDWnmIPGo+PKyXWDry+eDbyRSN5tWsKcLKVVS/qjRf/VqvzF5cv668jprR1cuo2ajPXp0Y1dHGYLE9PjgLYx6lW4BFs0RTsVIgxHpOuhyh5/25s3hf0z3ueiSy6yOnIO5QSLF3x+OHJZE7RpvPYXkrrZVqHkDC40ibpMQPn1ISD6FBgcpJHtszbWfafoq261Pa2plbEE6U7UUAs8xBUgC4TXgeuxSNb9cKLrQB6SwYLI4msKFOMYB2d1ipX11fnrE8Y/lTWDZPsRzvDlsUO9KERgtKO8AnaZ3Pi7JoWEoradMOrlRnEs8k/hSJr79LItDdN5ahs4X6HkLKlNbRXfmivD+LrMAMIVPyc4bF6+CcFs8w/nsY84A5Prd+1YO6BM20GGZGupWvOcyQGzSsNX2gqsGRtf+hpJGgW2iqh6TaeqSoVtFiNZ7K2rJRK2sbtrbeVjny2va9VvGoW6pteG+SAXsKj4jvgs2N2iX0/jVYNAXlx1ttEu5Yi/32fkyYaJvKD9Ae9OETrliwIWPhXOqdTEE03BVNehtQvlnk2EG1qW3sFSOOaw7PFw52Ik5e6buu/Rdz/eQxTOWcnOpCkfa8l1TcjQZ9GMTc0RMAirLG4eb6ERd3KSoYOa4ENwLKTYW+fyJsNv4SQgqxtJRWhdv7QXFpo2sdTaL0AR2trJMu82H69UvzulXKcasA9i23AdC1MSiXQwMdLdAG4FUqv0tVbAD33Eiu6KvDHc61kdS/BY/aDzgNoFvWL/xCQjpKnUTTpqrQqNbLZMpDSqa0/YRrwn0aLctwh1Jhhz9YdFtXbfWATQQcuHmbgRw+uVoac6koR2Umpr4iOKaMp5JUbBQp2NvNAtbaLwSexMhDwBYUYq0pW69n3OLExHlOzZ8zNKsicpbkuxkRMV0zIS19C9aKeGzxRNPt6cIuhmXGuYRdpBxaUDZytdoFAGMBo+DaL2HmVDZbIBc+yazL/k6xVMXX8HbzTw61PNjMaIchpu67Yx/2ss/gzh9Js7L8mfijjBn+SGmXPxa6am+6zye+bc1iruaZP45YIZPQ4Bnt0q7qdJhnvFXPemO9LkaM9SdUeb51jqP/5Jg8/wfWPauU +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_setProductAttributeValue + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-variant-attribute-value.ParamsDetails.json b/docs/api-reference/reference/classification-controller-set-variant-attribute-value.ParamsDetails.json new file mode 100644 index 0000000000..9f7ebe14e2 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-variant-attribute-value.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"variantId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-variant-attribute-value.RequestSchema.json b/docs/api-reference/reference/classification-controller-set-variant-attribute-value.RequestSchema.json new file mode 100644 index 0000000000..5d29326c91 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-variant-attribute-value.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"attributeDefinitionId":{"type":"string"},"value":{"type":"object","description":"Value shape depends on the attribute's dataType"},"source":{"type":"string","enum":["MANUFACTURER","SUPPLIER","IMPORT","USER","API","CALCULATED","INFERRED"]},"sourceOrganizationId":{"type":"string","description":"Which organization supplied this value (field-level federation, Deel 11 §75). Defaults to the caller's own organization."},"sourceReference":{"type":"string","description":"A document id/URL/system name to look up more detail — e.g. a certificate or ERP record."},"confidence":{"type":"number","description":"0..1"},"forceOverride":{"type":"boolean"}},"required":["attributeDefinitionId","value"],"title":"SetAttributeValueDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-variant-attribute-value.StatusCodes.json b/docs/api-reference/reference/classification-controller-set-variant-attribute-value.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-variant-attribute-value.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-set-variant-attribute-value.api.mdx b/docs/api-reference/reference/classification-controller-set-variant-attribute-value.api.mdx new file mode 100644 index 0000000000..d04ee4b034 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-set-variant-attribute-value.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-set-variant-attribute-value +title: "ClassificationController_setVariantAttributeValue" +description: "ClassificationController_setVariantAttributeValue" +sidebar_label: "ClassificationController_setVariantAttributeValue" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uGzcQgK8y4EttYPVnK02iN0VSABd2rOrHeTCMgFrOSkx2yQ3Jla0KC/QQvUPukaP0JMVwV1r9OElT9FFPWvFnODP8ZkjOmukUDXdSqyvBOqwXc2tlJEPf1NPKGR3HaD5YdHfcSK5c1zkjZ5nDOx5nyAKWcsMTdGgs69yvmeIJsg5bFqOvBAuYwc+ZNChYx5kMAyYV67CUuwULmA0XmHDWWTO3SmmidUaqOcvzh2IiWvdGixWNOJQTauVQOeriaRqXWjc+Wq2o7Ui0nn3E0JHKhsx2Eq2fu7Goj5FUcuOMI40CtvQmPyNQoA2NTGkq6zDvGbALniIITFEJC1qBWyBs1/rFguCOT0hQHjCrMxPi8aIBQ5UlrHPPbrrvpm+7vcl0NBixgI2nw+H1lf+8uhnejiYsYNOx/98dXrGA9brXvel1dzLo05B3bwej0aDPHrZr3Zo5V/IP/i1zD416v5DhAvTOLLAZeR0FuIW04J0DZ5HEWNRiXGIMEYqSrgD6iDG0WvD1y8sX53XoY8Sz2Flw2jsm5MTZLxb0o9pbpV65Z4QRGlTP+2lf2y4IHWYJKgdSNKaj64ZdWYcJEJ60Zqz1J8hSSLShTXJcxvD3n38B1ud14BASHj4OELSBwWgIBkNthFcn1CqS4kATlSUzNEeaNOv1Fs2JNDl9icZIsTttpnWMXLE83w2U+29QuWHwIWBOupgEjPEgJvtOszwv5NlUK1tgftFs0c++dqRZu9k87rjjsRTFNkdcxigC8gPtVBmUsJQ65g4tcJhlViq0FkwWY539b5GJxmjz42GhFs+HzhNPUu+jN93+h9Hg9+lgPDnaoLHjsxgh4eFCKqwZ5MI3+MWBZPs9T9BaPv/BOkdeg0gb0MpD5FHz4WG9xNKRzwdfJVO02heztghrF1HzotZ+9WuzNntx+br2OmpHFy+jdqs5e3VkVE8bg8X2+OAsjHmUbgEWzRJNzUqBEOs56XKAnvdnZfGupjvcDUhk30dOQdy+kGLvDsePSiIrRtvPYXkjrZVqHkDC40ibpMQPn1ISD6FBgcpJHtsTbSfafoq2y2PauplbEE6U7UUAs8xBUgC4TXgeuxSNb9cKzrQB6SwYLI4msKFOMYBuf1RrXlyen7A8YflTWLaPsZxUhy2KijSh0YLSDvBJWufzoiwaltJK2rS9K9WJxBOJP0Xi6++SCHT3jWXobKG+h5AypXV0Vz4r788iKzBDyJT8nGHxOjilxROM/x7GPGCOz61fda8uQTMthpmRbuVrDjPkBg3r3D9Q1eDA2v9Q0kjQLTTVQ1JtPVJUq+iwBk9lY9lqlLUN21hvqxx5Y/teq3nULdU2vDfJgB2Fx8R3weZG7RJ6/xosmoLy4602CXesw357PyFMtE3lB+gOr+ATrliwIWPhXOqdTEE0qoomgw0o3yxyVFBtahs7xYjDmsPzhYNKxNErverafTE3jx7DVM7JqS4Uac97ScXteHgFw5g7egJAUdbY31w/4uw2RQVjx5XgRsDQaJGFDq78E2Gz8ecQUoilpbQ63NwNi0sbXetoEqUP6GllnXSZD9OvX9qXnVKOWwWwa7kNgK6NQbkcGuhpgTYAr1L5XapiAyhJswH0uMO5NpL6t+BR+x6nAfTL+oVfSEhHqZNo2lQVWvVmmUx5SMmUtp9wTbhPo2UZbl8qVPiDRbfRqtIDNhGw5+ZtBnL45BppzKWiHJWZmPqK4LhnPJWkYsuzVFjLAtbZLQQexchDwBYUYp17tl7PuMWpifOcmj9naFZF5HgJMyLifs2EtPQtWCfiscUjTbenCzsblRnnHKpI2begbORqVQUAYwGj4NotYeZUNlsgFz7JrMv+XrFUzdfwqvlHh1oebGZ0wxBT992xDzvZZ3jrj6RZWf5M/FHGDH+ktMsfC121N93nE9+2ZjFX88wfR6yQSWjwjHapqjrt5xlv1bPeWK+LERP9CVWeb53j6D85Js//Abd9qyg= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_setVariantAttributeValue + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-verify-attribute-value.ParamsDetails.json b/docs/api-reference/reference/classification-controller-verify-attribute-value.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-verify-attribute-value.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-verify-attribute-value.RequestSchema.json b/docs/api-reference/reference/classification-controller-verify-attribute-value.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/classification-controller-verify-attribute-value.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-verify-attribute-value.StatusCodes.json b/docs/api-reference/reference/classification-controller-verify-attribute-value.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/classification-controller-verify-attribute-value.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/classification-controller-verify-attribute-value.api.mdx b/docs/api-reference/reference/classification-controller-verify-attribute-value.api.mdx new file mode 100644 index 0000000000..2608d946ba --- /dev/null +++ b/docs/api-reference/reference/classification-controller-verify-attribute-value.api.mdx @@ -0,0 +1,69 @@ +--- +id: classification-controller-verify-attribute-value +title: "ClassificationController_verifyAttributeValue" +description: "ClassificationController_verifyAttributeValue" +sidebar_label: "ClassificationController_verifyAttributeValue" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2SzByMIaHFkc1ciFXLkJhX0PH2PPtliKMVO4sVuc/fJ9JAc/jn8ccxxLVyJXpFx9kKLRMxyFYLJTBpNM2fJuzxHf79Bb7KnKZE3y4rwVuUVCilK5VWBhD6IZFELqwoUiTBaSOHxoTIetUjIVyiFsSIRpaK1kCKkayyUSGpBTyXPCOSNXYmmueOJoXQ2YOD+8XDEHxpD6k3JokQiRCPFZDjc77hVudFROmTK5KglOA+0RmA1GAg2xuWKMICCZRWMxRDAVzn2hRSps4SW2K0qy7wLwuBLYN/1vmi3/IIpcRQ8R5FMKxm9d/7nw1KncT8CUuCjKsqcTb9Pz+6vzv/6dH59I+SbnV6TWuYIhUrXxmLPo9LREBcH9t3nKBUYglr9ZJ29qEHmPDiLHLzCeYTMYK5D9NgFkmn5kU89moyXE532xtlw3Jt8+HXYW/5ycto7zSbZ+LdsMhouP+xtaua8x/Z4aG1Ct5m/Da0hoN+g7wWjEXK3Yi3NS8YWbTx3O36p9E4KMhR1nbPLMyRl8jNye07as3s7/qojsp3RRPq+g+VHE4KxKwmFyjPniw4/fCzZPaQeNVoyKg8H2g60vYu2k33aphWtGadUEYO2rAiKFsBtwovYleij3Vk4ch4MBfAYXOVThJC6EiVMz656w/HJ8QHLA5bvwnKyj+XN7scW9Y407TCAdQT4aALFvGhaw8YEw4dGLnKbKn5vHEg8kPguEk9/SCKkzma5SSm08iOEnCkDKUI4wv6qDwp01WKGUFnzUCFs+Jl7SIsHGP8/jI0UpFYhrvqqmOKZAdPKG3qKxdISlUcvksUdVz1vdvvOOqxAWjsu4EoXIk5cZyVioEoz2IwG6nl8LxIdBrXRzaD1xeVYDCBrfqHxmpFucXxW2nHOe+9Msmv84XyhSCTiz883TIYLpbmH6fwCviKv0MGwJipjXI3NXISkC+Xl9fwC5rkifjfzvL3zjyOOLku0cE3KauU1zL3TVUpwEd/Vz9E6hpS5LDtvffh4O29fOvwW4kl852DmbCBDVWT7v38nJ0nnh54kXPqVsuaf6C9I4LeW7JZDDzOnMUiIkrp2JyVIuFXeKMutmSJcOW+4f3tibH91uBLOXFoVGKdMK22I8w2fR7vxYX/UH3YZSKWcgTiAfM6FirmnK7pfe4UdM9Ce804CPFPzKsLbG0v4SIMyV8byna58zn0tUAuhSsPqRkKKt1AJKZJY+Xdc3UmxZhqThajrpQr4yedNw+aHCv1TS9uGo7VkBha10CZwW4skU3nAPYHbJCyOrrqLeQw7ul4L74zKMn9RIf9zIAUDGf+iaO4aKdaodLyEddcxTVMs6cWUvXTPt3V73+aXMQGrisOzDeGb2xHdf1dPXbcjbtxXtE2zlUf8nRU2zTesbw5l +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ClassificationController_verifyAttributeValue + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-accept.ParamsDetails.json b/docs/api-reference/reference/connections-controller-accept.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-accept.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-accept.RequestSchema.json b/docs/api-reference/reference/connections-controller-accept.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/connections-controller-accept.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-accept.StatusCodes.json b/docs/api-reference/reference/connections-controller-accept.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-accept.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-accept.api.mdx b/docs/api-reference/reference/connections-controller-accept.api.mdx new file mode 100644 index 0000000000..7d0d0d04a5 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-accept.api.mdx @@ -0,0 +1,69 @@ +--- +id: connections-controller-accept +title: "ConnectionsController_accept" +description: "ConnectionsController_accept" +sidebar_label: "ConnectionsController_accept" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEEtDiyuCuRWnLkJhX0PH2PPlkxlOJk40W2uftkitQM/5z5cUyqEa5Cr8g4e6FFIhbOWkz5MSycJe+KAv29SlOsSEhRKa9KJPRBJKtGWFWiSITRQgqPX2vjUYuEfI1SGCsSUSnKhRQhzbFUImkEPVZsEcgbuxFte8eGoXI2YODx6XjCPxpD6k3FOkQiRCvFbDzeH7hVhdFRPGTKFKglOA+UI7AaDARb4wpFGEDBug7GYgjg6wKHQorUWUJL7FZVVWHS6Gn0ObDvZl+0W3/GNEbBc9DIdJLRe+d//FrqNO5HQAp8UGVVcNev87P7q/M/Pp1f3wj5aqXXpNYFQqnS3FgceFQ6dsTJgX0POUolhqA2P5hnL2qQOQ/OIgevdB4hM1joED32gWQ43vKpJ7PpeqbTwTQbTwezDz+PB+ufTk4Hp9ksm/6SzSbj9Ye9RS2c99ilh3IT+sX8ZSiHgH6LfhCMRijchrW0LxlbdfF8XvFLpXdSkKGo65xdniEpU5yR23PS5e71+1c9kZ1FG+n7DpYfTQjGbiSUqsicL3v88KFi95B61GjJqCIcaDvQ9i7aTvZpm9eUM06pIgZtXROUHYC7ghexq9DHfmfhyHkwFMBjcLVPEULqKpQwP7sajKcnxwcsD1i+C8vZPpY3z3+2qJ9J0w4DWEeADyZQrIum69iaYDhp5CK3qeITxoHEA4nvIvH0TRIhdTYrTEqhkx8h5EoZSBHCEQ43Q1Cg6w4zhNqarzXCVhU1HsriAcb/D2MrBalN6Gbd3Z3YLGBae0OP8aa0RuXRi2R1x1ee10t9885VIuWO72aVC90djHKRiJGqzGg7Gb2YddQY3Y52hl2cWNoLNddMbkfdk6YeZ15i3yX7xm/Ol4pEIn7/84YBcKEy9zBfXsAXfBTyKec5URXDZ2zmIgt9xC6vlxewLBTx8Zjt9tIc3zi6rNDCNSmrldew9E7XKcFFPD5n/d47hpTxq3pvQ/h4u+wONHzkYSPeWrBwNpChOiL87z+zk6T3Q48SLv1GWfN39Bck8JFK9tOhh4XTGCRESX27lxIk3CpvlOXWQhFunDc8PifyZl0TtxeFCmEnV8KZS+sSo8m81oa4rHA+uoWPh5PhuC80KuVCwwHkFJcqlpj+bv0CDnimA3ZJ/iacu11I+ECjqlDG8j6tfcFjHTgroSrDUibd7DtkpUjiRb53fSdFzsAlK9E0axXwky/alru/1ugfO6q2HJU153rVCG0Ct7VIMlUE3NO2q6ni6KrfZ8fwTNG3mvtOZZmzWJf5Q4AUDF784tDetVLkqHTcVk0/MH+Ky5PJXvXm/bfbUsvLWE9VzZHZRe/VLojuv6unabo3btwXtG27k0f8zArb9j9wcfPK +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ConnectionsController_accept + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-list.ParamsDetails.json b/docs/api-reference/reference/connections-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-list.RequestSchema.json b/docs/api-reference/reference/connections-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/connections-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-list.StatusCodes.json b/docs/api-reference/reference/connections-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-list.api.mdx b/docs/api-reference/reference/connections-controller-list.api.mdx new file mode 100644 index 0000000000..5b4b99fe0b --- /dev/null +++ b/docs/api-reference/reference/connections-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: connections-controller-list +title: "ConnectionsController_list" +description: "ConnectionsController_list" +sidebar_label: "ConnectionsController_list" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQx19lwFMWkB3bcduNbq6TFimwSBpn00MQBBQ1srhLkQo58sY19Dx9jz5ZMZTiuHGRbe4+maLI/3z9NCY3wtXoJWlnL3KRirmzFhU/hrmz5J0x6B+MDiQSUUsvKyT0QaR394nwGGpnAwaRbsRkNOKfHIPyumYFkQrRJmL6Xy9updF5NAuF1AbzBJwHKhE8PjYYCFbaGUkYQELWBG0xBPCNwaFIhHKW0BLLyro2WkWl4y+BtTciqBIrySNa1yhS4bIvqGIEnsMl3bmM3jv//WXK5bizKpDXdikSgU+yqg1P/Tw7e7g+//3z+eJGJK8iXZDMDEIlVaktDjzKPE5E48DaQ85ShSHI5Xfs7GUNCufBWeTkVc4jFBpNHqJin0gu61ua+Xg6yaa5GkyK0WQw/fjjaJD9cHI6OC2mxeSnYjoeZR/3gpo777ErD5U69MF801RCQL9CPwg6RzBuyb70zmiPuUjvuny+RLzr6X0iSFP065wlz5CkNmfk9kS62r1ef90T2e1oI33jffo+6RC0XSZQSVM4X/X44VPN8qA85mhJSxMOtB1oexdtJ/u0zRoqGScliUHLGoKqA3Db8CJ2Nfo47ywcOQ+aAngMrvEKIShXYwKzs+vBaHLy4YDlAct3YTndx/Lm5c8W8xfScocBrCPAJx0o9kXdTax00Fw0cpFbJflscCDxQOK7SDx9k0RQzhZGKwqd+xFC7pSBJCEc4XA5BAl502GG0Fj92CCspGnw0BYPMP5/GNtEkFyGzur21sPbAqrGa1qL9G4jMpQePV942vv9UN+4LVVIpeM71RK7yxOVIhXHstbHq/Hxrkm2yInpr1XP5heMaofZsxM9vxxTP5X0g1+crySJVPz2xw1X3IVaP8Ds6gK+4lokz0UuieqYL20LF4vfp+hycXUBV0YSn4d5315d44qjyxotLEjaXPocrrzLG0VwEc/LRf+xfQDFvNW92hA+3V51Jxg+4/Am/pZg7mwgTU1k9u+/pidpr0PrBC79Ulr9Z9QLCfAZKunNoYe5yzEkEF3qx70rIYFb6bW0PJpLwqXzmt/PiLzOGuLx3MgQtu4mcOZUU2HcMmtyTdxHuB5d4KPheDjqO4tU3Fk4gbULVMnYU6yMFdmhAV5wgB6HfyVz+9ERPtFxbaS2/Fk23vC7DpU7IWvNjow727uEli4Qr9hsMhnwszdty9OPDfp1B9GKk5Bxae/u20SUKPNI8UYwD6mYKYU1+xU7p0j3myXjvmX413PuXrJhx7bOv0IwqvevpF3vaG823Yob9xVt24qkd4L4WbT3bdv+A8M7rBc= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ConnectionsController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-reject.ParamsDetails.json b/docs/api-reference/reference/connections-controller-reject.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-reject.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-reject.RequestSchema.json b/docs/api-reference/reference/connections-controller-reject.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/connections-controller-reject.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-reject.StatusCodes.json b/docs/api-reference/reference/connections-controller-reject.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-reject.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-reject.api.mdx b/docs/api-reference/reference/connections-controller-reject.api.mdx new file mode 100644 index 0000000000..bc4b2a4cc1 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-reject.api.mdx @@ -0,0 +1,69 @@ +--- +id: connections-controller-reject +title: "ConnectionsController_reject" +description: "ConnectionsController_reject" +sidebar_label: "ConnectionsController_reject" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2SzByMIaHFkcVciFXLkJjX0PH2PPtliKMXxxotsc/fJFKkZ/jnz45jURrgKvSLj7IUWiZg5azHlxzBzlrwrCvT3Hr9gSkKKSnlVIqEPIllshFUlikQYLaTw+FAbj1ok5GuUwliRiEpRLqQIaY6lEslG0FPFFoG8sSvRNHdsGCpnAwYeHw9H/KMxpN5UrEMkQjRSTIbD/YFbVRgdxUOmTIFagvNAOQKrwUCwNq5QhAEULOtgLIYAvi6wL6RInSW0xG5VVRUmjZ4GXwL73uyLdsvnKHgOGplWMnrv/M9fS53G/QhIgY+qrAru+n16dn91/ten8+sbIV+t9JrUskAoVZobiz2PSseOODmw7z5HqcQQ1Oon8+xFDTLnwVnk4JXOI2QGCx2ixy6QDMdbPvVoMl5OdNobZ8Nxb/Lh12Fv+cvJae80m2Tj37LJaLj8sLeomfMe2/RQbkK3mL8N5RDQr9H3gtEIhVuxlmaXsUUbz5cV7yq9k4IMRV3n7PIMSZnijNyekzZ3r9+/6ohsLZpI3w+w/GhCMHYloVRF5nzZ4YePFbuH1KNGS0YV4UDbgbZ30XayT9u0ppxxShUxaMuaoGwB3Ba8iF2FPvY7C0fOg6EAHoOrfYoQUlehhOnZVW84Pjk+YHnA8l1YTvaxvHn5s0X9Qpp2GMA6Anw0gWJdNG3H2gTDSSMXuU0VnzAOJB5IfBeJp2+SCKmzWWFSCq38CCFXykCKEI6wv+qDAl23mCHU1jzUCGtV1HgoiwcY/z+MjRSkVqGddXt3YrOAae0NPcWb0hKVRy+SxR1feV4v9c07V4mUO76bVS60dzDKRSIGqjKD9WiwM+tgY3Qz2Bq2cWJpO2qumdyWumdNHc68xK5Ldo0/nC8ViUT8+fmGAXChMvcwnV/AV3wS8jnnOVEVw2ds5iILXcQur+cXMC8U8fGY7fbSHN84uqzQwjUpq5XXMPdO1ynBRTw+Z93eO4aU8as6b334eDtvDzR85GEjXjbMnA1kqI4I//fv5CTp/NCThEu/Utb8E/0FCXykkt106GHmNAYJUVLX7qQECbfKG2W5NVOEK+cNj0+JvFnWxO1ZoULYypVw5tK6xGgyrbUhLiucj3bhw/6oP+wKjUq50HAAOcWliiWmu1vvwAEvdMA2yd+Fc7sLCR9pUBXKWN6ntS94rAVnIVRlWMqonX2LrBRJd5GPru+kyBm4ZCE2m6UK+MkXTcPdDzX6p5aqNUdlyblebIQ2gdtaJJkqAu5p29ZUcXTV7bNjeKHoe81dp7LMWazL/CFACgYvfnFo7hopclQ6bqtNNzBNU6xox2SvevP+226p+WWsp6rmyGyj92oXRPc/1LPZtG/cuK9om2Yrj/iZFTbNN9cP9As= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ConnectionsController_reject + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-request.ParamsDetails.json b/docs/api-reference/reference/connections-controller-request.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-request.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-request.RequestSchema.json b/docs/api-reference/reference/connections-controller-request.RequestSchema.json new file mode 100644 index 0000000000..50b7af11ff --- /dev/null +++ b/docs/api-reference/reference/connections-controller-request.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"targetOrganizationId":{"type":"string","description":"Organization ID to connect with"},"type":{"type":"string","enum":["BUSINESS","DATA","API","SUPPLY","DISTRIBUTION","SERVICE","ORDERING","INTEGRATION"]},"capabilities":{"example":["product.read","inventory.read","order.create"],"description":"Capabilities requested (Deel 15 §10). Each side authorizes independently.","type":"array","items":{"type":"string"}}},"required":["targetOrganizationId","type"],"title":"RequestConnectionDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-request.StatusCodes.json b/docs/api-reference/reference/connections-controller-request.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-request.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-request.api.mdx b/docs/api-reference/reference/connections-controller-request.api.mdx new file mode 100644 index 0000000000..b4ab051333 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-request.api.mdx @@ -0,0 +1,69 @@ +--- +id: connections-controller-request +title: "ConnectionsController_request" +description: "ConnectionsController_request" +sidebar_label: "ConnectionsController_request" +hide_title: true +hide_table_of_contents: true +api: eJztmF9vGjkQwL/KyE+pZAgk9K7ljQBXcbomHJCcTlFUmd2Bdbtrb+1ZGor28/R79JOdxrsEEnLtRbpHnti1vfP358HjjbA5OkXamlEsuqJvjcGIX33fGnI2TdF9cPi5QE9Cilw5lSGh86J7eydFPXNh47XobsKrdhiLLrkCpYisITTEUyrPUx0FTacfvTU85qMEM8VPtM5RdIWdf8Qo6HFsF2n0YVa5JdKVWyqjvz4Y+/CVJ6fNUkgRo4+cznmB6Ir99TAaAFmIKvfgi6ZElLIWcCgITZGJ7q24uJ6OLofTqZBi0Jv1hBS98UhIMb0ej//4m0dH09lkdHE9G11d8vhwcjPqD4UUV5PBcDK6fCekGF3Ohu8mvbDkrpQiUrma61RvvcN7leUpsr7c2biIqOlQxUIKbVZoyLr1dsC6GF0zcqgIxd1Th/t7gqHODMZwMkBMof0avn9rt141YaiiBLyOEVRBiXX6K3rQJsYcTYyG0nVTbEMjlHNqzaYQZv4wVGVZyr2s3z6fqlranRSkiT0Vk8q6HW4DsiwsSPO5Nb6KzVmrzT+P/eTMdVqtw4kbleq4yvdC6RRjCdYBJbiNBqy0TRWhBwXzwmuD3oMrUmSP/ydY0Tnrfr4ssvHz6G1pEBe9wYfJ8M/r4XR2wPaU1DxFyFSUaIMNxiMMBOXAspscpQy9V8uf6DmIGiysA2uQg5dZh7DQmMY+SKwD+fz+28mM252zeSeOGmeL1lmj8+aXVmP++vxt4+2iszj7ddFpt+ZvDpzqW+ewSg8l2tfO8F4Fj26FrhGoTe2SbXkCXojnzuN9S/e4G7LIAZLSaUXcYyFV7p6un9RE7hjtPIfle+29NksJmUoX1mU1fnifs3iIHPLu0ir1R9qOtL2ItvND2noFJYxTpIhBmxcEWQXgQ8EL2OXowrg1cGIdaOK/Bm8LFyH4yOYooTeYNFpn56+OWB6xfBGWnUMsZ7s/W4x3pMUWPRhLgPfaU6iLuhpYaa85aWQDt5HiE+eRxCOJLyLx7Q9J5HP/ItUR+cr8ACFXSk+KEE6wuWyCgrioMEMojP5cIKxUWuCxLB5h/O8wclOplr7S+tBL82ceo8JpWovu7UbMUTl03EOXh23cT3rwDCmx3Kzntu7JKRFdcapyfbpqn+6rZa0cnLpb35owZVwr1LaG1AyzX/WQrB9+sy5TJLri979mnHXrc/0BeuMRfML1rlFMiPIQM94Tk921wHCb939r43eI1JL2mu7HrfJL++OSVyxsUF3n7Go6HsE4VcQHdKia+Se3Brzi5CpHA1NSJlYuhnGlFkbhAL+od/8riHgD5LW0Jry/GVdHKj508Ue8uaFvjSdNRdhE3791zru1HFpL2A+Gl8CHOlmrQwd9G6OXEEyqn2tTvIQb5bQy/NRXhEvrNM/3iJyeF8TP/VR5/2CuhIGNigzDJ70i1sSFjeGoHG81281WXepUxKWOs8mMZSoUOaMCHnt4wo5P2PH5KJ4PhYDwnk7zVGnDpaJwKc9V6N4KlWu2pV2p3981CTPevRWbzVx5vHZpWfLw5wLduoJ6xXGYh/sTzniCKg47ayOYz2Avl+7GjO3g5WkRLjaelvFSbr/oRRHm9MO1d3vbcHwVivC8vgPLQvEWTn3hQqO+8IWFFDavXOJLMh7biFSZZREKsKhkcrj5RmYvaE+2YvBqezFj1nsWbjbVipn9hKYshaxdIX4X5V1Zlv8AIH7V9Q== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ConnectionsController_request + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-suspend.ParamsDetails.json b/docs/api-reference/reference/connections-controller-suspend.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-suspend.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-suspend.RequestSchema.json b/docs/api-reference/reference/connections-controller-suspend.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/connections-controller-suspend.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-suspend.StatusCodes.json b/docs/api-reference/reference/connections-controller-suspend.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-suspend.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-suspend.api.mdx b/docs/api-reference/reference/connections-controller-suspend.api.mdx new file mode 100644 index 0000000000..400d0cbceb --- /dev/null +++ b/docs/api-reference/reference/connections-controller-suspend.api.mdx @@ -0,0 +1,69 @@ +--- +id: connections-controller-suspend +title: "ConnectionsController_suspend" +description: "ConnectionsController_suspend" +sidebar_label: "ConnectionsController_suspend" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEEtDiyuSuRWnLkJhX0PH2PPlkxlGJ740W2uftkitQM/xz+ZkyqFq5Er8g4e6VFImbOWkz5McycJe/yHP1jqEKJVgspSuVVgYQ+iGRRC6sKFIkwPOTxa2U8apGQr1AKY0UiSkVrIUVI11gokdSCnku2COSNXYmmeWDDUDobMPD4eDjiH40h9aZkISIRopFiMhweDtyr3OioHjJlctQSnAdaI7AaDAQb43JFGEDBsgrGYgjgqxz7QorUWUJL7FaVZW7S6GnwObDv+lC0W37GlDgKnqNGppWM3jv/49dSp/EwAlLgkyrKnLt+nV483lz+8eny9k7IVyu9JbXMEQqVro3FnkelY0ecHNh3n6NUYAhq9YN5DqIGmfPgLHLwCucRMoO5DtFjF0im4y2fejQZLyc67Y2z4bg3+fDzsLf86ey8d55NsvEv2WQ0XH44WNTMeY/t9tDahG4xfxlaQ0C/Qd8LRiPkbsVamn3GFm08dyveV/ogBRmKui7Z5QWSMvkFuQMn7d69fv+mI7K1aCJ938HyownB2JWEQuWZ80WHHz6V7B5SjxotGZWHI21H2t5F29khbdOK1oxTqohBW1YERQvgtuBF7Er0sd9ZOHEeDAXwGFzlU4SQuhIlTC9uesPx2ekRyyOW78Jycojl3e7PFvWONO0wgHUE+GQCxbpo2o6NCYY3jVzkNlV8xDiSeCTxXSSev0kipM5muUkptPIjhFwpAylCOMH+qg8KdNVihlBZ87VC2Ki8wmNZPML4/2FspCC1Cu2s28sTmwVMK2/oOd6Ulqg8epEsHvjK83qpb1+6CqS149tZ6UJkhy9ViRio0gw2o8HetIPa6Gaws2wjxeL29Nwyuy13L6o6oHmRXZfsGr85XygSifj9zztGwIXSPMJ0fgVf8FnIl11fE5UxgMZmLtLQxez6dn4F81wRH5DZ7mCj4xsn1yVauCVltfIa5t7pKiW4igforMu+U0gZwLLz1oeP9/P2SMOHHjbi5IKZs4EMVRHif/+ZnCWdH3qWcO1Xypq/o78ggQ9VspsOPcycxiAhSuranZQg4V55oyy3Zopw5bzh8SmRN8uKuD3LVQhbuRIuXFoVGE2mlTbEhYX3o134sD/qD7tSo1IuNRxA3uNCxSLT3a738IAdH7Db5W/iuU1EwicalLkyllO18jmPtegshCoNaxm102+plSKJd/kX3w9SrJm5ZCHqeqkCfvJ503D31wr9c8vVhuOy5N1e1EKbwG0tkkzlAQ/EbeuqOLnpcu0Udhx9K7rrVJZJi7WZPwZIwejFrw7NQyPFGpWOqVV3A9M0xZL2TA4qOOfgNqvm17GmqopDsw3fqzyI7r+rp67bN+7cF7RNs5VH/MwKm+Y/jsX2pA== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ConnectionsController_suspend + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-terminate.ParamsDetails.json b/docs/api-reference/reference/connections-controller-terminate.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-terminate.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-terminate.RequestSchema.json b/docs/api-reference/reference/connections-controller-terminate.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/connections-controller-terminate.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-terminate.StatusCodes.json b/docs/api-reference/reference/connections-controller-terminate.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-terminate.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/connections-controller-terminate.api.mdx b/docs/api-reference/reference/connections-controller-terminate.api.mdx new file mode 100644 index 0000000000..a163940f55 --- /dev/null +++ b/docs/api-reference/reference/connections-controller-terminate.api.mdx @@ -0,0 +1,69 @@ +--- +id: connections-controller-terminate +title: "ConnectionsController_terminate" +description: "ConnectionsController_terminate" +sidebar_label: "ConnectionsController_terminate" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEEtDiyuSuRCjlykwp6nr5Hn6wYSmt748WmuftkihSHf878ZkyqFq5Er8g4e6VFImbOWkz5McycJe/yHP0joS+MVYRCilJ5VSChDyJZ1MKqAkUijBZSeHyqjEctEvIVSmGsSESpaC2kCOkaCyWSWtBLyTMCeWNXomkeeGIonQ0YeHw8HPGPxpB6U7IUkQjRSDEZDg8H7lVudNQPmTI5agnOA60RWA0Ggo1xuSIMoGBZBWMxBPBVjn0hReosoSU2q8oyN2m0NPgc2HZ9KNotP2NK7AXPfiPTSkbvnX/7tdRpPPSAFPisijLnrl+nF483l398ury9E/LVTm9JLXOEQqVrY7HnUenYERcHtt1nLxUYglq9sc6B1yBzHpxFdl7hPEJmMNchWuwcyXz8yKYeTcbLiU5742w47k0+/DzsLX86O++dZ5Ns/Es2GQ2XHw42NXPeYxseWpvQbeYvQ2sI6Dfoe8FohNytWEuzz9ii9edux/tKH6QgQ1HXJZu8QFImvyB3YKSN3ev3bzoi2xlNpO87WH40IRi7klCoPHO+6PDD55LNQ+pRoyWj8nCk7Ujbu2g7O6RtWtGacUoVMWjLiqBoAdwWvIhdyeU6BPb3ifNgKIDH4CqfIoTUlShhenHTG47PTo9YHrF8F5aTQyzvdn+2qHekaYcBrCPAZxMo1kXTdmxMMBw0cpHbVPEh40jikcR3kXj+QxIhdTbLTUqhlR8h5EoZSBHCCfZXfVCgqxYzhMqapwpho/IKj2XxCOP/h7GRgtQqtKtur088LWBaeUMv8aa0ROXRi2TxwFee11t969pVIK0d39BKFyI9fK1KxECVZrAZDfYWHtRGN4P9ua23WOCeplvmt2Xvq7IOat5o1yW7xm/OF4pEIn7/844xcKE0jzCdX8EXfBHya+TXRGV0orGZi0R0fru+nV/BPFfEh2SedxDs+MbJdYkWbklZrbyGuXe6Sgmu4iE66zLwFFKGsOys9eHj/bw91vDBhydxgsHM2UCGqgjyv/9MzpLODr1IuPYrZc3f0V6QwAcr2S2HHmZOY5AQJXXtTkqQcK+8UZZbM0W4ct7w+JTIm2VF3J7lKoStXAkXLq0KjFOmlTbExYXj0W582B/1h125USmXG3YgR7lQsdB0N+w9RGDHCOzH+RuPbtOR8JkGZa6M5YStfM5jLT4LoUrDakatgC27UiTxRr+z/iDFmslLFqKulyrgJ583DXc/VehfWrY27JslR3xRC20Ct7VIMpUHPJC3ra/i5KbLuVPYsfSt7K5TWaYt1mj+KCAF4xe/PjQPjRRrVDqmWN0NTNMUS9qbclDJORe3uTW/jrVVVeycrQNf5UI0/109dd2+cee+oG2arTziZ1bYNP8B5n76hw== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ConnectionsController_terminate + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-create.ParamsDetails.json b/docs/api-reference/reference/documents-controller-create.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-create.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-create.RequestSchema.json b/docs/api-reference/reference/documents-controller-create.RequestSchema.json new file mode 100644 index 0000000000..f955704f04 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-create.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"documentType":{"type":"string","enum":["PRIMARY_IMAGE","GALLERY_IMAGE","TECHNICAL_DRAWING","DATASHEET","MANUAL","CERTIFICATE","DECLARATION","SAFETY_DOCUMENT","INSTALLATION_GUIDE","VIDEO","OTHER"],"default":"OTHER"},"validFrom":{"type":"string","description":"Deel 7 §52 — essential for certificates, meaningful for any document type."},"validUntil":{"type":"string"},"sortOrder":{"type":"number"},"certificateMetadata":{"type":"object","description":"Deel 13 §27-28 — {certificateNumber?, issuer?, issuerOrganizationId?, issuedAt?, scope?}. Only meaningful when documentType is CERTIFICATE."},"name":{"type":"string"},"mimeType":{"type":"string"},"storageRef":{"type":"string","description":"Opaque reference to the actual file in object storage."},"productId":{"type":"string"},"visibility":{"type":"string","enum":["PUBLIC","RESTRICTED","PRIVATE"],"default":"PRIVATE"},"checksum":{"type":"string","description":"SHA-256 hex, if known — this endpoint has no bytes to compute one from itself."}},"required":["name","mimeType","storageRef"],"title":"CreateDocumentDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-create.StatusCodes.json b/docs/api-reference/reference/documents-controller-create.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-create.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-create.api.mdx b/docs/api-reference/reference/documents-controller-create.api.mdx new file mode 100644 index 0000000000..0e3d8329e2 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-create.api.mdx @@ -0,0 +1,69 @@ +--- +id: documents-controller-create +title: "DocumentsController_create" +description: "DocumentsController_create" +sidebar_label: "DocumentsController_create" +hide_title: true +hide_table_of_contents: true +api: eJztWN1u27gSfpUBr7oA7TiOu219U6i22vogiXNsJ4uFEQS0NLK5lUiVpJJ4DQHnIc479D36KOdJFkPJtlJ72y1wLnMnDcn5/WbImQ3TORrhpFajmPXZUEdFhsrZgVbO6DRFcxcZFA4ZZ7kwIkOHxrL+/JYzg58LtO6djtesv/G/0mDM+s4UyFmklUPlaEnkeSojL+bkD6sV0Wy0wkzQl1vnyPpML/7AyJEcQ0o5iZZW41qlmd+1222dkWrJOENVZKw/Z1eT0UUw+f1udBF8CBlnH4Lz87DxPwsHHy9Hg+D8bjgJfhtdfmCcDYNZMP0YhjPG2UVweR2cM84G4WQ2ej8aBDM6NgwH58EkmI3Gl4yzafA+nP1+NxwPri/CSzo2upzOgvNzv+Huw/VoSIduRsNwzDgbzz6GE3bLWYyJKFLH+jWp5OxepDJ+b3R2zKgYbWRkTg6jqCCm8Aq+fnnZhf/957+A1qJyUqSQaAMR+Soh96LlkKFQUi2ToloUag1bDwJJae9kXysn00PhJWdWGzc2MZrGqiqyBRpabci7QCdi4Y5G8YgJp2fw9Uv3Vav72puxaXC69OzfcpDWFo2PsVkKJf+sEbolx4F7y8FGOse3ZRvGKl03DX9YoYImbkBaaITV+0CJ7AieSs4ymeFxsJFrnDZiiRNMfhy2cS4+FwgGEzSoIgSnwa0QROQKip1MEaSCymNQc/a65UbHReQoJY/ocC+tXMhUuvV38+H63flowDibhNPZZDSYhUPGKUtuCNhPMLklUnBXGH2yxT8A5fRj0Oq+/BVW+MhBJvBJ6Qfl4+pW0gKqONdSOVgJC0rDYu3QkgcineWFQ9AKITE6A+kspkmblSVv1JB5FaBGOJ44/5YzJ11K+g18fdpWrqHTrCwrXjbXylZVpNs59cXkiQlkcK/TOVy4ofzwmINEyBRjDtr42NU1D+6lTinhQMCisFKhtWCKFNvs/1b40Bhtfrwt0vHxuvgostw76F0wvJuE/74Op7PDKDqxSBEyEa2kwpZBEXuCFw7E2wMyQ2vF8gdyDrzmKxDFWRvItEFIJKax9RxrRx6DeJNnfNrrLnpx1OomnW6r9/rXTmvx8uxN603SS7qvkt5pZ/H6wKiBNgar8FRY9MY8SLcCi+YeTcvKGCHVS3sIO+/PvcVNTRugC4nlEJ2QaYW4p0yq2H27f1Ijco/R3jFYXkhrpVpyyESaaJPV8MPHnNhDZDCuyr99Rtsz2n4KbWeHaAsKtyI40S0cc1gUDrIKgLuC52GXo/F0reCFNlS1waDVhYmwuok5BMNJq9M9++UZls+w/ClY9g5hOdtfthjvkRZrpOeEA3yU1vm6KCuCfxWlu0dWJKh5eUbiMxJ/ColvvotEiLRKUhk5W6nvQUiV0jrhEF5ge9kGAXFRwQyhUJJagHuRFvhcFp/B+M/BWHLmxJImLbsJiKVDFqPC+NZvvmELFIa69PlteXvQcX9vlJOhW2ka+OTaetgIt2J9diJyeXJ/erKXSALJK/XIZyt9SjitMLbVoQYvGVSTeP3xXptMUJ/5r99mFG5tc3kHwdUIPuGa8W2EV87l3lmUDJP9bCncBvzbWVA9S3kyStnjpDnj2FMbo43O340ydsOB/bH9TKDBqjEK2FMbrXtDl0bHvuu2m812o7uXKtEe9zU6xtOrEVylwlErQF47nDPQjhfjHBVMnVCxMDFcVWrAyLcKSV1nfoGIUi2vubXh4uaqerzR844O+VHEQCvrpCt8un790jvr13zcmkNzImM50POR1+LQwEDHNIXyKtXftSqWw40wUij6GgiHS20krQfOGbko/PRqkAprd+py2IGYBMXSUQklNFaGd9qn7U5dVEVERZXgQ5DOhC+ndRh3XGCfC7DLhSfO3NUbh4/uJE+FVBSUwvhJWZUmcyZySYqc0ulmcq4om/pzttkshMVrk5YlkT8XaNZVAt2TCxYU2PltydkKhcfifMMoF6g8+fuhVU88/MXB+od3Rcm3J4Iowtx9d+9tI+Gvxr7SL+qhbeZvCGbEA1Uz8UBTEc6094ZPb0/bsFSoZeGrPKt4kqdFQe7YueybtPdW1UtCrRsabjbVjpn+hKosGa9NcfTPytuyLP8CQAO4lw== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DocumentsController_create + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-find-one.ParamsDetails.json b/docs/api-reference/reference/documents-controller-find-one.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-find-one.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-find-one.RequestSchema.json b/docs/api-reference/reference/documents-controller-find-one.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/documents-controller-find-one.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-find-one.StatusCodes.json b/docs/api-reference/reference/documents-controller-find-one.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-find-one.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-find-one.api.mdx b/docs/api-reference/reference/documents-controller-find-one.api.mdx new file mode 100644 index 0000000000..7dd2e07e44 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-find-one.api.mdx @@ -0,0 +1,69 @@ +--- +id: documents-controller-find-one +title: "DocumentsController_findOne" +description: "DocumentsController_findOne" +sidebar_label: "DocumentsController_findOne" +hide_title: true +hide_table_of_contents: true +api: eJztmNtu4zYQhl9lwKsEoI9x243uXCctUmCRNMmmF0EQ0OLI4q5EKuTIm1TQ8/Q99skWQynOwYtsc+8r0zwMf858HHPcCFehV2ScPdEiEUcurUu0FBbOkndFgf42M1afWhRSVMqrEgl9EMl1I6wqUSTCaCGFx7vaeNQiIV+jFMaKRFSKciFFSHMslUgaQQ8VrwjkjV2Jtr3hhaFyNmDg8el4zB8aQ+pNxapEIkQrxexHA1eqMDpqh0yZArUE54FyBFaDgWBtXKEIAyhY1sFYDAF8XeBQSJE6S2iJzaqqKkwaLY0+B7bdbIt2y8+YEnvBs8/IdJLRe+d/Pi11Grc9IAXeq7IquOv3+dHt+fHfn44vLoV8ddILUssCoVRpbiwOPCodO+LmwLaH7KUSQ1Crn+yz5TXInAdnkZ1XOo+QGSx0iBZ7RzIbb9nUk9l0OdPpYJqNp4PZh1/Hg+UvB4eDw2yWTX/LZpPx8sPWoRbOe+zCQ7kJ/WG+GsohoF+jHwSjEQq3Yi3tc8auO38+nfi50hspyFDUdcwmj5CUKY7IbRnpYvd6/nlPZLeijfRNtun7aEIwdiWhVEXmfNnjh/cVm4fUo0ZLRhVhR9uOtnfRdrBN27ymnHFKFTFoy5qg7ADcJLyIXYU+9jsLe86DoQAeg6t9ihBSV6GE+dH5YDw92N9hucPyXVjOtrG8fPqxRf1EmnYYwDoCvDeBYl40XcfaBMNBIxe5TRU/MXYk7kh8F4mHb5IIqbNZYVIKnfwIIWfKQIoQ9nC4GoICXXeYIdTW3NUIa1XUuEuLOxj/P4ytFKRWXA4J/Vg68aKAae0NPcQ6aYnKoxfJ9Q0XPC8P+nbBVSLljuuyFUZsuJ5KxEhVZrSejDY7jhqjWy60omtYzTMJFwxrB9qjkJ5gPlXfJfvGH86XikQi/vrnkmPuQmVuYX52Al/wQcjHMOdEVfSYsZmL4e+ddHpxdgJnhSJ+EfO6rcjGGXunFVq4IGW18hrOvNN1SnASX8xZf932IWXiqt7aED5enXVvGH7l8CK+TbBwNpChOlL77b/ZQdLboQcJp36lrPk32gsS+BUl++3Qw8JpDBKipL7dSwkSrpQ3ynJroQhXzhsenxN5s6yJ24tChbCRK2ETS95IG+JMwvHoDj4eTobjPreolHMLO7BygUoVs0pfTm+swBMSwEhAx8QLd24uHuE9japCGctXs/YFj3W8XAtVGZYy4dUbSqVITLwQuQvEs5pmqQJ+8kXbcvddjf6hQ2nNrlhygK8boU3gthZJpoqAW4I2uVPsnff3aR+e0HkptO9UluGK+ZcLfimYtvjPQnvTSpGj0vECNf3APE2xomdLtrI037TN7fnzmNOmqtkbG4+9Ij9a/6GcpulmXLovaNt2o474Owts2+/FHemR +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DocumentsController_findOne + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-get-download-url.ParamsDetails.json b/docs/api-reference/reference/documents-controller-get-download-url.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-get-download-url.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-get-download-url.RequestSchema.json b/docs/api-reference/reference/documents-controller-get-download-url.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/documents-controller-get-download-url.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-get-download-url.StatusCodes.json b/docs/api-reference/reference/documents-controller-get-download-url.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-get-download-url.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-get-download-url.api.mdx b/docs/api-reference/reference/documents-controller-get-download-url.api.mdx new file mode 100644 index 0000000000..86a7ff0e88 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-get-download-url.api.mdx @@ -0,0 +1,69 @@ +--- +id: documents-controller-get-download-url +title: "DocumentsController_getDownloadUrl" +description: "DocumentsController_getDownloadUrl" +sidebar_label: "DocumentsController_getDownloadUrl" +hide_title: true +hide_table_of_contents: true +api: eJztmNtu4zYQhl9lwKsEoI9x243uXDstUmCRbE69CIKAFkc2dyVSIUfeuIKep+/RJyuGUpyDF7ube1+ZpjTDn8NvxhzXwpXoFRlnT7VIxNylVYGWwsxZ8i7P0d8vkebuq82d0tc+F1KUyqsCCX0QyW0trCpQJMJoIYXHh8p41CIhX6EUxopElIpWQoqQrrBQIqkFbUq2COSNXYqmuWPDUDobMPDz8XDIHxpD6k3J4kQiRCPF5FsPblRudNwCZMrkqCU4D7RCYDUYCNbG5YowgIJFFYzFEMBXOfaFFKmzhJbYrSrL3KTR0+BzYN/1rmi3+IwpcRQ8h45MKxm9d/7Hr6VO424EpMBHVZQ5T/0+nd9fnHy6Prm8EvLNTi9JLXKEQqUrY7HnUek4ERcH9t3nKBUYglr+YJ2dqEHmPDiLHLzCeYTMYK5D9NgFkhH5nk89mowXE532xtlw3Jt8+HXYW/xydNw7zibZ+LdsMhouPuxsaua8x/Z4aGVCt5mvhlYQ0K/R94LRCLlbspbmJWO3bTyfd/xS6Z0UZCjqOmGXcyRl8jm5HSft2b19/6IjsrVoIn2jXfo+mhCMXUooVJ45X3T44WPJ7iH1qNGSUXnY07an7V20He3SNq1oxTilihi0RUVQtABuC17ErkQf552FA+fBUACPwVU+RQipK1HCdH7RG46PDvdY7rF8F5aTXSyvnn9sUT+Tph0GsI4AH02gWBdNO7E2wfChkYvcpopvGnsS9yS+i8Tj75IIqbNZblIKrfwIIVfKQIoQDrC/7IMCXbWYIVTWPFQIa5VXuC+Lexh/HsZGClJLboeEfuqg2ChgWnlDm9gnLVB59CK5veOG5/VGf6rvKpBWjru0JUZ6uK1KxECVZrAeDbYLD2qjm4HuTHtVtG3DxQpfyLpkgFv4nsR1VPNOuynZDf5wvlAkEvHX31fMgQuluYfp+Sl8wY2QT0e/IipjFI3NXESiC9zZ5fkpnOeK+JbMdjunHd84OCvRwiUpq5XXcO6drlKC03iLzroUPISUKSw7b334eHPe3mv45sNGnGEwczaQoSqS/N+/k6Ok80MbCWd+qaz5J/oLEvhmJbvl0MPMaQwSoqRu3EkJEm6UN8ryaKYIl84bfj4l8mZREY9nuQphK1fC9nx5IW2IqwufR7vxYX/UH3b1RqVcbziApQtUqFhpuhZ76wWeMYElEjxxAi0or8K6TUrCRxqUuTKW05axSOoOoluhSsOSRmy9JViKJHb1r1i6k2LlArFRXS9UwGufNw1PP1ToNy1ha47Qgs/9thbaBB5rkWQqD7ijb1tmxcFFl3qH8EzUa93dpLLMXCzV/N+AFAxh/BOiuWukWKHSMdfq7sE0TbGkFyY7BZ2Tcpthf55whVUVB2cbwDcJEb1/U05dt29cuS9om2arjvg7C2ya/wE2q/y4 +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DocumentsController_getDownloadUrl + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-list.ParamsDetails.json b/docs/api-reference/reference/documents-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..0b6d460cdb --- /dev/null +++ b/docs/api-reference/reference/documents-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"productId","required":true,"in":"query","schema":{"type":"string"}},{"name":"documentType","required":true,"in":"query","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-list.RequestSchema.json b/docs/api-reference/reference/documents-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/documents-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-list.StatusCodes.json b/docs/api-reference/reference/documents-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-list.api.mdx b/docs/api-reference/reference/documents-controller-list.api.mdx new file mode 100644 index 0000000000..2fc510755a --- /dev/null +++ b/docs/api-reference/reference/documents-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: documents-controller-list +title: "DocumentsController_list" +description: "DocumentsController_list" +sidebar_label: "DocumentsController_list" +hide_title: true +hide_table_of_contents: true +api: eJztmN1O60YQgF9ltFcgOSEJaXvwXRpoRaUjKHDoBUJo4x0ne469a3bGlDTy8/Q9+mTVrH2SQCpOqdS7XMXen/n9drLjlfIVBs3Wu3OjUnXqs7pExzT1joMvCgwPhSVWiap00CUyBlLp3Uo5XaJKVRW8qTM+NypRAR9rG9ColEONibJOpeqxxrBUiaJsgaVW6UrxspKdxMG6uWqaZC3MdNpvZMV/lncvO6nyjpBkfjQYyI9ByoKtxFWVKtUkavxPE7e6sCYGBHJtCzQJ+AC8QBBzkBierC80I4GGWU3WIRGEusC+SlTmHaNjEaurqrBZlHT0mUT2atdoP/uMWYxukESwbU3GEHz49rLMG9yNQKLwWZdVIUM/Tk4frs5+/XR2faOSV55es54VCKXOFtZhL6A2cSAqB5HdlyiVSKTn39CzEzXIfQDvUIJX+oCQWywMRYldIAW4t2Sa4Xg0G5usN8oHo974w/eD3uy745PeST7ORz/k4+Fg9mHHqakPAdv08MJS58zvlhdAGJ4w9MgahMLPxZZmG7K7Np4bj7ctvU8UW452nYnIU2Rti1P2O0La3L1ef9UR2e5oIn3DXfo+WiLr5gmUush9KDv88LkS8ZAFNOjY6oL2tO1pexdtx7u0TWpeCE6ZZgFtVjOULYDrghexqzDEce/gwAewTBCQfB0yBMp8hQlMTq96g9Hx4R7LPZbvwnK8i+XN5s8WzYY045HAeQZ8tsSxLtp24MmSlaSxj9xmWu4texL3JL6LxJM3SYTMu7ywGVNrfoRQKiWxZoQD7M/7oMHULWYItbOPNcKTLmrcl8U9jP8exiZRrOfSZq07IpJNhFkdLC9j/zVDHTCo9O5eGp6Xjr7RxZXICy+d3hzbpo4XKlVHurJHT8OjjTrRJiERK7ZUXwukLWBfDejIFW+6oaR7+MmHUrNK1S+/3UiuPVX2ASaX5/AFpYXr0rtgrmKkrMt9THsXnIvry3O4LDTLTVj27WQ0rji4qNDBNWtndDBw2XakcB5vynl3zA4hE9KqTlofPt5etncXud3IJjlFMPWO2HIdaf3rz/Fx2snhZQIXYa6d/SPKowTk9pR06jDA1BukBKJJ3XNnCiVwq4PVTp6mmnHug5X5CXOws5rleVpoorW5CaxzKIqMZakgko/W8UF/2B90NUVnUlMkgJUnLnWsJl1HvZYCGxSgQ+FFKNeHjfGZj6pCWyfHsQ6FzLWY3CldWTFjKLu3yVx4YplfrWaa8FMomkaG215daDWWpH4Ylea6INxRvq6N6uCqOy+HsEHkpVFCz8svD7HItl39/6Lr1YeJjbp7eQlW9MWjmKgFahPP5arbO8kyrHhr107xFynrc/nzmVRjXUvA10l5dbCi9G5Ku+WW7NWqXXHjv6BrGvXVAZZ31dw3TfM3djEmZA== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DocumentsController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-update-metadata.ParamsDetails.json b/docs/api-reference/reference/documents-controller-update-metadata.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-update-metadata.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-update-metadata.RequestSchema.json b/docs/api-reference/reference/documents-controller-update-metadata.RequestSchema.json new file mode 100644 index 0000000000..934374e478 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-update-metadata.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"documentType":{"type":"string","enum":["PRIMARY_IMAGE","GALLERY_IMAGE","TECHNICAL_DRAWING","DATASHEET","MANUAL","CERTIFICATE","DECLARATION","SAFETY_DOCUMENT","INSTALLATION_GUIDE","VIDEO","OTHER"],"default":"OTHER"},"validFrom":{"type":"string","description":"Deel 7 §52 — essential for certificates, meaningful for any document type."},"validUntil":{"type":"string"},"sortOrder":{"type":"number"},"certificateMetadata":{"type":"object","description":"Deel 13 §27-28 — {certificateNumber?, issuer?, issuerOrganizationId?, issuedAt?, scope?}. Only meaningful when documentType is CERTIFICATE."},"lifecycleStatus":{"type":"string","enum":["ACTIVE","SUPERSEDED","ARCHIVED"]}},"title":"UpdateDocumentMetadataDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-update-metadata.StatusCodes.json b/docs/api-reference/reference/documents-controller-update-metadata.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-update-metadata.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-update-metadata.api.mdx b/docs/api-reference/reference/documents-controller-update-metadata.api.mdx new file mode 100644 index 0000000000..dd4a015902 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-update-metadata.api.mdx @@ -0,0 +1,69 @@ +--- +id: documents-controller-update-metadata +title: "DocumentsController_updateMetadata" +description: "DocumentsController_updateMetadata" +sidebar_label: "DocumentsController_updateMetadata" +hide_title: true +hide_table_of_contents: true +api: eJztmGtu2zgQgK9C8FcK0I7juNvWfwrVVhIvktjrR4oiMAJaHNtsJVIlqSReQ8AeYu/Qe/Qoe5LFUPIjsTdtgf3pfxIfw3l8MxJnSXUKhjupVUfQJm3rKEtAOdvSyhkdx2DuslRwB1fguOCOU0ZTbngCDoylzdslVTwB2qRSUEYNfM2kAUGbzmTAqFS0SVPu5pRRG80h4bS5pG6R4g7rjFQzmufjYiNY90GLBa54LifSyoFyOMXTNJaRV/n4s9UKx3ZE68lniBzqatBAJ8HirCjNG/pVzxVhFFSW0OYt7fU7V0H/013nKjgPKaPnweVluPU+DFsX151WcHnX7gcfO9fnlNF2MAwGF2E4pIxeBdej4JIy2gr7w85ZpxUMcVs7bF0G/WDY6V5TRgfBWTj8dNfutkZX4TVu61wPhsHlpV9wdz7qtHHTTacddimj3eFF2KdjRgVMeRY72iyHckbveSzFmdHJPqME2MjIFB2GEQaIyRvy/dvrOvnnr78JWAvKSR6TqTYkQl9N0b1gGUmAK6lm06yY5GpBVh4keEp1ffZIORnvCS2jVhvXNQLM1qzKkgkYnN06bw3YnijuMeHklHz/Vn9Tqb/1Ziy3JF178e8ZkdZmWw9dM+NK/lnSvhoWgXvPiI10Cu/zKumqeLFt+MMcFNnmhkhLtsLqfRDLKUSLKIaB4y6zL6EVtIadG4zrYNQL+4OwHbYpo0G/ddG5Cdt0nOeMOuli3DzymbfKyZWD2k7TPMd1BmyqlS3YrtdqHvEnrkLlGvsmbjBq3hNkymUMghFtiJsDKTOR3EsdIwaEk0lmpQJricliqNL/LR3BGG1+vCzSYn+2PvIk9Y76ELTv+uEfo3Aw3KFl4PgkBpLwaC4VVAxw4Qf84QRl+xAmYC2f/eCcHa/5vNAK0HmJNkCmEmJhvcTSkVhXX5IpThr1SUNElfq0Vq803v5Wq0xen76rvJs2pvU308ZJbfJ2x6iWNgaK8Li5tKUxD9LNiQVzD6ZipQAS6xnqkm8X5tvCnxuLtzUdb+ALUWQbHJdxQdxTIUXsnq/vl0RuGG3UTnbpu5LWSjVjJOHxVJukxA8eUxRPIgOiKEr2QNuBtl+i7XSXtiBzc8QJvw2CkUnmSFIAuC54HrsUjB/XihxpQ6SzxIDVmYmg+D4wErT7lVr99NUBywOWv4RlYxfL4eZjC2JDmtBgidKOwKO0ztdFWQzcSysxaE57biOOv+cHEg8k/hKJ714kkURaTWMZOVuo7yHESmkdd0COoDqrEk5EVmAGJFPyawbknscZHMriAcafhxEvOnyGPYT1vdziJgtRZqRb+ObCBLjBu+PtOB/v3AN/plmRgJtrUXQhornvXrg5bdJjnsrj+5Pj9dHHSylybFN4H6FaW7oMkNqCuJVGJcpoXjnEyoczbRKO9/PfPw4x+Nqm8o4EvQ75AgvKVvGeO5d612Fq9Df9j3AV/uf9ivK+/+S6v6Fm+x6+Gd26ftf+67q97wK7uqfm2MOZao9pGczuoNchvZg7/HNHs3YI9CuOuikoMnBcCW4E6RktssiRjv+zn5Zl4RWJMDPSUlqVXN30in8t/BvDTZj1pKWVddJlPru+f2ucNks5bsHI9rXeMoJ/e6w8DgxpaYGtDK9S+VyqYhm54UZyhU8t7mCmjcT5wDkjJ5lvgbRibu1aXUbWzOFBQjqseIhLYXitelKtlTWQR1gDMb6pti7hvvqVvbK1FLJBlxToki12n3h1XSccPLrjNOZSYXQy4/suBdW3lKcSNTrB3eukYrQpff7OtXW4armccAsjE+c5Dn/NwCwK4O/RIxOM8+2SCmnxWdDmlMcWdhRal3p61C/T/xXZAP5U0XKQq0UBa4ZvlFHMCd89zMc5o3PgHtbbZTnRKs6o+BTYbNz5tORstSOIIkjdi2vHW3WhFwxbF5i7Zesx8V8UavgDVj/+UGipvdG+APixJY25mmX+q0ALoRhqnmEY1qF6Vhi8WXv9sFwWK4b6C6g8X7vF4Tt6Js//BVHjZP8= +sidebar_class_name: "patch api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DocumentsController_updateMetadata + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-upload.ParamsDetails.json b/docs/api-reference/reference/documents-controller-upload.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-upload.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-upload.RequestSchema.json b/docs/api-reference/reference/documents-controller-upload.RequestSchema.json new file mode 100644 index 0000000000..2b656a3def --- /dev/null +++ b/docs/api-reference/reference/documents-controller-upload.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"documentType":{"type":"string","enum":["PRIMARY_IMAGE","GALLERY_IMAGE","TECHNICAL_DRAWING","DATASHEET","MANUAL","CERTIFICATE","DECLARATION","SAFETY_DOCUMENT","INSTALLATION_GUIDE","VIDEO","OTHER"],"default":"OTHER"},"validFrom":{"type":"string","description":"Deel 7 §52 — essential for certificates, meaningful for any document type."},"validUntil":{"type":"string"},"sortOrder":{"type":"number"},"certificateMetadata":{"type":"object","description":"Deel 13 §27-28 — {certificateNumber?, issuer?, issuerOrganizationId?, issuedAt?, scope?}. Only meaningful when documentType is CERTIFICATE."},"name":{"type":"string"},"filename":{"type":"string","description":"Original filename — used only to derive a file extension; never used as the on-disk name."},"mimeType":{"type":"string"},"contentBase64":{"type":"string","description":"File content, base64-encoded."},"productId":{"type":"string"},"visibility":{"type":"string","enum":["PUBLIC","RESTRICTED","PRIVATE"],"default":"PRIVATE"}},"required":["name","filename","mimeType","contentBase64"],"title":"UploadDocumentDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-upload.StatusCodes.json b/docs/api-reference/reference/documents-controller-upload.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-upload.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/documents-controller-upload.api.mdx b/docs/api-reference/reference/documents-controller-upload.api.mdx new file mode 100644 index 0000000000..8386710cc9 --- /dev/null +++ b/docs/api-reference/reference/documents-controller-upload.api.mdx @@ -0,0 +1,69 @@ +--- +id: documents-controller-upload +title: "DocumentsController_upload" +description: "DocumentsController_upload" +sidebar_label: "DocumentsController_upload" +hide_title: true +hide_table_of_contents: true +api: eJztWN1u27gSfpUBr7oAnTiOu229F4VqK60PkjjHdrJYGEZAS2ObrUSqJOXGawg4D7Hv0Pfoo+yTLIaSbSX2aU+Bc5k7aUjO7zdDzmyYztAIJ7Xqx6zDejrKU1TOdrVyRicJmvs8S7SIGWeZMCJFh8ayzmTKmcHPOVr3Tsdr1tn4X2kwZh1ncuQs0sqhcrQksiyRkRdz+tFqRTQbLTEV9OXWGbIO07OPGDmSY0gpJ9HSalypNPa7drutM1ItGGeo8pR1Juxm2L8Khn/c96+C9yHj7H1weRnW/sdh98N1vxtc3veGwe/96/eMs14wDkYfwnDMOLsKrm+DS8ZZNxyO+xf9bjCmY72wexkMg3F/cM04GwUX4fiP+96ge3sVXtOx/vVoHFxe+g3372/7PTp01++FA8bZYPwhHLIpZzHORZ441qlIBWcrkcj4wuj0mFEx2sjIjBxGUUFM4BV8+/qyBX//5y9Aa1E5KRKYawMR+WpO7kXLIUWhpFrM83JRqDVsPQgk5WQn+1Y5mRwKLziz2riBidHUVlWeztDQak3eFToRC3c0ikdMODuHb19brxqt196MTY3TtWf/loO0Nq99DMxCKPlnhdAtOQ7cWw420hm+LU5goJJ13fAvS1RQxw1IC7Wweh8okR7BU8HZXCZ4fPGpUQMjF1JRGKoj3qzcYgyaVHIaYjRyhSD8FsAHh8pKrX4DhSs05V5hwS0RtGrE0n4CYuQ1TGWKx1Ff7LLrnbD4a/vHql6Q+OoMh5k/1UAV6RhjLywzOs4jR1XgiLSVtHImE+nW303B23eX/S7jbBiOxsN+dxz2GKfEvKNcepQGW2JR8FrhmJRRqcWg5oWnNk85c9IlpMmtL1Hb4tVzmhVFydlmWtmykLSaZ76ePPILGdduNg8X7ihFPOxgLmSCMQdtfJyqsgcrqRPKORAwy61UaC2YPMET9n+rfWiMNj/eRlE8GpcHkWbeQe+C3v0w/PdtOBofQGPkxCxBSEW0lAobBkXsCV44EO8SjWitWPxAzoHXfBHSCsl5qTYIc4lJbD3HypHHIFfnGZ+1W7N2HDVa82ar0X79a7Mxe3n+pvFm3p63Xs3bZ83Z6wOjutoYLMPjltJWxnyRbgkWzQpNw8oYIdEL0uUJCL0/9xbXNa2BLiSWPXRCJiXiHjMpY/d0/7BC5B6j7WOwvJLWSrXgkIpkrk1awQ8fMmIPkcG4vAHsM9qe0fZTaDs/RFuQuyXBiS7imMMsd5CWANwVPA+7DI2nawUvtAHpLBi0OjcRlpcxh6A3bDRb5788w/IZlj8Fy/YhLMf7yxbjPdJijRaUdoAP0jpfF2VJ8K+UBOndRbiNBPUvz0h8RuJPIfHNd5FIj+h5IiNnS/U9CKlSWiccwgs8WZyAgDgvYYaQK/k5R1iJJMfnsvgMxv8djAVnTixo2LIbglg6ZDHKjW/FJhs2Q2GoUZ9Mi+lB0/29aU6Kbqlp5pNp62Ej3JJ12KnI5Onq7HQn8XR3onRONfzZKjEiuJZQ26pSYZjsqki8+rjQJhXU/v3r9zFFXdtM3kNw04dPuGZ8G+ilc5n3GeXEcD9lCrdxfzoVqqYqj4Yqe7jUpx17am3I0fxvQ43dmGB/bD8d2NP2jfqe9qQ/3y/UGu2airX+et8bcybVXPsMqHAyGN304SYRjpoCctzhTIJ2vBhkqGDkhIqFieGmFAl93zTMq4rzC0SUdFnF7QSu7m7KZxw99OgQFRToamWddLlP3G9f2+edio9bc6iPZywHekjyShwa6OqYRlJepeq7UsVyuBNGCkVfXeFwoY2k9cA5I2e5H2V1E2HtTl0OOziToFg6KqYEyNLw5snZSbNyvIiovBKCCNyp8IW1itqOC+yzAnYYf+TMXeVx+OBOs0RIRUHJjR+blQkzYSKTpMgZnd6lKWcVyylnS0qwzoRtNjR3uTVJURD5c45mXSbTinwxowhPpgVnSxQel5MNo7ygiuXB1KjmIP4uYZ3D66Pg2xNBFGHmvrt3WqsBNwNf/GfVKDf1lwYz4gsVOPGFBiWcae8Wn+qetmGJUIvcF35W8iSXi5z8svPdkxLgraqWhFrXNNxsyh1j/QlVUTBemeLonxXToij+AT/Jv8I= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DocumentsController_upload + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-create-profile.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-create-profile.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-create-profile.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-create-profile.RequestSchema.json b/docs/api-reference/reference/dpp-controller-create-profile.RequestSchema.json new file mode 100644 index 0000000000..d009db479f --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-create-profile.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"version":{"type":"string","example":"1.0"},"description":{"type":"string"},"requiredAttributeCodes":{"description":"AttributeDefinition codes required for VALID status","type":"array","items":{"type":"string"}}},"required":["code","name","version","requiredAttributeCodes"],"title":"CreateDppProfileDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-create-profile.StatusCodes.json b/docs/api-reference/reference/dpp-controller-create-profile.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-create-profile.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-create-profile.api.mdx b/docs/api-reference/reference/dpp-controller-create-profile.api.mdx new file mode 100644 index 0000000000..e08902f195 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-create-profile.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-create-profile +title: "DppController_createProfile" +description: "DppController_createProfile" +sidebar_label: "DppController_createProfile" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQgF9lwFMWoB0ncduNb944BVJ0ETfJpgfDCGhpZHNXIhly5MQ19Dx9jz5ZMZT8k9ibNkWPvsnD0XB+Po45Wgrr0CvS1lyloicGzl1YQ97mOfqHxKMiHHqb6RyFFE55VSChD6I3Gkvh8bHEQJ9suhC9ZfypPaaiR75EKRJrCA3xknIu10nc5/hrsIZlIZlhofiJFg5FT9jJV0yI9/HsFWkMvJrYFLe0AnltpqKSwqhi/8IcfdD1Ji/XpMBnVbicRSftDuumGBKvHe3Vr+Q6qD6R15OS8MKmtV8v3hTr9QFm2miWAnseYGUBMuvhvv/r1QACKSqDkKvtlPdqIaTQhEXY40a15YjojeqUNAnYhPtdZ8dSkKYY9UUs6cC5pqoDsmw+2g/OmlDH1u10dkO8V7lOYw0hUzrHVIL1QDOEBgSYa5srwgAKJmXQBkMAX+bYFv8bDei99f8Vmu36f+oPHm4uf/tyeXsnXmEgbklNcoRCJTNtsOVRpVEQN49lbTMbBYagpv+wz07WIgfWICevsB4h05inob2iDQPxWXzLZnrSPZ1006R1mnVOW92PP3Zakx/OzlvnWTc7/SnrnnQmH3eCurDeY10emunQBPOkaQYB/Rx9K+gUIbdT9mU/cauItz3douuSTQ6QlM5rsF4aqWv3Wv+mAW+DYrdzskvfZx2CNlMJhcoz64sGP3x28XAlHlM0pFUeDrQdaHsXbWd72nlJM8YpUcSgTUqCogZw3fAidg59lFsDR9aDJu73wZY+QQiJdSihP7hpdU7PPhywPGD5Liy7u1jebf5sMd2QlloMYCwBPutAsS/qWjDXQXPRyEZuE8UXuwOJBxLfReL5myRCYk2W64RC7X6EkDslX3MRjrA9bYOCtKwxQyiNfiwR5iov8dAWDzD+exgrKUhNefwUqXOsHjApvaaF6I2WYoLKo+fhtBq/DvHt0bZAmlmegJ0NkRhFM9ETx8rp4/nJcepcy9XKPLbVOWmm4JUHt0xpTdjKjwZdDqcRyebhZ+sLRaInfvn9jottg9MP0B9ewTdcbAbDGZGLqeKjcLMZty9X5V7RvCGhnoo3v9fDcJx4X2dlrfa9OXe0UhlXUmiT2UhfU6Pr2+EVDHNFfCFn73fsR42ja4cGbkmZVPkUht6mZUJwFS/sWXPaP0DCwLvGWhs+3w/rKxRfsvglPsxwYU0gTWU8NH/92T3rNXZoIeHaT5XRf0R7QQJf4mSzHXqIEUmILjXPjStBwr3yWhl+ulCEU+s1r6+zwfJchbB2V8LAJmWB8ZV+mWpqv0h2p12nm1ubSri1cRmZrkLFptbUaeAcbLiEmkvYgLn/+wThMx27XGnDnaH0Oa/VzI6EcppdOeG3t7kdSzFjunsjsVxOVMAvPq8qFj+W6Bc1zXPOw4SrO+KKz1Cl8UQtBYPJnSK26tYdO8LqeRm/YLxu25VcvdFPEnT0pu546wAOr2PTnTQflYoab6+eGFL1JHpCSGFjQuJZi7KlyJWZlrHhitomp1uVnJF11l6dwRjV6guMWWx5uFzWGnf2G5qqErIJhfi3qMZVVf0N1+Cb1A== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_createProfile + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-create-record.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-create-record.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-create-record.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-create-record.RequestSchema.json b/docs/api-reference/reference/dpp-controller-create-record.RequestSchema.json new file mode 100644 index 0000000000..ddb4563fd4 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-create-record.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productId":{"type":"string"},"profileId":{"type":"string"}},"required":["productId","profileId"],"title":"CreateDppRecordDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-create-record.StatusCodes.json b/docs/api-reference/reference/dpp-controller-create-record.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-create-record.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-create-record.api.mdx b/docs/api-reference/reference/dpp-controller-create-record.api.mdx new file mode 100644 index 0000000000..28f3596abc --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-create-record.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-create-record +title: "DppController_createRecord" +description: "DppController_createRecord" +sidebar_label: "DppController_createRecord" +hide_title: true +hide_table_of_contents: true +api: eJztmF9vIjcQwL/KyE85aSGQ0PaybxykUiqdQpNc+oBQ5F0P4Ltd27Fnk3BoP0+/Rz9ZNd4NkHDKNVIfecLY4/H8+XnwsBbWoZekrblQIhVj50bWkLdFgf4u9ygJrzC3XolEOOlliYQ+iHQ6S4TH+woDfbJqJdJ1/Ko9KpGSrzARuTWEhnhJOlfoPB5z/DVYw3MhX2IpeUQrhyIVNvuKOfE5no0ijYFXnbeqyonN24gG8tosRB1l57rAH67WyY5N0x1Fu9tmiSBNBe8bRXfHzjUej8mKum60BGdNaOwZ9Hr8oTDkXjt2SaTiVhZaRf9gLnWBKgHrgZYIbZDgQdtCEgaQkFVBGwwBfFVgV/xvkULvrf+5WG4V7kcrEfgkSxcD8Wk4vrs6//PL+fWNSF55ek0yKxBKmS+1wY5HqeJEPBxYd5fzUmIIcvGTc/aiBnPrwRrk4JXWI8w1FipEjW0gf5TpXZ2qPzjJBirvnMx7J53Bx197neyX07PO2XwwP/ltPuj3so97To2s99ikh5Y6tM48alpCQP+AvhO0Qijsgm15xVWM59bjXUt34DpnlWMkqYsGrJdKmty9lr9qwduiOOj19+n7rEPQZpFAKYu59WWLHz45Vg+5R4WGtCzCgbYDbe+i7XSftmFFS8Ypl8SgZRVB2QC4KXgRO4c+zlsDR9aDpgAeg618jhBy6zCB4fiq0zs5/XDA8oDlu7Ac7GN5s/2xRbUlTVkMYCwBPulAsS7qZuJBB81JIxu5zSW/eQ4kHkh8F4lnb5IIuTXzQucUGvMjhFwpA0lCOMLuogsSVNVghlAZfV8hPMiiwkNZPMD432GsE0Fywa2ZUM6xeMC88ppWIp2uRYbSo+fGrZ69dvHNrq9EWlruDZ0NERhJS5GKY+n08UP/WDnX8VE2CD6SI9L2h8/nXzOjDV/PVrTgsjPtVNIOfre+lCRS8cdfN5xqG5y+g+HkAr7hSiTP2V0SuRgovghX20b0/DnZLxrHLQw7/eJOF6nN3EZ02gBfXk8uYFJI4tc0H75HRZQ4unRo4JqkUdIrmDQHwkV8bc/bq/oBcqbVtdq68Pl20rx/+IXEm/gmwsiaQJqqSPw/fw9O01YPrRK49Atp9PeoLyTAL7CkPQ49jKzCkEA0qR23poQEbqXX0vBoJAkX1mteHxJ5nVXE41EhQ9iYm8DY5lWJccuwUpq4CnFSG8d73X6319YlmXNd4iwwG6WMFcnImNaxc7CFChqoYEPVi2hu7izhEx27QmrDWal8EfMYgZsK6TRb0ufdO9DNErFkMtOpWK8zGfCLL+qap+8r9KsGxQeOQsa5nc7qRCxRqngZ1oKp4kseq2znhu1g8aJie/Yqbp087xjmOTp6U3a2c3kml7FeZu1/JWWss8LLR64J8lGkQiTCxnjEixLn1qKQZlHFWikanRxsWXFANkF7dYGiV+2SNKsdC9frRuLGfkNT1yJpXSH+LupZXdf/AujLNBY= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_createRecord + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-get-owner.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-get-owner.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-get-owner.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-get-owner.RequestSchema.json b/docs/api-reference/reference/dpp-controller-get-owner.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-get-owner.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-get-owner.StatusCodes.json b/docs/api-reference/reference/dpp-controller-get-owner.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-get-owner.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-get-owner.api.mdx b/docs/api-reference/reference/dpp-controller-get-owner.api.mdx new file mode 100644 index 0000000000..b5c70f4efa --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-get-owner.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-get-owner +title: "DppController_getOwner" +description: "DppController_getOwner" +sidebar_label: "DppController_getOwner" +hide_title: true +hide_table_of_contents: true +api: eJztmM1SIzcQx1+lSyeokr/ASZa5OTZJkaotCLDkQFGUPOqxtTsjCanHC3HN8+Q98mSp1gw24GQ33H1CaKTWv7t/3UishfMYFBlnz7TIxMz7qbMUXFliuF8gnX+1GIQUXgVVIWGIIrtdC6sqFJkwWkgR8KE2AbXIKNQohbEiE17RUkgR8yVWSmRrQU+ed0QKxi5E09zxxuidjRj5+3g45B8aYx6MZ0EiEzeqNDqpg0KZErUEF4CWCHwoRoKVcaUijKBgXkdjMUYIdYl9IUXuLKElNqu8L02eLA0+R7a93tXm5p8xJ3Y2cFTItMowBBe+vyx3GncdlQIfVeVLnvp5Mru/PP390+nVtZBvPL0iNS8RKpUvjcVeQKXTRDoc2HZfNFJUGKNafOecnahB4QI4ixy8ygWEwmCpY7LYBZKz/y2bejQ+mo913jsqhke98Ycfh735D8cnvZNiXBz9VIxHw/mHHaemLgRs00NLEztnvhpaQsSwwtCLRiOUbsFampco3bbx3Hr8UumdFGQo6TplkzMkZcoZuR0jbe7err/swGt38J7xcLRL30cTo7ELCZUqCxeqDj989Gwe8oAaLRlVxj1te9reRdvxLm2TmpaMU66IQZvXBFUL4KbhJew8hjTvLBy4AIYiBIyuDjlCzJ1HCZPZZW94dHy4x3KP5buwHO9ieb39Y4t6S5p2GME6Anw0kVJfNO3EykTDSSOXuM0VXyX2JO5JfBeJJ98kEXJni9LkFFv5CULulJEUIRxgf9EHBbpuMUOorXmoEVaqrHHfFvcw/n8YGylILfjVI7T3vDxiXgdDT+khNEcVMIjs9o5fNK9d/M/HVIW0dPzcWmBihd9KmRgobwar0UB73wuYu6DjYG10w8+oFBEW8eL8K2a05etZRQcuO9NNyW7wiwuVIpGJ3/645lS76M09TC7O4As+Cfmc3SWRT4EytnAp611szq8uzuCiVMQXYd63k9C04uDco4UrUlaroOEiOF3nBGfpolx0VXYIOYPmO2t9+Hhz0V5d+HLDm7iIYOpsJEN1gvXvv8bHWWeHniSch4Wy5s9kL0rgy5PsjsMAU6cxSkiSunEnJUq4UcEoy6OpIly4YPj7hCiYeU08npYqxo1cCTOX1xWmLZNaG+IGwvloHR/2R/1h11JUzi2FA+hdpEqlZtI9lmfew5YHWCDBMxCvIrkpNcJHGvhSGcvFWIeSv7Ww3ArlDasY8e4tMEKKzKQiWLpIvG69nquIn0LZNDz9UGN4ajlacRzmnN3btdAm8liLrFBlxB1Jm34pDi67GjqELTevpXaTyjJZqeeKTAgpGLX0T4PmrpFiiUqn0ll3HyZ5jp5ebNnpzFxjm+L59ZRbpao5HpuYvcE+Wf9XOet1u+LafUHbNBt1xL+zwKb5B57P2nk= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_getOwner + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-get-public.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-get-public.ParamsDetails.json new file mode 100644 index 0000000000..1e26fb2d58 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-get-public.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"accessToken","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-get-public.RequestSchema.json b/docs/api-reference/reference/dpp-controller-get-public.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-get-public.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-get-public.StatusCodes.json b/docs/api-reference/reference/dpp-controller-get-public.StatusCodes.json new file mode 100644 index 0000000000..0fbae6ed8a --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-get-public.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-get-public.api.mdx b/docs/api-reference/reference/dpp-controller-get-public.api.mdx new file mode 100644 index 0000000000..a0d16e0194 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-get-public.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-get-public +title: "DppController_getPublic" +description: "DppController_getPublic" +sidebar_label: "DppController_getPublic" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQgF9lMKcEoH+SuO1GN9dOixQo1k2y6SEIAloc2dyVSIYcuUkNPU/fo09WjKQ6yRrd7d59Mj3iDOfn42C4RR8oarbeXRrMcB7CzDuOviwpPqyIF/WytDkqDDrqiphiwuxui05XhBnqPKeUbvwncqgw0mNtIxnMONak0DrMMGheo8KUr6nSmG2Rn4OoJo7WrbBp7kUxBe8SJfk+GY/lx1DKow3iGmZ4q0trWj+h0LYko8BH4DWBHEqJYWN9qZkSaFjWyTpKCWJd0hAV5t4xORazOoTS5q2l0ccktrf7vvnlR8pZoo6SH7adZxSjj1/flntD+4EqpCddhVJEP07nD1cXv324uL5B9Vmk16yXJUGl87V1NIikTStoDwexPcRGYUUp6dVXztnLGhQ+gnckyat8JCgslSa1FvtECgdfsmlOJqfLickHp8X4dDB59/14sPzu7HxwXkyK0x+Kycl4+W4vqJmPkbry8NqmPpg/LK8hUdxQHCRrCEq/El+a1yjddfl8ifi1p/cK2XLr14WYnBNrW87Z7xnpavf5/qsevE5DdCbjs336pjWvybFwI+Qta4bKpmTdaoegnAOBYiv3Do58BMsJIiVfx5wg5T6Qgun8ajA+PTs+YHnA8puwnOxjefPS/si8kGY8JXCegZ5s4rZR2k6wsclK0di33OZa2vyBxAOJ30Ti+RdJhNy7orQ5p879FkLplIk1ExzRcDUEDabuMCOonX2sCTa6rOnQFg8w/n8YG4WsVzKQoglBtr+N47+n2Yp47WXgXVFLhMyoGY50sKPNyciEMNq+Gm0bmV/bwOWse/mT19Hy87Wg2GG0JB0p7vgUn3uR6hc/+Vhpxgx/+f1GKupTsA8wXVzCJ3pG9W8R18yhzYd1hW+L26fg/fXiEhal5sLHSvT26tbuOHofyME1a2d0NLCI3tQ5w6WRAaboL9Mx5MJT6K0N4dfbRTehyAwjSnJXYOZdYst1y+Tff03Ost4OPyt4H1fa2T9be0mBzEiqP44izLyhpKB1qV/3riQFtzpa7WQ100wrH618nzJHu6xZ1rNSp7RzV8Hc53VFrcq0NpalT0g9usDHw5PhuO8cOpfOIQkMPnGl257RP1fmIcALEbAihh0Sb1K5u1JMTzwKpbZOLl0dS/nW4XKHOlhx40S0Q0CF2ev30L3CtU8sG7fbpU70IZZNI+LHmuJzR9JGMrGU+t5t0dgka4NZoctEez7tGiMeXfWX5RheyHnray/UTthqmytmiAoFtrcPt+a+UbgmbYTfu22/Y5rnFPiV7l4vlpfb7iL9fHGDTfMPx5rm7Q== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_getPublic + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-list-profiles.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-list-profiles.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-list-profiles.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-list-profiles.RequestSchema.json b/docs/api-reference/reference/dpp-controller-list-profiles.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-list-profiles.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-list-profiles.StatusCodes.json b/docs/api-reference/reference/dpp-controller-list-profiles.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-list-profiles.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-list-profiles.api.mdx b/docs/api-reference/reference/dpp-controller-list-profiles.api.mdx new file mode 100644 index 0000000000..d24cd5d45d --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-list-profiles.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-list-profiles +title: "DppController_listProfiles" +description: "DppController_listProfiles" +sidebar_label: "DppController_listProfiles" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQx19lwFMWkB07cduNbq6dFimwWDfJpofACGhxZHGXIhly5MY19Dx9jz5ZMZTy0RjINnefwlDDP+fjxzG5E85jkKSdvVAiF3PvZ85ScMZguDM60iK4UhuMIhNeBlkjYYgiv11mImD0zkaMIt+JyWjEfxTGImjPgiIXN9JoldShlNqgysAFoAoh4H2DkWCjnZGEESSsmqgtxgihMTgUmSicJbTEstJ7o4ukdPw1svZOxKLCWvKIth5FLtzqKxbEjgaOinTnGYbgwvfNCqfwhVWkoO1aZAIfZO0NT/08nd9dnv/+5fzqWmSvIr0iuTIItSwqbXEQUKo0kTYH1h6KNhM1xijX39lnL2tQugDOIievdgGh1GhUTIp9Irl6b2mq8eRkNVHF4KQcnQwmH38cDVY/nJ4NzspJefJTORmPVh/3gpq5ELArD1U69sH8qamCiGGDYRC1QjBuzb70zuiASuS3XT6fI37p6TITpCn5dc6ScySpzZzcnkhXu9f2lz143QpeMxmN9+n7pGPUdp1BLU3pQt3jhw+e5aEIqNCSliYeaDvQ9i7aTvdpmzZUMU6FJAZt1RDUHYBPDS9h5zGkeWfhyAXQFCFgdE0oEGLhPGYwnV8ORienHw5YHrB8F5aTfSyvn39sUT2TphxGsI4AH3Sk1Bd1N7HRUXPRyCVuC8lXgQOJBxLfReLZmyRC4WxpdEGxcz9ByJ0ykiSEIxyuhyBBNR1mCI3V9w3CRpoGD23xAOP/h7HNBMk1v1iE8p7NIxZN0LQV+e1OrFAGDPyeaZevQ3zzMVQjVY6fTGtMvEiqRC6OpdfHm/Gx8n7gn427jPTPpsf9r5jRjq9HL3pwOZh+KusHv7hQSxK5+O2Pay61i17fwXRxAd9wK7LH6lZEPiVK29Klqve5+Xy1uICFkcQXYV63V9BkcfTZo4UrklbJoGARnGoKgot0US77U/YBCgbN92pD+HSz6K4ufLnhRXyIYOZsJE1NgvWfvyenea9D2ww+h7W0+q+kFzPgy1PWb4cBZk5hzCC51I97V2IGNzJoaXk0k4RrFzR/nxIFvWqIxzMjY3xyN4O5K5oa05JpozRxA+F6dIGPhuPhqG8psuCWwgn0LlItUzOxMlVk7j088wDMA7wA4j/ZfDpuhA907I3Ulg9kEwx/62C5FdJr9mTMq18Cs8xE5SKxyW63khG/BNO2PH3fYNh2GG04DSsu7u2yzUSFUiWQd4KJyMW0KNAzmqlpiny/TzLxTxj/es6NSzbs2ZP3ryBM6v0nabcvtHe7zuLafUPbtiLrnSD+X7TLtm3/BYuuoVE= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_listProfiles + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-publish.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-publish.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-publish.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-publish.RequestSchema.json b/docs/api-reference/reference/dpp-controller-publish.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-publish.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-publish.StatusCodes.json b/docs/api-reference/reference/dpp-controller-publish.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-publish.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-publish.api.mdx b/docs/api-reference/reference/dpp-controller-publish.api.mdx new file mode 100644 index 0000000000..b56c5944b1 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-publish.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-publish +title: "DppController_publish" +description: "DppController_publish" +sidebar_label: "DppController_publish" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0F+J2250c+0USIFF3CSbHowgoMSxzV2J5JKjNKmh5+l79MmKoRQ7idvd5u6TaYoz+s/Mj2PSG+E8BkXG2QstMjHzfuosBVeWGO59nZcmroUUXgVVIWGIIltshFUVikwYLaQI+LU2AbXIKNQohbEiE14Rm8VijZUS2UbQk2eLSMHYlWiaOzaM3tmIkZ+Ph0P+0BiLYDzrEZm4VaXRSRwslSlRS3ABaI3AL8VI8GBcqQgjKMjraCzGCKEusS+kKJwltMRulfelKZKnwefIvjf72lz+GQviYAMnhUyrDENw4fvLCqdxP1Ap8FFVvuSpnyez+6vz3z6dX98I+SbSa1J5iVCpYm0s9gIqnSbSy4F990UjRYUxqtV33rOXNVi6AM4iJ69yAWFpsNQxeewSycX/lk89Gp/kY130TpbDk974w4/DXv7D6VnvbDlenvy0HI+G+Ye9oKYuBGzLQ2sTu2D+MLSGiOEBQy8ajVC6FWtpXqK0aPO5i/il0jspyFDSdc4uZ0jKlDNye07a2r1df9WB11qwzXg42qfvo4nR2JWESpVLF6oOP3z07B6KgBotGVXGA20H2t5F2+k+bZOa1oxToYhBy2uCqgVw2/ASdh5DmncWjlwAQxECRleHAiEWzqOEyeyqNzw5PT5gecDyXViO97G82f3Yot6Rph1GsI4AH02k1BdNO/FgouGikUvcFopPEgcSDyS+i8Szb5IIhbPL0hQUW/kJQu6UkRQhHGF/1QcFum4xQ6it+VojPKiyxkNbPMD4/2FspCC14luP0N7z8ohFHQw9pYtQjipgENnijm80r0P8r7tUhbR2fNnyLiZW+K6UiYHyZvAwGmjvewELF3QcbIxuBjvLNjMs5oWOa2a15exZTQcwB9VNyW7wiwuVIpGJX3+/4ZK76M09TOYX8AWfhHyu8prIp4QZu3Sp+l2OLq/nFzAvFfGBmO32CptWHF16tHBNymoVNMyD03VBcJEOzMtutx1DwcD5zlsfPt7O2yMMH3LYiDcTTJ2NZKhO0P791/g06/zQk4TLsFLW/Jn8RQl8iJLd6zDA1GmMEpKkbtxJiRJuVTDK8miqCFcuGH4+IQomr4nH01LFuJUrYeaKusJkMqm1IW4kXI828GF/1B92rUUV3Fo4gVzjSqWm0l2aZ97DjgvYVfdVHrcbjvCRBr5UxvKWrEPJz1pkFkJ5wxpGbL3DRkiRpav5s+87KdbMWrYQm02uIn4KZdPw9Ncaw1PL0wPnI+cqLzZCm8hjLbKlKiPuidv2T3F01e2pY9jx81p0N6ksE5Z6sMiEkIKRS38iNHeNFGtUOm2lTfdgUhTo6YXJXqfmPbfdTfPL1DtVzanZpu8N/8n9v+rZbNoVN+4L2qbZyiP+zgqb5h9m/eDW +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_publish + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-rotate-token.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-rotate-token.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-rotate-token.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-rotate-token.RequestSchema.json b/docs/api-reference/reference/dpp-controller-rotate-token.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-rotate-token.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-rotate-token.StatusCodes.json b/docs/api-reference/reference/dpp-controller-rotate-token.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-rotate-token.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-rotate-token.api.mdx b/docs/api-reference/reference/dpp-controller-rotate-token.api.mdx new file mode 100644 index 0000000000..22bf689d87 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-rotate-token.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-rotate-token +title: "DppController_rotateToken" +description: "DppController_rotateToken" +sidebar_label: "DppController_rotateToken" +hide_title: true +hide_table_of_contents: true +api: eJztmN9PIzcQx/+V0TxxkvMDSNu7fUsJlah0ggJHHxBCznqS+G7XNvYshYv27+n/0b+sGu9egEvFlfc8YXk94+/MfDyxWaMPFDVb704MFjgL4cg7jr6qKN5Gz5rp0n8hhwqDjromppiwuF6j0zVhgdagwkh3jY1ksODYkELrsMCgeYUKU7miWmOxRn4MYpE4WrfEtr0RwxS8S5Tk+2Q8lj+GUhltEE1Y4JWurMkCYaFtRUaBj8ArAtmUEsO99ZVmSqBh3iTrKCWITUVDVFh6x+RY3OoQKltmT6PPSXyvt7X5+WcqWYKNkhi2nTKK0ccfLyu9oe1AFdKDrkMlU79OZ7fnx398Or64RPVdpBes5xVBrcuVdTSIpE2eyJuD+B5iq7CmlPTyB/tsZQ0WPoJ3JMmrfSRYWKpMyh77RAoAr/k0+5OD+cSUg4PF+GAwef/zeDD/6fDD4MNisjj4ZTHZH8/fbwV15GOkrjy8sqkP5i/LK0gU7ykOkjUElV+KlvY5StddPp8ifq70RiFbzrqOxeWMWNtqxn7LSVe779ef9+B1FmIzGe9v0/fRpmTdUkGtq4WPdY8fPQRxD2UkQ46trtKOth1tb6LtcJu2acMrwanULKDNG4a6A3DT8DJ2gWKe9w72fATLCSIl38SSIJU+kILp7HwwPjh8t8Nyh+WbsJxsY3n59GNL5ok04ymB8wz0YBPnvmi7iXubrBSNfea21HKb2JG4I/FNJH54lUQovVtUtuTUyc8QSqdMcmeFPRouh6DBNB1mBI2zdw3Bva4a2rXFHYz/H8ZWIeulvHrQhCDLE5VNtPyYH0Jz0pEiFtc38qJ5GeJr76maeOXl0RV8yrzIe6nAkQ52dL8/MiEMIpU+mjRaW9OOOusB9+ZdikTVM0EXAm0H3DdZPckSXT+l+sFvPtaascDf/7yU2vsU7C1Mz07gCz2i+lbuFXPImbNu4TMGfbJOL85O4KzSLDdjsduqcF6xdxrIwQVrZ3Q0cBa9aUqGk3xzXvTH7h2UQl7ovQ3h49VZd5eR244YyamCI+8SW24yvf/8PTksej/8qOA0LrWzX7O/pEBuU6rfjiIceUNJQZbUj3spScGVjlY7GR1ppqWPVr5PmaOdNyzjo0qntJGrYObLpqZsMm2MZekoUo8u8PFwfzjue4wupcdIAqXQtc7dpX89z0KAJ0CgKzF8I+RFMjfHj+mBR6HS1skBbWIl3zp4rlEHK0L2xfoJIFRYdA/15wzdKFwJesU1rtdznehTrNpWpu8aio8dWfeSmbnU+3qNxiYZGywWukq0pXDTUnHvvD9m7+CJpJfK+0nthLXclrFAVCjw5f8rtDetwhVpk0/Xuv8wLUsK/Mxkq3nLMdwcrrPT3E51I/nZ5PC7k5Dd/6ee9bpbkUvStht5XQbbm7Zt/wXxyOmN +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_rotateToken + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-suspend.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-suspend.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-suspend.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-suspend.RequestSchema.json b/docs/api-reference/reference/dpp-controller-suspend.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-suspend.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-suspend.StatusCodes.json b/docs/api-reference/reference/dpp-controller-suspend.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-suspend.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-suspend.api.mdx b/docs/api-reference/reference/dpp-controller-suspend.api.mdx new file mode 100644 index 0000000000..1c406cbf42 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-suspend.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-suspend +title: "DppController_suspend" +description: "DppController_suspend" +sidebar_label: "DppController_suspend" +hide_title: true +hide_table_of_contents: true +api: eJztmN9PIzcQx/+VkZ9Acn5B2h77liZUotKJFDj6ECHkrGcT3+3aPnuWQqP9e/p/9C+rxrskQNq78p4njO2Z/c7Mx4PNRjiPQZFx9kKLTMy8nzpLwZUlhvtYR49WCym8CqpCwhBFttgIqyoUmTC8FPBrbQJqkVGoUQpjRSa8orWQIuZrrJTINoKePFtECsauRNPcsWH0zkaMvD4eDvmHxpgH41mPyMStKo1O4qBQpkQtwQWgNQJ/FCPBg3GlIoygYFlHYzFGCHWJfSFF7iyhJXarvC9NnjwNPkf2vdnX5pafMScONnBSyLTKMAQXvr8tdxr3A5UCH1XlS576eTK7vzr/7dP59Y2QbyK9JrUsESqVr43FXkCl00T6OLDvvmikqDBGtfrOd/ayBoUL4Cxy8ioXEAqDpY7JY5dILv63fOrR+GQ51nnvpBie9MYffhz2lj+cnvXOinFx8lMxHg2XH/aCmroQsC0PrU3sgvnD0BoihgcMvWg0QulWrKV5idKizecu4pdK76QgQ0nXObucISlTzsjtOWlr93b/VQdea8E24+Fon76PJkZjVxIqVRYuVB1++OjZPeQBNVoyqowH2g60vYu2033aJjWtGadcEYO2rAmqFsBtw0vYeQxp3lk4cgEMRQgYXR1yhJg7jxIms6ve8OT0+IDlAct3YTnex/Jm98cW9Y407TCCdQT4aCKlvmjaiQcTDReNXOI2V3yTOJB4IPFdJJ59k0TInS1Kk1Ns5ScIuVNGUoRwhP1VHxTousUMobbma43woMoaD23xAOP/h7GRgtSKXz1Ce8/bI+Z1MPSUHkJLVAGDyBZ3/KJ5HeJ/vaUqpLXjx5Z3MbHCb6VMDJQ3g4fRQHvfC5i7oONgY3Qz2Fm2mWExL3RcM6stZ89qOoA5qG5KdoNfXKgUiUz8+vsNl9xFb+5hMr+AL/gk5HOV10Q+JczYwqXqdzm6vJ5fwLxUxBdittsrbNpxdOnRwjUpq1XQMA9O1znBRbowF91pO4acgfOdtz58vJ23Vxi+5LARHyaYOhvJUJ2g/fuv8WnW+aEnCZdhpaz5M/mLEvgSJbvPYYCp0xglJEnduJMSJdyqYJTl0VQRrlwwvD4hCmZZE4+npYpxK1fCzOV1hclkUmtD3Ei4Hm3gw/6oP+xai8q5tXACucaVSk2lezTPvIcdF7Cr7qs8bg8c4SMNfKmM5SNZh5LXWmQWQnnDGkZsvcNGSJGlp/mz7zsp1sxathCbzVJF/BTKpuHprzWGp5anB87Hkqu82AhtIo+1yApVRtwTt+2f4uiqO1PHsOPntehuUlkmLPVgkQkhBSOX/onQ3DVSrFHpdJQ23cIkz9HTC5O9Ts1nbnua5pepd6qaU7NN3xv+k/t/1bPZtDtu3Be0TbOVR/w7K2yafwCUEuEN +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_suspend + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-validate.ParamsDetails.json b/docs/api-reference/reference/dpp-controller-validate.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-validate.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-validate.RequestSchema.json b/docs/api-reference/reference/dpp-controller-validate.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-validate.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-validate.StatusCodes.json b/docs/api-reference/reference/dpp-controller-validate.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-validate.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/dpp-controller-validate.api.mdx b/docs/api-reference/reference/dpp-controller-validate.api.mdx new file mode 100644 index 0000000000..b0a77e302b --- /dev/null +++ b/docs/api-reference/reference/dpp-controller-validate.api.mdx @@ -0,0 +1,69 @@ +--- +id: dpp-controller-validate +title: "DppController_validate" +description: "DppController_validate" +sidebar_label: "DppController_validate" +hide_title: true +hide_table_of_contents: true +api: eJztmM1uIzcMx1+F0CkB5K/EbTdzc+0USIFF0iSbHowgkEe0rd0ZSZE4blxjnqfv0ScrqJm1nbjdbe4+WdaInD/Jn2jJG+E8BkXG2SstMjHxfuwsBVcUGJ5WqjBaEQopvAqqRMIQRTbdCKtKFJkwWkgR8LkyAbXIKFQohbEiE17RUkgR8yWWSmQbQWvPFpGCsQtR149sGL2zESM/H/b7/KEx5sF4FiQy8dAIMM7CXJkCtQQXgJYI/FKMBCvjCkUYQcGsisZijBCqArtCitxZQkvsVnlfmDx56n2O7HtzqM3NPmNOHGzgrJBplGEILnx/We40HgYqBb6o0hc89fNo8nR7+duny7t7Id9EekdqViCUKl8ai52ASqeJ9HJg311RS1FijGrxnfccZA3mLoCzyMkrXUCYGyx0TB7bRHL1v+VTD4Zns6HOO2fz/lln+OHHfmf2w/lF52I+nJ/9NB8O+rMPB0GNXQjYlIeWJrbB/GFoCRHDCkMnGo1QuAVrqfdRmjb53EW8r/RRCjKUdF2yywmSMsWE3IGTpnZv19+24DUWbDPsDw7p+2hiNHYhoVTF3IWyxQ9fPLuHPKBGS0YV8UjbkbZ30XZ+SNuooiXjlCti0GYVQdkAuG14CTuPIc07CycugKEIAaOrQo4Qc+dRwmhy2+mfnZ8esTxi+S4sh4dY3u9+bFHvSNMOI1hHgC8mUuqLpplYmWi4aOQSt7nio8SRxCOJ7yLx4pskQu7svDA5xUZ+gpA7ZSRFCCfYXXRBga4azBAqa54rhJUqKjy2xSOM/x/GWgpSC771CO09L4+YV8HQOl2EZqgCBpFNH/lG8zrE/7xMlUhLx9ct72KChS9Lmegpb3qrQU973wmYu6Bjb2N03dszbXLDcvaU3DGtDWlf9bQIc1jtlGwHv7hQKhKZ+PX3ey66i948wejmCr7gWsivdV4S+ZQyY+cu1b/N0vXdzRXcFIr4SMx2B6VNK06uPVq4I2W1ChpugtNVTnCVjszzdr+dQs7I+dZbFz4+3DSHGD7msBFvJxg7G8lQlbD9+6/hedb6obWE67BQ1vyZ/EUJfIyS7eswwNhpjBKSpHbcSokSHlQwyvJorAgXLhh+PiIKZlYRj8eFinErV8LE5VWJyWRUaUPcSrgeTeD97qDbb5uLyrm5cAK5yKVKbaW9Nk+8hx0ZsFfeV4nc7jnCF+r5QhnLu7IKBT9roJkK5Q2LGLD1DhwhRZZu51vnj1IsGbdsKjabmYr4KRR1zdPPFYZ1Q9SKMzLjOk83QpvIYy2yuSoiHqjb9lBxctvuq1PYEfRadTup7LoRVfE3IQVDl/5IqB9rKZaodNpOm/bBKM/R057JQbfmfbfdUDfXqX+qinOzzd+bHZDc/6uezaZZce++oK3rrTzi76ywrv8BX7XidQ== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +DppController_validate + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/health-controller-check.ParamsDetails.json b/docs/api-reference/reference/health-controller-check.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/health-controller-check.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/health-controller-check.RequestSchema.json b/docs/api-reference/reference/health-controller-check.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/health-controller-check.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/health-controller-check.StatusCodes.json b/docs/api-reference/reference/health-controller-check.StatusCodes.json new file mode 100644 index 0000000000..c495169a2d --- /dev/null +++ b/docs/api-reference/reference/health-controller-check.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":"Always 200 — check the body's `status`/`database` fields, this endpoint never itself errors."}}} \ No newline at end of file diff --git a/docs/api-reference/reference/health-controller-check.api.mdx b/docs/api-reference/reference/health-controller-check.api.mdx new file mode 100644 index 0000000000..c5fc6a8ce3 --- /dev/null +++ b/docs/api-reference/reference/health-controller-check.api.mdx @@ -0,0 +1,69 @@ +--- +id: health-controller-check +title: "HealthController_check" +description: "HealthController_check" +sidebar_label: "HealthController_check" +hide_title: true +hide_table_of_contents: true +api: eJx1Uttu00AQ/ZXRvADSKg2FJ79F4RYklEgp5aGqms16Ei+1d5eZccFElvoR/AP/wafwJWgdt5RKPHk04zl7zpxzwJiIrfoYFiUW+I5srdU8BuVY18RXriJ3jQaTZduQEgsWF5cGmSTFICRYHPB0Os2fksSxTxkMC5zVX20ncDqdwu/bHzAAgVYE21h2TwQ2olZb2ZxsSqt2a4U2sPNUl2JAKy9AoUzRB4VAN8TgVajeATFHlgn2vUG1+0wHq4E1XppHFP6rpiGtYta7Jx3EaYUFnow4BoX45l6qkGvZa7d2FTVHwVuyTJwrGZpY3LXMWLyJ3FjFAt9/OoPIECX5K5itFnBNHRrULuWtSjUNUnzYxYynXus8WK5XC1jVVneRm7yHj8UNfzxdJgqwVhtKyyWsOJatU1iUFNTvvBucfQYuMkEa0Sbw4XwF4mIiSMR56TM5hXkMol7bvAK/fr58UYw42hlY8t4G/33AEwOzViszPkcM81iSGBgojfVIRQycW/Y25GpulfaRfZ7PVNlvW831vLYi93QNvIqubWhYmbWl1wkazH4chU8nzydTNOhiUOsUi0M+YIqijQ35hsEOjhzdh7/2w539/xzycOeF0jc9SbX1AXuDLdd5dozGw4hVUTR3Doec2Y9c931uf2mJu2NgbrLgbbbx4rJ/ELa3r8+w7/8AwlIyNg== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +HealthController_check + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-create-producer.ParamsDetails.json b/docs/api-reference/reference/identity-controller-create-producer.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-create-producer.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-create-producer.RequestSchema.json b/docs/api-reference/reference/identity-controller-create-producer.RequestSchema.json new file mode 100644 index 0000000000..ebb6e4619b --- /dev/null +++ b/docs/api-reference/reference/identity-controller-create-producer.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"],"title":"CreateProducerDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-create-producer.StatusCodes.json b/docs/api-reference/reference/identity-controller-create-producer.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/identity-controller-create-producer.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-create-producer.api.mdx b/docs/api-reference/reference/identity-controller-create-producer.api.mdx new file mode 100644 index 0000000000..c8e03f0c59 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-create-producer.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-create-producer +title: "IdentityController_createProducer" +description: "IdentityController_createProducer" +sidebar_label: "IdentityController_createProducer" +hide_title: true +hide_table_of_contents: true +api: eJztmF9vIjcQwL/KyE85yRBIaHvhjSOplEqn0CSXPiAUDbsD+G7X3tizJBzaz9Pv0U9WjXcJJFS5i9RHnjD2eDx/fjPYrJUryCMbZy9T1VeXKVk2vBo6y95lGfn7xBMyjbxLy4S80qpAjzkx+aD644lWnh5KCvzJpSvVX8evxlOq+uxL0ipxlsmyLGFRZCaJpx1/Dc7KXEgWlKOMeFWQ6is3/UoJyzlebGNDQVYt5rQjFdgbO1dVpXcOHNdSE63YcCZiwxfGn7NTVVXvCYWzoVbd63TkI6WQeFOIdaqv7jAzaTQVZmgySjU4D7wgaPyFpXEZMgVAmJbBWAoBfJlRW/1vTpP3zv9YLHHpf8RGK3rCvIhx+DQ4v7+++PPLxc2t0q88vWGcZgQ5JgtjqeUJ0zgRDwfR3VaVVjmFgPMfnLMXNZg5D86SBC93nmBmKEtD1NgEUsB7S2fa7Z1Me2nSOpl1Tlq9j792WtNfTs9aZ7Pe7OS3Wa/bmX7cc2rovKc6PbwwoXHm0fACAvkl+VYwKUHm5mLLK4piPLce71q6w9aFqDwnRpPVYL1UUufutfx1A94WxV6nu0/fZxOCsXMNOWYz5/MGP3oqRD0knmKhYhYOtB1oexdtp/u0DUpeCE4JsoA2LRnyGsDnhhexK8jHeWfhyHkwHMBTcKVPCELiCtIwOL9udU5OPxywPGD5Lix7+1jebn9sKd2SljoKYB0DPZnAsS+aemJpgpGksYvcJigXmAOJBxLfReLZmyRC4uwsMwmH2vwIoXTKwMgER9SetwEhLWvMCEprHkqCJWYlHdriAcafh7HSinEuryxlmneZ7AmUlF7G/fFaTQk9eXmIVZPXfv7MYy4nXjh5+RUuRHiQF6qvjrEwx8vucdFIBiXnSmyaR9/GiBuhtSZtY0qDsLjVTOlm8LvzObLqqz/+upWku1CYexiMLuEbrZTe5HnBXMSQSUlcb1+XF5u0b16Dz69ArYyduYhKE9Crm9EljDJkuT3LEXsURImjq4Is3DDaFH0KdWAY6sjNmtL8AInQWTTa2vD5blTfd+RGJJuk8mDobGDDZST8n797p33YZEDDlZ+jNd+jvqBBblwaNnmAoUspaIgmNePGlKDhDr1BK6MhMs2dN7I+YPZmWrKMhxmG8GyuhnOXlDnFLYMyNSxdR1JXO95pd9udpg9hIn1IYi35z9HuBHdjPGz5gZof2AHoRVCfS5XpiY+LDI2V5JQ+k7WarbHCwohB3bpXNXxNtFoIgv2xWq+nGOiLz6pKph9K8quauqWEYioJHk8qrRaEaYR/rQQgqezYWlu3YoWIZ6VYs9dmK73ZMUgSKvhN2clOlYyuYpOcNv915LG5Ko+P0gjwUfWV0srFaMSaiHNrlaGdl7FBqlqnRBxLCcdzyF7VSvSqWUK72rFwva4lbt03slWldOMKy3dVTaqq+he5zSJT +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_createProducer + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-issue-ospi-identity.ParamsDetails.json b/docs/api-reference/reference/identity-controller-issue-ospi-identity.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-issue-ospi-identity.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-issue-ospi-identity.RequestSchema.json b/docs/api-reference/reference/identity-controller-issue-ospi-identity.RequestSchema.json new file mode 100644 index 0000000000..124daf3d60 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-issue-ospi-identity.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"producerCodeId":{"type":"string"},"categoryCode":{"type":"string","example":"123456"},"companyProductId":{"type":"string","description":"Producer-supplied product identifier (Deel 4 §14)","example":"00012345"},"variantCode":{"type":"string","example":"0001"},"serialBatch":{"type":"string","example":"00000001"},"version":{"type":"number","minimum":1,"maximum":9,"default":1},"reserved":{"type":"boolean","description":"Reserve this identity (ADR-024, Deel 4 §37) instead of registering it outright — useful for ERP sync/bulk imports/manufacturing workflows that need to hold a code before the product is fully created. Attaching it to a Product/Variant later still works directly — it does not need a separate \"un-reserve\" step first — and moves it straight to ACTIVE."},"reservedUntil":{"type":"string","description":"Only meaningful with reserved: true — when the reservation lapses."}},"required":["producerCodeId","categoryCode","companyProductId"],"title":"IssueOspiIdentityDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-issue-ospi-identity.StatusCodes.json b/docs/api-reference/reference/identity-controller-issue-ospi-identity.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/identity-controller-issue-ospi-identity.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-issue-ospi-identity.api.mdx b/docs/api-reference/reference/identity-controller-issue-ospi-identity.api.mdx new file mode 100644 index 0000000000..77968ba39f --- /dev/null +++ b/docs/api-reference/reference/identity-controller-issue-ospi-identity.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-issue-ospi-identity +title: "IdentityController_issueOspiIdentity" +description: "IdentityController_issueOspiIdentity" +sidebar_label: "IdentityController_issueOspiIdentity" +hide_title: true +hide_table_of_contents: true +api: eJztmF1u2zgQx68y4FMCyF+J+xG/uUkWyAJFskmafUiDgpJGNluKVMmhE68hYA+xd+g9epQ9yWIoOXbsoGmBffSTaYofw5nfjKj/QtgKnSRlzVkuRuIsR0OK5sfWkLNao/ukvA947iu1fCYSUUknSyR0Xoxu7xLh8GtAT+9sPhejRfyrHOZiRC5gIjJrCA3xI1lVWmVxw95nbw33+WyKpeQWzSsUI2HTz5gR7+PYPFLo+WnlbB4ydMc2R7b2cbwnp8xE1InIJOHEujkP2R6QCHyQZaW5a3BwOHz1Os6xZSXN/CKuTs8tnIgcfeZUxWaLkbhoDen4wMfBHBrTCFT0UaHQwd4JooYhfP82GO4/2brf78fdefOZdEoaetlensQTPDol9TtJ2fTFCf3lpBk6rxpntxNMKFN0IhGlMqoMpRgNElHKh6Z9xCcuZNAkRoOa4+vRzXDdNam1GqXZ8s1lMxRoqnzrDprD3vjkstM/GCbw6JXDN/ugjCeUOdgCHE6UJ+RjgCKwgZyaTAn+/fsfCB6LoKGwDk4vL8DPTdZLg/4CqqysI98rpQmFzCjE6ffWfSm0vfdAU0lgEHMgC1Orc5CQ2RwhxcI6NhJXofNQBK3nkDmUhHkXxkQym7YGkQUJLSO9myZqoCWhA09K67irh1w5zEjPo92KILfowdjWCgkeOXcI4aMIptP69aMAT1hBoZxvTixNDqWdoec1PDkZfUEWxsfXZzenXbEWlA+GlH4Z2nOj51CiNMpM2Jv3iqawXGMEnKlx6/spmuiY5llMVdCy8ui7oq6Ttey+3UzJjQR8JrfuEkGKIqBnm4XlhKyo62YLX1njm7Qf9vv88/Q0N1KrvLGtkEpjnoB1rdmxFsFMWQ6PBwlp8Mqg9+CCxq743woSOmfdy8OyF5P73fjk0+XpHx9Or6634nZFMtUIZUQROw5lHjvi5pHmSEOJ3svJC/tseS3mlDXIzis5IwqFOvctX9GRzxfE1Zr5YHiQDvOsc1D0DzrDt6/7nfTV4VHnqBgWB2+K4aCfvt061LF1DpvwxELRHCYiGYF0Ha9yBG0nz0CXNWwtT7xu6Rpep7zkCZJUugHr6SJN7DbHX7bgrVAc9gfb9L1X3iszSaCUurCubPHDh4qX5woSkZba72jb0fZLtB1u0zYONGWcuLbmCaSBoGwAfCx4EbsKXey3BvasA0Wea7gNLkPwma0wgeY1fLi/w3KH5S9hOdzG8nr1ssV8RdrjjQcflKdYF1XTMVNecdDIRm4zyd8XOxJ3JP4SiUc/JBEyawqtMvKN+RFCrpSe+Na9h91JFyTkocEMIRj1NSDMpA64K4s7GH8exjoRJCesgIjldy7P8ZgFx+3R7UKkKB06Fknqu81z/qTWUiJNLWszlfWRH0lTMRI9WanebNCzvlKddn9mKioEs0dlZmnNFWPbILe0qWU5fsw3XUnb+M26UpIYid//vObo8x6fYHxxBl+QTWoDPiWqou84Ny5XEtDpMv7bks0KkqdKzVKOeU6NWeklG3JJo4lsSCIr3WNN9hisSxiNJrXx9bymISlT2Ih1G/zzq4szuNCS+KbPXtj+tOYRe+cVGrgiaXLp8qVUAGetItSUkX3IOJOqdrUuvL+5aO5mfHvjSVwl4NgaT4pCzMbv34aHI1gSkcC5m0ij/orr+QT4dpjAUpICdo1PIJrUtltTfAKtbuETOG7cr/j5mMipNBC3j7X0/tHcBE5sFkqMU8YhV9Rdd6vodwfdflszZcY1k3FgUEsZq6WRka+l8bBiHSLrwLDDGu1PHPtYWggfqFdpqQwHKLgodzSJcCtkpdgoDvhmMtwlYspZM7oVi0UqPX5wuq65+2tAN29SJDKVcqhv7+pETFHmMWUXgmnnehRfCJ1rtoWH68A2bb0c6mQ5Y5xlWNEPx96tJfbFeSztaauelg3cTt5z+ZL3YiT4aNEnMYFj30JoaSYhlnXRrMm+l4HWdcGNxI6nah9JM1+zcLFoRlzbL2jqWiTtUYj/i/quruv/AOJ/o1M= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_issueOspiIdentity + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-issue-producer-code.ParamsDetails.json b/docs/api-reference/reference/identity-controller-issue-producer-code.ParamsDetails.json new file mode 100644 index 0000000000..f8f85c7cc0 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-issue-producer-code.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"producerId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-issue-producer-code.RequestSchema.json b/docs/api-reference/reference/identity-controller-issue-producer-code.RequestSchema.json new file mode 100644 index 0000000000..ab096399e2 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-issue-producer-code.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Desired producer code, A-Z0-9, max 12 characters","example":"ACME"}},"required":["code"],"title":"IssueProducerCodeDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-issue-producer-code.StatusCodes.json b/docs/api-reference/reference/identity-controller-issue-producer-code.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/identity-controller-issue-producer-code.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-issue-producer-code.api.mdx b/docs/api-reference/reference/identity-controller-issue-producer-code.api.mdx new file mode 100644 index 0000000000..c7ebaa2cb7 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-issue-producer-code.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-issue-producer-code +title: "IdentityController_issueProducerCode" +description: "IdentityController_issueProducerCode" +sidebar_label: "IdentityController_issueProducerCode" +hide_title: true +hide_table_of_contents: true +api: eJztmNtuGzcQhl9lwCsHoE622sZ7p8gu4AKBXdtJgRpGMNodSUx2yQ0560OEfZ6+R5+sGHJlWVaQJkUvdWWaSw6H/3wz2tmVcjV5ZOPsWaEydVaQZcOPU2fZu7Ik/8GE0NCFd0WTk5+6gpRWNXqsiMkHld2slMWKVKbqbtFZobTy9LkxngqVsW9IK2NlBfJSaRXyJVWospXix1p2BvbGLlTb3qaNFPiNKx5lxUs7ubNMluUR1nVp8uj84GNwVuZ2TLvZR8pZfPZyVTYU5GkuF9lxQKuCQu5NLTZVpk4oyNmwvhnINg2T3p/D3rGGCh9gdAj5Ej3mUQ2t6AGruhSbk+nbU9W2z6W4SefeasWG46Kzl+qesFNtm7aF2tmQ/B0Ph/Jn2733WJoi3h/maEoqNDgPvCToRIQ740pkCoAwa4KxFAL4pqS++t+UJO+d/++Cb/R6Mzn5cHn6+7vTq+udQFwxzkqCCvOlsdTzhEWciIfHqPRVq1VFIeDiX87ZUQ3mzoOzJOJVzhPMDZVFiBY7ISU5vmWzGI0PZ+Mi7x3Oh4e98eufh73ZT0fHveP5eH74y3w8Gs5e71xq6rynFB5emtBd5t7wEgL5O/K9YAqC0i3El6+BtLnxc0+f4XUqJk+I0ZQJrG0jKXYv11924G1QHA9Hu/S9NSEYu5A0KOfOVx1+9FDHnMk9xWKCZdjTtqfth2g72qVt0vBScMqRBbRZw1AlAJ8KXirV5OO8s3DgPBgO4Cm4xucEIXe1lO+Ty97w8OjVHss9lj+E5XgXy+vNjy0VG9IKRwGsY6AHEzjWRZMm7kwwEjR2kdsc5SVrT+KexB8i8fibJELu7Lw0OYfkfoRQKmVgZIID6i/6gFA0CTOCxprPDcEdlg3ty+Iexu+HsdWKcSFtoDJd7yh7AuWNl7G0hzNCT15lN7fS323f8zsbzop46aRBrV2I/EgjmakB1mZwNxqs+7MwWG2a0HYgOkhPlhQTJ5+5diUMJ/7WDnZgy2W7Kd0NfnW+QlaZ+u2Pa0HBhdp8gMnFGXyiR6XX0V8y11FISZTLTSN7uoZhzXrXHEpbPHcRn07k86uLM7gokeWNWg7YISOuODivycIVoy3QF5DUYkhqzrt0fQW5EFt31vrw9v1FegeStyTZJNkIU2cDG24i9X//NT7KYB0VDed+gdZ8ifaCBnkL07AODkh0goboUjfuXAka3qM3aGU0RaaF80aeT5i9mTUs42mJITy5q+HE5U1FccukKQxLJZLApYsP+6P+sKtNmEttEqUFiApjVeo+Q6ydhw1TEJna9vulsE8pzPTAg7pEYyVAjS/lWQLuRmFtxKlRqmEJOqVVtvXtI3F3q9VSaM1u1Go1w0DvfNm2Mv25If+YaLwTkWYS+puVKkyQcaGyOZaBdhx8qsrq4LLL1FewoW/b8W4SrfAZK7vKlNJKgN36VtPetlotCYuYo6tuwTSd1bsWMxsDO78GrV7vmOQ51fzNtbfPMvniPNbyWfedp0p54fFe6hXeJ2ddvHtM0ji3UiXaRRPruEo2BQJsJDpPEXyRvPFWX5VjtUorrt0nsm37pA7L/yJM2/4DHt2RFg== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_issueProducerCode + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-list-producers.ParamsDetails.json b/docs/api-reference/reference/identity-controller-list-producers.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-list-producers.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-list-producers.RequestSchema.json b/docs/api-reference/reference/identity-controller-list-producers.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/identity-controller-list-producers.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-list-producers.StatusCodes.json b/docs/api-reference/reference/identity-controller-list-producers.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/identity-controller-list-producers.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-list-producers.api.mdx b/docs/api-reference/reference/identity-controller-list-producers.api.mdx new file mode 100644 index 0000000000..210173004b --- /dev/null +++ b/docs/api-reference/reference/identity-controller-list-producers.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-list-producers +title: "IdentityController_listProducers" +description: "IdentityController_listProducers" +sidebar_label: "IdentityController_listProducers" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQx19lwFMWoB07cduNbq6TFimw2DTJpofACChqZHGXIhVy5E1q6Hn6Hn2yYig5SWNgd3P3yRQ/hv+Z+XFMboRvMCgy3p0XIhPnBToy9LjwjoK3FsOdNZEugi9ajSEKKRoVVI3EH9ntUoqAsfEuYhTZRswmE/4pMOpgGjYrMnGjrCnSHlAqY7GQ4ANQhRDwvsVIsDbeKsIICvI2GocxQmgtjoUU2jtCR2xWNY01Olk6/BzZ9kZEXWGtuEWPDYpM+PwzamKhgX0j0yvDEHz4/jTtC3wxK1IwbiWkwAdVN5a7fp2f3l2e/fnp7OpayFeeXpHKLUKtdGUcjgKqInWkzYFtj0UnRY0xqtV39tmJGpQ+gHfIwat9QCgN2iImi0MgOYffsllMZ0f5rNCjo3JyNJq9/3kyyn86PhmdlLPy6JdyNp3k73ecWvgQsE8PVSYOznw1VEHEsMYwiqZAsH7FWgYxJmAhsts+ns8ev1S6lIIMJV1nbPIUSRl7Sn7HSJ+71/MvB/D6FbxmNpnu0vfBxGjcSkKtbOlDPeCHDw2bBx0wMa9s3NO2p+1NtB3v0jZvqWKctCIGLW8J6h7Ap4KXsGswpH7v4MAHMBQhYPRt0AhR+wYlzE8vR5Oj43d7LPdYvgnL2S6W189/tlg8k1Z4jOA8AT6YSKkumr5jbaLhpJFP3GrFd4E9iXsS30TiyTdJBO1daY2m2MtPEHKljKQI4QDHqzEoKNoeM4TWmfsWYa1si/uyuIfxx2HspCC14heLMMMTh9dE1G3gdna7ETmqgIEfNd3ytZ8/8C6qkSrPb6gVJnQUVSITh6oxh+vpYfNiZh+Z4fm0lXDFrPacbYUMALNTQ5ccGr/5UCsSmfjjr2tOuY+NuYP5xTl8wUcht1muiJoUMONKn7I/xOjj1cU5XFhFfCHmdTuJTTMOPjbo4IqUK1QooPeWoA9GOZy2d6AZuGawNoYPNxf9FYYvObyIDxMsvItkqE3Q/vvP7DiDbVAlfAwr5czfyV6UwJcoCdvgwsIXGCUkSUN7kBIl3KhglOPWQhGufDA8PicKJm+J2wurYnySK+HU67bGtGTeFoa4kHA+escn4+l4MpQWpbm0cAAbH6lWqag4lTKyFQ/PSAAjAS+Z+F9Mnw4f4QMdNlYZx8ezDZbHel5uhWoM65n21WewtJSi8pF4fLPJVcRPwXYdd9+3GB57ktYciZzze7vspKhQFQnnjWAoMjHXGhtGM9VPke2WTOb+CePfz7iGqZZlPUl/xWGyPgwp9/jC9mbTz7j2X9B1nZCDCOJv0S27rvsPd9qpRg== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_listProducers + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-lookup.ParamsDetails.json b/docs/api-reference/reference/identity-controller-lookup.ParamsDetails.json new file mode 100644 index 0000000000..4002096c30 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-lookup.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-lookup.RequestSchema.json b/docs/api-reference/reference/identity-controller-lookup.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/identity-controller-lookup.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-lookup.StatusCodes.json b/docs/api-reference/reference/identity-controller-lookup.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/identity-controller-lookup.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-lookup.api.mdx b/docs/api-reference/reference/identity-controller-lookup.api.mdx new file mode 100644 index 0000000000..c805644e84 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-lookup.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-lookup +title: "IdentityController_lookup" +description: "IdentityController_lookup" +sidebar_label: "IdentityController_lookup" +hide_title: true +hide_table_of_contents: true +api: eJztmN1OKzcQx19lNFcgOV+Qtoe9SwOtqHQEBQ7nAiHk7M4mPuzaiz2bQqN9nr5Hn+xovJvwkYpT7nOF8drj/4x/M3hYoavIazbOnmaY4GlGlg0/TZ1l74qC/F3h3H1docJKe10Skw+Y3KzQ6pIwwdRlhAo9PdTGU4YJ+5oUGosJVpoXqDCkCyo1Jivkp0r2BPbGzrFpbmVjqJwNFOT7eDiUHxmF1JtKVGGC17owWZQIuTYFZQqcB14QyKEUGJbGFZopgIZZHYylEMDXBfVRYeosk2Uxq6uqMGm0NPgWxPZqW5ubfaOUxV0voWHTKiPvnf/xshiNLUcV0qMuq0Kmfp0c312c/Pnl5PIK1RtPL1nPCoJSpwtjqedJZ3EiHg5iu4+NwpJC0PMfnLMVNcidB2dJglc6T5AbKrIQLXaBFATes5mNxgezcZb2DvLhQW/86edhb/bT4VHvKB/nB7/k49Fw9mnLqanzntrr4YUJnTN/GV5AIL8k3wsmIyjcXLQ0L1G6WdO19vil0luFbDjqOhGTx8TaFMfstoy0d/d2/UUHXrtD9oyHo236PpsQjJ0rKHWRO192+NFjJeYh9RRTRhdhR9uOtg/RdrhN26TmheCUahbQZjVD2QK4KXgRu4p8nHcW9pwHwwE8BVf7lCCkriIFk+OL3vDgcH+H5Q7LD2E53sby6vmPLWXPpGWOAljHQI8mcKyLpp1YmmDk0thFblMtT4kdiTsSP0Ti0bskQupsXpiUQys/QiiVMrBmgj3qz/ugIatbzAhqax5qgqUuatqVxR2M/x/GRiHrufQ9aLoOSfYESmsvY+mHZqQ9eUxubqWtee3ne21VSbxw0nvNKTIjPVOCA12ZwXI0cKEyve5MQ2GwEq8baapifETSCyGXQmxL21pOh7G41k2pbvCb86VmTPCPr1dy8XLUHUzOT+GenlCt73rBXMWwGZu7yEAXqbPL81M4LzTLs1j2bV1vXLF3VpGFS9Y20z6Dc++yOmVoQ5J3ObcPqWBXddb68Pn6vH3IyFNHNklKwdTZwIbriO6//4wPE1iHVsGZn2tr/o72ggJ5SqnuOPIwdRkFBVFSN+6kBAXX2httZTTVTHPnjXyfMHszq1nG00KHsJGr4NildUlxy6TODEs5kftoHR/2R/1hV2B0KgVGAli5wKWOpaVrntfi4RkM2IDxKpab1GN65EFVaGMlOWtfyLcWmhvUlREdI1T4BhxUmMSEuVW4cIFl9Wo104G++KJpZPqhJv/U8rSUeMzklm9WmJkg4wyTXBeBtoRtqijuXXSZtQ/P/LwW3E1qK4TFSowJokJBrvtnQnPbKFyQzmI2rbpPkzSlil9s2qrYknabZPr9REqoriUum9i9SYBo/T8FrVbtiit3T7ZpNvpYfheBTfMdecXnhA== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_lookup + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-reactivate.ParamsDetails.json b/docs/api-reference/reference/identity-controller-reactivate.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-reactivate.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-reactivate.RequestSchema.json b/docs/api-reference/reference/identity-controller-reactivate.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/identity-controller-reactivate.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-reactivate.StatusCodes.json b/docs/api-reference/reference/identity-controller-reactivate.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/identity-controller-reactivate.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-reactivate.api.mdx b/docs/api-reference/reference/identity-controller-reactivate.api.mdx new file mode 100644 index 0000000000..87d41d4cb8 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-reactivate.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-reactivate +title: "IdentityController_reactivate" +description: "IdentityController_reactivate" +sidebar_label: "IdentityController_reactivate" +hide_title: true +hide_table_of_contents: true +api: eJztmN1OKzcQx19lNFcgOV+Qtoe9S4FKVDoiBQ69QAg560nic3btxZ5N4UT7PH2PPlk13iV8pDqU+1zF8a7H/xn/ZuLJGn1FQbP17sxghmeGHFt+PPaOgy8KCneBdM52pZlQYaWDLokpRMxu1uh0SZihNagw0H1tAxnMONSk0DrMsNK8RIUxX1KpMVsjP1ayInKwboFNcysLY+VdpCjPx8OhfBiKebCV6MIMr3VhTRIJc20LMgp8AF4SyKYUGVbWF5opgoZZHa2jGCHUBfVRYe4dk2Mxq6uqsHmyNPgaxfZ6W5uffaWcxdkgwWHbKqMQfHj/tdwb2nZUIT3osipk6tfJyd3F6R9fTi+vUL3x9JL1rCAodb60jnqBtEkTaXMQ231sFJYUo168s89W1GDuA3hHErzSB4K5pcLEZLELpEDwI5tmND6YjU3eO5gPD3rjTz8Pe7OfDo96R/Px/OCX+Xg0nH3acurYh0Dt8fDSxs6ZvywvIVJYUehFawgKvxAtzUuUbtp4Pnv8UumtQracdJ2KyRNibYsT9ltG2rN7+/5FB167QtaMh6Nt+j7bGK1bKCh1Mfeh7PCjh0rMQx4oJY0u4o62HW0fou1wm7ZJzUvBKdcsoM1qhrIFcFPwEnYVhTTvHez5AJYjBIq+DjlBzH1FCiYnF73hweH+Dssdlh/CcryN5dXzjy2ZZ9KMpwjOM9CDjZzqom0nVjZaOTT2idtcy2ViR+KOxA+RePRDEiH3bl7YnGMrP0EolTKyZoI96i/6oMHULWYEtbP3NcFKFzXtyuIOxv8PY6OQ9UK6HrRdjyRrIuV1kLF0QzPSgQJmN7fS1rz2873GqiReeunAKh8TONI4ZTjQlR2sRgMfK9vrNrYUB2trmsErA220ROALWZfCb8vek7gOanG0m1Ld4DcfSs2Y4e9/XgkGsucdTKZn8I0eUT2d/JK5SkG0bu4TEV3czi+nZzAtNMslWdZtHXZ6Y++8IgeXrJ3RwcA0eFPnDG2A5l0G7kMuEFadtT58vp621xq5+MgiSTA49i6y5TqB/M/f48MMngKt4DwstLPfk72oQC5WqtuOAhx7Q1FBktSNOylRwbUOVjsZHWumhQ9Wnk+Yg53VLOPjQse4kavgxOd1SWnJpDaWpbjIebSOD/uj/rArNzqXciMBlKMudSo0XSP9JB6eMYFXp/wqnptkZHrgQVVo6yRd61DIs5agG9SVFS0jVPiGIlSYda37ZotbhUshMLvB9XqmI30JRdPI9H1N4bHFayXhmcmh36zR2Chjg9lcF5G2NG5KLO5ddGm3D884vdbeTWonwKUyjRmiQiEw/c/Q3DYKl6RNSrR192CS51TxiyVbxVwycpNj0/NUXnUtEdpE8U06JPP/qWe9bt+48t/INc1GHst3Udg0/wLtP/LR +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_reactivate + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-retire.ParamsDetails.json b/docs/api-reference/reference/identity-controller-retire.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-retire.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-retire.RequestSchema.json b/docs/api-reference/reference/identity-controller-retire.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/identity-controller-retire.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-retire.StatusCodes.json b/docs/api-reference/reference/identity-controller-retire.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/identity-controller-retire.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-retire.api.mdx b/docs/api-reference/reference/identity-controller-retire.api.mdx new file mode 100644 index 0000000000..492ca5da23 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-retire.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-retire +title: "IdentityController_retire" +description: "IdentityController_retire" +sidebar_label: "IdentityController_retire" +hide_title: true +hide_table_of_contents: true +api: eJztmN1OKzcQx19lNFcgOV+Qtoe9SwOVqHQEBQ69iBBy1pPE5+zaiz1L4UT7PH2PPlk13iV8pOKU+1zF8e6M/575zcTOGn1FQbP17tRghqeGHFt+nHrHwRcFhdtAbAOhwkoHXRJTiJjN1uh0SZihNagw0F1tAxnMONSk0DrMsNK8QoUxX1GpMVsjP1ZiETlYt8SmuRHDWHkXKcrz8XAoH4ZiHmwlmjDDa11YkwTCQtuCjAIfgFcEsihFhnvrC80UQcO8jtZRjBDqgvqoMPeOybG41VVV2Dx5GnyN4nu9rc3Pv1LOstkggWHbKqMQfPjxa7k3tL1RhfSgy6qQqV8nx7cXJ398Obm8QvVmp5es5wVBqfOVddQLpE2aSIuD+O5jo7CkGPXyB+tsRQ0WPoB3JMErfSBYWCpMTB67QAoA7/k0o/HBfGzy3sFieNAbf/p52Jv/dHjUO1qMFwe/LMaj4fzT1qamPgRq08MrG7vN/GV5BZHCPYVetIag8EvR0rxEadbG83nHL5XeKGTLSdeJuDwm1rY4Zr/lpM3d2/cvOvBaC7EZD0fb9H22MVq3VFDqYuFD2eFHD5W4hzxQKhhdxB1tO9o+RNvhNm2TmleCU65ZQJvXDGUL4KbhJewqCmneO9jzASxHCBR9HXKCmPuKFEyOL3rDg8P9HZY7LD+E5Xgby6vnH1syz6QZTxGcZ6AHGzn1RdtO3NtoJWnsE7e5loPEjsQdiR8i8ehdEiH3blHYnGMrP0EonTKyZoI96i/7oMHULWYEtbN3NcG9LmratcUdjP8fxkYh66XcetB29yOxiZTXQcZyG5qTDhQwm93Iteb1Pt+7VJXEKy83r8rHBI1cmjIc6MoO7kcDHyvb6xa1FAdra5rBxriNkgh7IedSuG2ZexLVwSwb7KZUN/jNh1IzZvj7n1eSflnvFibnp/CNHlE9ZXzFXKXgWbfwiYQuXmeX56dwXmiWw7HYbSU5vbF3VpGDS9bO6GDgPHhT5wxtYBZd5e1DLvBVnbc+fL4+b48zcuARIyksmHoX2XKdAP7n7/FhBk8BVnAWltrZ78lfVCAHKtUtRwGm3lBUkCR1405KVHCtg9VORlPNtPTByvMJc7DzmmU8LXSMG7kKjn1el5RMJrWxLE1F8tFufNgf9Yddm9G5tBkJoKS51KnBdBfoJ/HwjAdsMvwqlpsCZHrgQVVo66RE61DIs5acGerKio4RKnxDDyrMuut6cn+jcCXUZTNcr+c60pdQNI1M39UUHlus7iUsc0n2bI3GRhkbzBa6iLSlb9NSce+iK7N9eMbote5uUjsBLbVlzBAVCnnpf4XmplG4Im1SYa27B5M8p4pfmGw1b6nATV2dn6V2qmuJziaCb8oguf9PPet1+8aV/0auaTbyWL6Lwqb5F2eV6sA= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_retire + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-suspend.ParamsDetails.json b/docs/api-reference/reference/identity-controller-suspend.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-suspend.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-suspend.RequestSchema.json b/docs/api-reference/reference/identity-controller-suspend.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/identity-controller-suspend.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-suspend.StatusCodes.json b/docs/api-reference/reference/identity-controller-suspend.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/identity-controller-suspend.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-suspend.api.mdx b/docs/api-reference/reference/identity-controller-suspend.api.mdx new file mode 100644 index 0000000000..668a6b329d --- /dev/null +++ b/docs/api-reference/reference/identity-controller-suspend.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-suspend +title: "IdentityController_suspend" +description: "IdentityController_suspend" +sidebar_label: "IdentityController_suspend" +hide_title: true +hide_table_of_contents: true +api: eJztmN1OKzcQx19lNFcgOV+Qtoe9S4FKVDoiBQ69QAg560nic3btxZ6lcKJ9nr5Hn6wa75IAqTjlPlcYe2f89/g3g4cV+oqCZuvdmcEMzww5tvx07B0HXxQU7mIdK3IGFVY66JKYQsTsZoVOl4QZWlkKdF/bQAYzDjUptA4zrDQvUWHMl1RqzFbIT5VYRA7WLbBpbsUwVt5FirI+Hg7lh6GYB1uJKMzwWhfWJIUw17Ygo8AH4CWBbEqR4cH6QjNF0DCro3UUI4S6oD4qzL1jcixudVUVNk+eBl+j+F5ta/Ozr5SzHDZIZNi2yigEH378We4NbR9UIT3qsipk6tfJyd3F6R9fTi+vUL056SXrWUFQ6nxpHfUCaZMm0uYgvvvYKCwpRr34wT5bUYO5D+AdSfBKHwjmlgoTk8cukELAez7NaHwwG5u8dzAfHvTGn34e9mY/HR71jubj+cEv8/FoOPu0dahjHwK118NLG7vD/GV5CZHCA4VetIag8AvR0rxE6aaN5+bEL5XeKmTLSdepuDwh1rY4Yb/lpL27t99fdOC1FmIzHo626ftsY7RuoaDUxdyHssOPHitxD3mglDG6iDvadrR9iLbDbdomNS8Fp1yzgDarGcoWwHXBS9hVFNK8d7DnA1iOECj6OuQEMfcVKZicXPSGB4f7Oyx3WH4Iy/E2llebP7ZkNqQZTxGcZ6BHGznVRdtOPNho5dLYJ25zLS+JHYk7Ej9E4tG7JELu3bywOcdWfoJQKmVkzQR71F/0QYOpW8wIamfva4IHXdS0K4s7GP8/jI1C1gvpetB2DZLYRMrrIGPphmakAwXMbm6lrXl9zne7qpJ46aX3qnxM1EjXlOFAV3bwMBr4WNlet6ulOFhZ0ww21m2cRNoLQZdCbkvds6wOZzliN6W6wW8+lJoxw9//vBIAZMM7mEzP4Bs9oXq+8yVzlcJn3dwnFrqInV9Oz2BaaJbnsdhtXXP6Yu+8IgeXrJ3RwcA0eFPnDG1o5l3u7UMu+FWdtz58vp62Dxp58oiRpBYcexfZcp0Q/ufv8WEGzyFWcB4W2tnvyV9UIE8q1W1HAY69oaggSerGnZSo4FoHq52MjjXTwgcr6xPmYGc1y/i40DGu5So48XldUjKZ1MaylBW5j/bgw/6oP+wKjc6l0EgA5Z5LnUpM10I/i4cNILC54lfBXOcg0yMPqkJbJ1lah0LWWnZuUFdWhIxQ4Rt+UGGWOvZn/7cKlwJedoOr1UxH+hKKppHp+5rCUwvWgwRmJtd9s0Jjo4wNZnNdRNoSuC6ruHfRpdo+bEB6Lbyb1E5QS6UZM0SFwl7630Jz2yhckjYpuVbdwiTPqeIXJlsFXLJwnVrT81RSdS3hWYfwTSIk9/+pZ7Vqv7jy38g1zVoey++isGn+BWvJ7RM= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_suspend + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-validate.ParamsDetails.json b/docs/api-reference/reference/identity-controller-validate.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-validate.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-validate.RequestSchema.json b/docs/api-reference/reference/identity-controller-validate.RequestSchema.json new file mode 100644 index 0000000000..d0581f3eb5 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-validate.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"],"title":"ValidateCodeDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-validate.StatusCodes.json b/docs/api-reference/reference/identity-controller-validate.StatusCodes.json new file mode 100644 index 0000000000..0fbae6ed8a --- /dev/null +++ b/docs/api-reference/reference/identity-controller-validate.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/identity-controller-validate.api.mdx b/docs/api-reference/reference/identity-controller-validate.api.mdx new file mode 100644 index 0000000000..af32663385 --- /dev/null +++ b/docs/api-reference/reference/identity-controller-validate.api.mdx @@ -0,0 +1,69 @@ +--- +id: identity-controller-validate +title: "IdentityController_validate" +description: "IdentityController_validate" +sidebar_label: "IdentityController_validate" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQgF9lwFMWoH+SuO3GN6+TAilQxE2y2YMRBCNpZHMrkQo5cuIafp6+R59sMZQcO3GRdose7Ytpipzfb8ajlXIVeWTj7GWmhuoyI8uGl2Nn2buiIP+wwMJkyKS0qtBjSUw+qOH0XitPjzUF/uSypRqu4k/jKVND9jVplTrLZFkeYVUVJo16el+Ds7IX0jmVKCteVqSGyiVfKWXR48UqNhTkaeoy2jkV2Bs7U+u13lE4bU7da8WGCzl215o9dhmds1PrdXMjVM6GRvCg35evjELqTSW2be8ZZyFHU1CmwXngOUHrLSyMK5ApAEJSB2MpBPB1QV31v7lM3jv/XyOjFT1jWcUofBqdP1xf/Pb54uZW6Tee3jAmBUGJ6dxY6njCLG5E5SCyu2qtVUkh4Owf9OxFDXLnwVmS4JXOE+SGiixEiW0gBbj3ZGbHg5NkkKWdk7x/0hl8/LHfSX44Peuc5YP85Kd8cNxPPu45NXbeU5MenpvQOvNkeA6B/IJ8J5iMoHAzseXvGNp6vGvpDlkXIvKcGE3RgPVaSJO7t+evW/C2KA76p/v0jWqeSwWmyEJeUjOUJgRjZy8Iih6oyMd9Z+HIeTAcwFNwtU8JQuoq0jA6v+70T04/HLA8YPldWA72sbzdtj/KtqRljgJYx0DPJnBslKbZWJhgJGnsIrcpyl/JgcQDid9F4tm7JELqbF6YlENjfoRQOmVgZIIj6s66gJDVDWYEtTWPNcECi5oObfEA47+Hca0V40ymXmXaCVnuvHbm/dm5JJ47GbErFyIbyHM1VD2sTG9x3HOhMp1WtqHQ27nZRKIduQOltTe8vBE2G64SQk/+BVhxot3S7eJn50tkNVS/fLmVFIuyBxhNLuF3Wiq9yeqcuYoBkgK43s72F5skbxh+mcG1MjZ3EYw2fFc3k0uYFMi586Wo2Mt5PHF0VZGFG0aboc9g4l1WpwxNCPO2ED9AKixWrbQu/Ho3aaYbmX/kktQZjJ0NbLiOPP/15+B0CJtUaLjyM7TmjygvaJD5SrfqyIO8HAQN0aR23ZoSNNyhN2hlNUammfNGno+YvUlqlvW4wBBezNVw7tK6pHhlVGeGpcdI6hrH+93jbr/tOphK15FYCw4lxn5jMSZvYzxsQYIdHF5F86UimZ65VxVorGSl9oU8axibKqyMWHKstHrDmWxvRN9rNRc2h1O1WiUY6LMv1mvZfqzJLxv+FhKURFI9vV9rNSfMhL3pSglKUtGxpXZuxawovBbz9trrWm9ujNKUKn737P1O+UyuYnNM2nfOsgHS45M0AHxSQyVexvDE6oh7K1WgndWxMapGpny+Aa3vKLs= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +IdentityController_validate + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/inventory-controller-list.ParamsDetails.json b/docs/api-reference/reference/inventory-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..91b3148849 --- /dev/null +++ b/docs/api-reference/reference/inventory-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/inventory-controller-list.RequestSchema.json b/docs/api-reference/reference/inventory-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/inventory-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/inventory-controller-list.StatusCodes.json b/docs/api-reference/reference/inventory-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/inventory-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/inventory-controller-list.api.mdx b/docs/api-reference/reference/inventory-controller-list.api.mdx new file mode 100644 index 0000000000..1980734ddf --- /dev/null +++ b/docs/api-reference/reference/inventory-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: inventory-controller-list +title: "InventoryController_list" +description: "InventoryController_list" +sidebar_label: "InventoryController_list" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMCyJ9x241urpMWLrBImmTTQxAEtDiyuEuRCjnyJjX0PH2PPlkxlNZ24kW2uftkmh/DP4e/GXO8Fq5CL0k7O1ciFXO7QkvOP8+cJe+MQf9gdCCRiEp6WSKhDyK9WwsrSxSpqLxTdUZzJRLh8bHWHpVIydeYCG15gqRCJCJkBZZSpGtBzxUvDOS1XYqmueeFoXI2YODx8XDIHwpD5nXFykQqRJOIyfcGbqXRKuqHXGqDKgHngQoEVoOBYKWdkYQBJCzqoC2GAL422BeJyJwltMRmZVUZnUVLg8+Bba/3RbvFZ8yiMzz7jXQrGb13/sfTMqdw3wOJwCdZVoa7fp2ePVyd//np/PpGJK9Oek1yYRBKmRXaYs+jVLEjbg5su89eKjEEufzBPnteg9x5cBbZeaXzCLlGo0K02DmS+XjLphpNxouJynrjfDjuTT78POwtfjo57Z3mk3z8Sz4ZDRcf9g41c95jez1U6NAd5qumAgL6Ffpe0ArBuCVraXYZu2v9uT3xrtL7RJCmqOucTZ4hSW3OyO0Zae/u9fyrjsh2RRPpG+3T91GHoO0ygVKa3Pmyww+fKjYPmUeFlrQ04UDbgbZ30XayT9u0poJxyiQxaIuaoGwB3CS8iF2FPvY7C0fOg6YAHoOrfYYQMldhAtOzq95wfHJ8wPKA5buwnOxjebP9sUW1JU05DGAdAT7pQDEv6rZjpYPmSyMXuc0kPzMOJB5IfBeJp2+SCJmzudEZhVZ+hJAzZSBJCEfYX/ZBgqpbzBBqqx9rhJU0NR7S4gHG/w9jkwiSS66KhP5WPvGigFntNT3HcmmB0qMX6d09FzwvD/pG0VUiFY4LsyW2NRgVIhUDWenBajToiq8wWG/KsGaw1cAS2E8sbUfPNZPbUvdNVYczH7HrSrrGb86XkkQq/vjrhgFwodIPML2cwxfkHbo7L4iq6D5tcxdZ6Dx2cX05h0sjiZ/HvG7vmuOMo4sKLVyTtEp6BZftcWAen895F3vHkDF+VWetDx9vL9sHDT95eBGHFsycDaSpjgj/+8/kJO3s0HMCF34prf472gsJ8JMq6bZDDzOnMCQQJXXtTkpI4FZ6LS23ZpJw6bzm8SmR14uauD0zMoSN3ATOXFaXGJdMa6WJ0wrfR3vwYX/UH3aJRmacaNiBlQtUyphiuhJ7gwds+YCOjxeu3EQg4RMNKiO15RitveGxlp07ISvNMkZtCopnE4lIdwv5FxgXLhCvW68XMuAnb5qGux9r9M8tWCt2zIKv+24tlA7cViLNpQm4J3GTVsXRVRdqx7AF6aX0rlNaRi2mZv4vIBHM3u5/D819k4gCpYohtu7Gp1mGFe2s3MvjHIubEPv9nBOrrNlNG1e+Codo/buq1ut2xo37grZpNiKJv7PApvkPyu36Dw== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +InventoryController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/inventory-controller-upsert.ParamsDetails.json b/docs/api-reference/reference/inventory-controller-upsert.ParamsDetails.json new file mode 100644 index 0000000000..91b3148849 --- /dev/null +++ b/docs/api-reference/reference/inventory-controller-upsert.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/inventory-controller-upsert.RequestSchema.json b/docs/api-reference/reference/inventory-controller-upsert.RequestSchema.json new file mode 100644 index 0000000000..32608ec6d6 --- /dev/null +++ b/docs/api-reference/reference/inventory-controller-upsert.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"locationId":{"type":"string"},"onHand":{"type":"number","default":0},"reserved":{"type":"number","default":0},"allocated":{"type":"number","default":0},"quarantined":{"type":"number","default":0},"damaged":{"type":"number","default":0},"inTransit":{"type":"number","default":0},"unit":{"type":"string","default":"EA"},"lowStockThreshold":{"type":"number"},"manualOverride":{"type":"string","enum":["PRE_ORDER","BACKORDER","DISCONTINUED"]},"visibility":{"type":"string","enum":["PUBLIC","PARTNER_ONLY","PRIVATE"],"default":"PRIVATE"},"quantityDisplayMode":{"type":"string","enum":["EXACT","RANGE","BOOLEAN","HIDDEN"],"default":"EXACT"}},"required":["locationId"],"title":"UpsertInventoryDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/inventory-controller-upsert.StatusCodes.json b/docs/api-reference/reference/inventory-controller-upsert.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/inventory-controller-upsert.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/inventory-controller-upsert.api.mdx b/docs/api-reference/reference/inventory-controller-upsert.api.mdx new file mode 100644 index 0000000000..3885a1723c --- /dev/null +++ b/docs/api-reference/reference/inventory-controller-upsert.api.mdx @@ -0,0 +1,69 @@ +--- +id: inventory-controller-upsert +title: "InventoryController_upsert" +description: "InventoryController_upsert" +sidebar_label: "InventoryController_upsert" +hide_title: true +hide_table_of_contents: true +api: eJztWFFz4jYQ/isaPeVmTHAS2t7xRoD2aO8CBZK2k2Eywl5Ad7LkSGsSyvj39H/0l3VWNmBCLsnN9JEnhLRafbv6duXdNTcpWIHS6F7Mm7ynl6DR2FXbaLRGKbB3WerAIg94KqxIAME63rxdcy0S4E2eWhNnEfZiHnAL95m0EPMm2gwCLjUJCFzwgLtoAYngzTXHVUobHVqp5zzPJ8VGcHhp4hVJPNUTGY2gkZZEmioZecT1L85omjtQbaZfIPKQLdmHEhytKhNtTT2AEXCjPwpdXdJZMgXLAx7DTGQKeTPMCasDu4TXBYXyB75B8j4TVmiU+g2ysUjE/A1yUo+t0E7iq5KZ3hMqHVIR4t0W+UeZhxGa6Ot4YcEtjHoGQx7wROhMqP4SrJUxPKcXdJbw5i0fDLt3/WGnO+QBv2y1f9uMO71Ru3817l1ddzt8kgd8KZ2cSiVx9aK668tPvTYP+KA1HF91h3f9q09/0d9h76Y17vJJ1aLNZOF8jRJXHelSJVafzcuou3+22mMe8GHr6pcuIe/3P3VbVzzgH3udTvdq/5xCOs+rsXFbJeIk4ChR0VHXPtC2IdhBw/O82OpSo11B4vMwpJ8YXGRlSlp4k5MdjecWboSSsT+LzYRUEAfMWIYLYGXIsaU0SiA4Jtg0c1KDc8xmCk75/xZ3YK2xr4tF3/L8o0hS76HLVudu2P39ujsae35WLR2hmCpgiYgWUkPNgoj9hD+cke5TT09wTsxfOefAa2xmLDMayHmJscBmElTsvMbSkc8llarO+KxxPm3EUe18Fp7XGu9/DGvTHy4+1D7MGrPzn2aNs3D6/sCotrEWiuvBhXSlMQ8SF8wnIVtzMgamzJywPGGZ9+fO4irSCuu6pLIDKKQqGLevpLi7p/LDkpE7jjbCs0P2fZbOST0PWCLUzNikpB88pqSeRRZi0CiFcke2Hdn2XWy7OGRbK8MF0cm/uQGbZsiSgoDbhOdpl4L180azE2OZRMcsOJPZCJiLTAoBa3WGtfD84t2RlkdafhctG4e0HO8eW4h3TIsNOKYNMniUDn1elMWE/9xRwNB43kaCPsOPTDwy8buY+OFFJrLI6JmSEboCvichZUqHAoGdwOn8lAkWZwXNgGVa3mfAlkJlcEyLRzK+nYx5wFHMqWfA5aa2oU0Oosz6mu52zacgLFjevJ3kk6eGvtiUSAAXhloXaVb0KHDBm7wuUllfntXL5oSrr7dtiry+Q0EgyFMEroJoRNwteLfBVRKajCyngnLws7GJoFLv1z/GRAHjUnnHWoMe+wp0QnnrC8TUO5ACZLhrd3Q3JNhvT+xYsulKhNXOQ7jXXQifdBDCSpcg3OsEhJtqn0r6Zyv68LCC3yvUq7X4tor+RhG9qX4Jwsz4ECiJ0h8NemygBFJVQM46YLeXOOmnoNkIhY6FjdmguEPW81XDrEw571hEUZeW2k7Z55tB8R1HX3q0iTIKaxvtUGLmI/fffxoXzVIPrgLWt3Oh5d9enwsYfUkG5XFgWdvE4ALmIZXjEooL2I2wUmgatQXC3FhJ6y1EK6cZ0rithHNbuAHrmChLwG9pZbFEyqZEwsLw8PTsNCzzq4govxJrUuMwET6zln23bVSwXViwbVjsOXObehAesZ4qITVdSmYVrRUhc8tFKgnIWZF7vXU84M1qf28vfhfGIe1br6fCwbVVeU7T9xnYVRFPS3LNlC78ds1j6Wgc8+ZMKAcHELfvCT8ZljnmHdvFzz70clJoijD/JlETJOAUctWWZE7towWI2OeWdbneLo6qjUnLbv/BM5YHmx2tKIIUX5SdVHLR4JreoGnZzUyKYLDigfKseCigGm+5TzJ+bs2V0PPMvz+8UEkXLzK6ne0NPkk+3qhnnbFeFxJj8xV0nm99g/Sf/JLn/wHLgH7n +sidebar_class_name: "put api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +InventoryController_upsert + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-create.ParamsDetails.json b/docs/api-reference/reference/locations-controller-create.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/locations-controller-create.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-create.RequestSchema.json b/docs/api-reference/reference/locations-controller-create.RequestSchema.json new file mode 100644 index 0000000000..b6d9f17a9a --- /dev/null +++ b/docs/api-reference/reference/locations-controller-create.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["WAREHOUSE","STORE","DISTRIBUTION_CENTER","FACTORY","SERVICE_CENTER","PICKUP_POINT","OFFICE"]},"country":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"timezone":{"type":"string"}},"required":["name","type"],"title":"CreateLocationDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-create.StatusCodes.json b/docs/api-reference/reference/locations-controller-create.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/locations-controller-create.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-create.api.mdx b/docs/api-reference/reference/locations-controller-create.api.mdx new file mode 100644 index 0000000000..b5b0377b3c --- /dev/null +++ b/docs/api-reference/reference/locations-controller-create.api.mdx @@ -0,0 +1,69 @@ +--- +id: locations-controller-create +title: "LocationsController_create" +description: "LocationsController_create" +sidebar_label: "LocationsController_create" +hide_title: true +hide_table_of_contents: true +api: eJztmF9zGjcQwL+KRk/OzIGxTZuEN4LxlLYxFLAzHcbj0d0toEQnnaUVscPc5+n36CfrrO7gsKFOM9NHnrjTSqv989OivTU3OViB0uhByjv8d5OEF9czGq1RCux9YkEg8IjnwooMEKzjndldxC08eHD4waRPvLMOr9JCyjtoPUQ8MRpBI4lEnitZaj797IymMZcsIRP0hE858A438WdIkPaxZBRKcCTVIoOdWQ6t1AteRNXAS0HEQfuMd2b8U3fc/2V4M+nziE+mwzH9Xg4m0/Hgw810MLy+7/Wvp/0xj/hVtzcdjv+kef3x7aDXr0WjQe+3m9H9aDi4nvKID6+uBr0+vyvIPa/RPh00zcJCll7uiXLjUKieSQ87lUg8rFKkqQXnDsqUQIn+mUbtsxhsEBq9+Hcpygy+GX3ImCLaSemszEMV9TtaiIpm9wIdG24u0fCiKJe63GhX5vC8dUY/KbjEyhxDbDht32619gW3Qsk0qGNzIRWkETOW4RJYRRxbSaMEgmOCxd5JDc4x6xU0+f+GHVhr7PenJQcTGXF4FFkeAvShe3k/7v9x058QQM89naCIFbBMJEupoWFBpGEgbM5Id5OilIFzYvGdffaixubGMqOBgpcZC2wuQaWuyYvt0aUz/5rO9Kx9HrfTpHE+b5032u9+bjXiny7eN97P2/Pzt/P2WSt+t+dUz1gLZXpwKV3lzFeJS+bArsA2nEyBKbMgW15QFuJZe7xr6Q50fVJ5CSikKol7rqTM3cv544rImtH2ISw/SuekXkQsE2pubFbhB485qWeJhRQ0SqHckbYjbT9E28U+bV2PS8IpEUigxR5ZVgK4LXgBuxxsGDeanRjLJDpmwRlvE2AuMTlErHs5brTOL94csTxi+UNYtvexnNZ/tpDWpKUGHNMGGTxKh6EuynJgJZ2kpKEJ3CaCro5HEo8k/hCJ718lkSVGz5VM0JXmBwipUjoUCOwEmosmEyz1JWbAvJYPHthKKA/HsniE8b/DSJ2RWFCfy9WmJaZFDhJvQ4s2W/MYhAVLvXBx99LRVxvpDHBpqN2mZjA01rjkHX4qcnm6Ojutd6QNKSpVw73ZfUKcloxtbKjgJYeqoah6uDI2E8g7/NdPU0q3cbm8Z93RgH2Bp01D1+FLxDwEiw7DuO7s+5uEbzrxmoVq5W6fvW2K61mbXrge2W2B69Gy863ftw1vPVT3ua1nfW1rt4/d6YulnpsAcZXq4WQ0YCMlkO71FII9PsOMk2EOmk1Q6FTYlI2sSX2CbBDu/fOqaLxhCZ2bvNLWZB9vR+VNjO5qtIhqAusZ7cjocPb+/qt90an04FPEhnYhtPxWJjtidBeMqu3AMgqQi1gwqXquTHERuxVWCk1PPYGwMFaSvItoZeyRnntKOLc1N2KXJvEZhCVdn0qkekholY63mmfNVlUhRUIVsqg+VmRC7yR/yzWrwWZbsJ8Fc1s8EB7xNFdCakqKt4pkJfMzLnJJhpxRendP2pKORmfG1+tYOLixqiho+MED4UWnYUUhiCmxM/oeswSRhtO45gQ21ZpQ7BtTsoKmK0/W7BX+Itqs6CYJ5Pjq3Lud0zsahrIdV9+/shJoK74S9eIrfeKIuMlLl+gDGY2tuRJ64UPJ5qVOirTwFI5tyF6c4eBVJRL6acfC9bqcMTVfQBcFjypXkN55cVcUxT/jvMtu +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +LocationsController_create + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-list-inventory.ParamsDetails.json b/docs/api-reference/reference/locations-controller-list-inventory.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/locations-controller-list-inventory.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-list-inventory.RequestSchema.json b/docs/api-reference/reference/locations-controller-list-inventory.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/locations-controller-list-inventory.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-list-inventory.StatusCodes.json b/docs/api-reference/reference/locations-controller-list-inventory.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/locations-controller-list-inventory.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-list-inventory.api.mdx b/docs/api-reference/reference/locations-controller-list-inventory.api.mdx new file mode 100644 index 0000000000..5db52c0a73 --- /dev/null +++ b/docs/api-reference/reference/locations-controller-list-inventory.api.mdx @@ -0,0 +1,69 @@ +--- +id: locations-controller-list-inventory +title: "LocationsController_listInventory" +description: "LocationsController_listInventory" +sidebar_label: "LocationsController_listInventory" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0F+J2250c520SNFF0iSbHoIgoMWRzV2KVMiRN6mh5+l79MmKobS2Ey92N3efTJGa4X+GP45JrYSvMCgy3p1rkYk/fZ4e4tQ7Ct5aDA/WRDp3S3Tkw7OQolJBlUgYosjuVsKpEkUmjBZSBHysTUAtMgo1SmGcyESlaCGkiPkCSyWylaDnii0iBePmomnu2TBW3kWMPH40HPKPxpgHU7EckQnRSDH+2sCtskYn0VAoY1FL8AFogcBqMBIsjbeKMIKCWR2Nwxgh1Bb7QorcO0JH7FZVlTVt+IOPkX2vdkX72UfMibMQOHNkWskYgg/ffy33GnczIAU+qbKy3PXr5PTh6uyvD2fXN0K+ivSa1MwilCpfGIe9gEqnjjQ5sO8+Z6nEGNX8O/PsZA0KH8A75OSVPiAUBq2OyWOXSCbkWz71aHw0G+u8d1QMj3rjdz8Pe7Ofjk96J8W4OPqlGI+Gs3c7QU19CNguDy1M7IL5bGgBEcMSQy8ajWD9nLU024zdtfncRLyt9F4KMpR0nbHLUyRl7Cn5HSft2r1+/6ojsrVoEn2jXfremxiNm0solS18KDv88Kli95AH1OjIKBv3tO1pexNtx7u0TWpaME65IgZtVhOULYDrgpewqzCkfu/gwAcwFCFg9HXIEWLuK5QwOb3qDY+OD/dY7rF8E5bjXSxvNn+2qDekaY8RnCfAJxMp1UXTdixNNLxo5BO3ueKDxp7EPYlvIvHkmyRC7l1hTU6xlZ8g5EoZSRHCAfbnfVCg6xYzhNqZxxphqWyN+7K4h/HHYWykIDXn65CwXy5QbBQxr4Oh53RPmqEKGER2d88XnpeB/si1q0RaeL6jzTHBw7eqTAxUZQbL0WA972BldDMwW4ZtqljdlqRrhrcF74uwjmiOsuuSXeM3H0pFIhN//H3DDPhYmQeYXJ7DJ+QZumVfEFUpg8YVPuHQJe3i+vIcLq0iPiGz3c5KpzcOLip0cE3KaRU0XAav65zgPJ2gi277HULOBFadtz68v71szzR86mEj3l0w9S6SoTpR/N+/4+Os80PPEi7CXDnzT5swCXyqkt10GGDqNUYJSVLX7qRECbcqGOW4NVWEcx8Mj0+IgpnVxO2pVTGu5Uo49XldYjKZ1NoQVxZejzbwYX/UH3a1RuVcaziBlY9UqlRluuv1mhDYIAKMCGwz8iKp6+1I+ESDyirjeMPWwfJYy8+dUJVhQSMht9iVIkv3+Q1G91IsfCS2WK1mKuKHYJuGux9rDM8tXEtOzoyX/G4ltInc1iIrlI24I25dXcXBVbfjDmED00vRXadyHGWq0PxJQArmL317aO4bKRaodNpiq25gkudY0ZbJTh3nvbjeWb+fcWFVNWdmnb1XeyF5/6qc1ap948Z/Qtc0a3XEzyywaf4HTzv6PQ== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +LocationsController_listInventory + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-list.ParamsDetails.json b/docs/api-reference/reference/locations-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/locations-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-list.RequestSchema.json b/docs/api-reference/reference/locations-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/locations-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-list.StatusCodes.json b/docs/api-reference/reference/locations-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/locations-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/locations-controller-list.api.mdx b/docs/api-reference/reference/locations-controller-list.api.mdx new file mode 100644 index 0000000000..e995d7d466 --- /dev/null +++ b/docs/api-reference/reference/locations-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: locations-controller-list +title: "LocationsController_list" +description: "LocationsController_list" +sidebar_label: "LocationsController_list" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQx19lwFMWoB3bcduNbq6TFim62DTJpocgCGhqZHGXIhVy5I1r6Hn6Hn2yYijFycZFtrn7ZIofw//M/DgmN8LXGBQZ785ykYnfvU4fce4dBW8thjtrIgkpahVUhYQhiuzmVoqAsfYuYhTZRkxGI/7JMepgarYgMiFaKab/NXCtrMnTPlAoYzGX4ANQiRDwvsFIsDLeKsIIChZNNA5jhNBYHAoptHeEjtisqmtrOsWHnyPb3oioS6wUt2hdo8iEX3xGnTwI7CyZTjKG4MP3p2mf47NZkYJxSyEFPqiqttz18+zk7uL0j0+nl1dCvvD0ktTCIlRKl8bhIKDKU0faHNj2kKNUYYxq+Z19dqIGhQ/gHXLwKh8QCoM2j8liH0hO6ms28/F0spjmejApRpPB9P2Po8Hih6PjwXExLSY/FdPxaPF+x6m5DwG79FBpYu/MV0MlRAwrDINocgTrl6ylF2MC5iK76eL55PFzpbdSkKGk65RNniApY0/I7xjpcvdy/kVPZLeiTfSNd+n7YGI0bimhUrbwoerxw4eazYMOmKMjo2zc07an7U20He3SNmuoZJy0IgZt0RBUHYDbgpewqzGkfu/gwAcwFCFg9E3QCFH7GiXMTi4Go8nRuz2WeyzfhOV0F8urpz9bzJ9Iyz1GcJ4AH0ykVBdN17Ey0XDSyCduteK7wZ7EPYlvIvH4VRJBe1dYoyl28hOEXCkjKUI4wOFyCArypsMMoXHmvkFYKdvgvizuYfz/MLZSkFryU0bYxzcPL4qom2BoLbKbjVigChj4udPevnT0lZdShVR6fk0tsXs4USkycahqc7gaHz5tx7txSPoH1ePWlwxpB9ijgJ5c9qbvkn3jFx8qRSITv/15xbn2sTZ3MDs/gy+4FvIxvSVRnSJlXOFT2vvgfLw8P4Nzq4hvwrxuJ6NpxsHHGh1cknK5CjmcB583muAs3ZSL/pi9A82k1b21IXy4Pu/uLny74UV8imDuXSRDTaL1n7+nR1lvh9YSPoalcuavLkIS+PYk++0wwNznGCUkSX27lxIlXKtglOPWXBEufTA8PiMKZtEQt+dWxbiVK+HE66bCtGTW5Ia4gnA+OsdHw/Fw1NcUpbmmcABrH6lSqZo4lTKyJQGeUIAehW9CuT1shA90WFtlHB/HJlge6zC5Eao2LGMs5Ldklj4Sj282CxXxU7Bty933DYZ1B9CKA7DgtN7ctlKUqPJE70YwC5mYaY01q0r1UmS7JZIx39L76ynXLNWwrK30F/gl6/2QcutntjebbsaV/4KubYXsRRB/i/a2bdt/AW58pw0= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +LocationsController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-create.ParamsDetails.json b/docs/api-reference/reference/offers-controller-create.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-create.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-create.RequestSchema.json b/docs/api-reference/reference/offers-controller-create.RequestSchema.json new file mode 100644 index 0000000000..3f270498d3 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-create.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"productId":{"type":"string"},"variantId":{"type":"string","description":"Prices a specific variant instead of the base product (ADR-015) — e.g. different sizes/colors with different prices. Never a serial/batch: pricing is always at product/variant (SKU) level, never per physical unit."},"price":{"type":"number"},"currency":{"type":"string","example":"EUR"},"minimumQuantity":{"type":"number","default":1,"description":"Decimal, not just whole units (ADR-024, Deel 17 §29) — e.g. 4.5 kg."},"salesUnit":{"type":"string","default":"EA"},"validFrom":{"type":"string"},"validUntil":{"type":"string"},"conditions":{"type":"object"}},"required":["productId","price","currency"],"title":"CreateOfferDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-create.StatusCodes.json b/docs/api-reference/reference/offers-controller-create.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-create.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-create.api.mdx b/docs/api-reference/reference/offers-controller-create.api.mdx new file mode 100644 index 0000000000..e65b931e92 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-create.api.mdx @@ -0,0 +1,69 @@ +--- +id: offers-controller-create +title: "OffersController_create" +description: "OffersController_create" +sidebar_label: "OffersController_create" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uGzcQgK8y4JMNrP5spYn1pkgO4BatFf+kD4YRUNxZiQmX3JCzshVhgR6id8g9cpSepBjuypItJ2mAPurB8IrkzgyH38xyZiVcgV6SdvYsFQNxnmXow8hZ8s4Y9O+VR0koElFIL3Mk9EEMbm4T4fFTiYFeu3QpBqv4U3tMxYB8iYlQzhJa4ilZFEarqKPzITjLY0HNMZf8RMsCxUC46QdUxHo8W0QaA88W3qWlIrbtYWkgr+1MVIlYSK+lfXY2ESkG5XXBasVATLxWGEBCKFDpTCtoXgZtA6FMwWVAc4SpDAiNWjgYji9a3d6LQ/jnr78B27M2pJpdhJYg6M8YOsoZ5wPcaZpvzRVRXRv+wAV61opeS9OZSlLzQZzVdgY6gDR3chlA0lpnZ23XweVv14dgcIEmARvlFPw3XwatpIHSamqzF6KuLQ/YMp+i5xlVeo9WLZ9zD97LvDA8dHp9wYtzbXVe5m9LaUnTclcguzSTpSEx6D117xiVziUb6gg+lIHgbu4MRiND48ajfgJjRAO9l/D1y9HJllP77RfwcRZ3E6TBcG01PX+mjQHidFgDYHT6xrv8G3gYnV5b0ubZaeVsqtn+sMthVSVbSN9scbj295Z3bxNBmqIvRzFcYhSNyYmqqgWFwtlQE33U7fG/x+5jc/rd7u7EO95CDB3IpDaYJuB85LSJP1hoZyRFtKdl0BZDAF8abIv/LQjRe+d/vEy5FL9P2uvh+P3F6dvr08urnQC9JDk1CLlUc22x5VGmcSAqB5Yd8cgxBDn7gZ4dr0HmPDiL7LzceYRMo0lDlNg48vkkspGZ9vpH036qWkdZ96jVf/VLtzV9cXzSOsn62dHLrN/rTl/tbGrkvMf6eGiuQ7OZmCsC+gX6VtApgnEztuUJc9Gfmx1vW7pF3CmLHCNJbWriHgupz+7p+ouGyA2j/eew/F2HoO0sgVyazPm8wQ/vCxYPymOKlrQ0YU/bnrafou14l7ZhSXPGSUli0KYlQV4D+JDwInYF+jjuLBw4D/yB8Rhc6RVCUK7ABOrvzfHhHss9lj+FZX8Xy6vNxxbTDWmpwxBvO3ivA8W8qOuBhQ6aD41c5FZJvkjvSdyT+FMknnyXRFDOZkYraiqPCCFnykCSEA7irVpCWtaYxYv4pxJhIU2J+7S4h/G/w1glguSMq37hYneA3wioSh+rxJuVmKL06LktUN0+3eW3Gwo50txxz6FwIQIjaS4GoiML3Vn0Oo0uVsXOaLoOa72XjGeN1lp7wyzvoxlKmoc3zueSi8Zf/7ziU3ah0O9hODmDj7gUyfpg50RF9BHHwMWmvXG6PudH7YgNB1tdiM1gU5R3t4vwWGk/U2j3HlW9XNo+qmy3NW0K2s3oozqW7dc2cxHY5ljPLydnMDGS+A7P+95hMa44OC/QwiVJm0qfwqTpgZzFO37WJIhDUBwjRSOtDb+/m9S3rtidmHjH8Q8jZwNpKmOcff3SPx40cmiZwLmfSas/R3khAb73JY069DByKYYEoknNc2NKSOBd7euQwEgSzpzXPD8k8npaEj+PjAzhwdwExk6VOcZXhmXKLZNEME/1xrvtXrvbZEOpqHEgE5nLmAetjETVGMOGY3jg+JEnH7IE4T11CiO15TxS+tiCqBG/EbLQbEVPJFshNecwGNyI1YpbUNfeVBUPfyrRL2v4I2hTPtKb2yoRc5RpDLuVYI45o8SU3rpiEyItJZuyk96rZP3GUCks6Ltrb7cidXIek/O06fnlMakLL+84Ack7bmQkwhUPPZU4thJG2lkZE7OoZbKPZcm+ePDXk5CNu2qmpF1uWbha1Suu3Ee0VSWSZivEv0V1W1XVv0krJZo= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OffersController_create + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-buyer-minimums.ParamsDetails.json b/docs/api-reference/reference/offers-controller-list-buyer-minimums.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-buyer-minimums.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-buyer-minimums.RequestSchema.json b/docs/api-reference/reference/offers-controller-list-buyer-minimums.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-buyer-minimums.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-buyer-minimums.StatusCodes.json b/docs/api-reference/reference/offers-controller-list-buyer-minimums.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-buyer-minimums.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-buyer-minimums.api.mdx b/docs/api-reference/reference/offers-controller-list-buyer-minimums.api.mdx new file mode 100644 index 0000000000..f41cf91370 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-buyer-minimums.api.mdx @@ -0,0 +1,69 @@ +--- +id: offers-controller-list-buyer-minimums +title: "OffersController_listBuyerMinimums" +description: "OffersController_listBuyerMinimums" +sidebar_label: "OffersController_listBuyerMinimums" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241uXictUiBImmTTQxAElDiyuSuRCjnyxjX0PH2PPlkxlGIn8WJ3c/fJNKkZ/Tn8zZjjtXAVekXG2TMtEnGR5+jDzFnyrijQPxQm0Md6hf7cWFPWZRBSVMqrEgl9EMndWlhVokiE0UIKj4+18ahFQr5GKYwViagULYQUIVtgqUSyFrSq2CKQN3YumuaeDUPlbMDA6+PhkD80hsybisWJRIhGism3Fm5VYXTcAuTKFKglOA+0QGA1GAiWxhWKMICCtA7GYgjg6wL7QorMWUJL7FZVVWGy6GnwObDv9a5ol37GjDgKnkNHppWM3jv/48cyp3E3AlLgkyqrgqc+Tk8erk7/+nR6fSPkm51ek0oLhFJlC2Ox51HpOBFfDuy7z1EqMQQ1/8F7dqIGufPgLHLwSucRcoOFDtFjF0hG5Hs+9WgyTic6643z4bg3+fDrsJf+cnTcO84n+fi3fDIaph92NjVz3mN7PLQwodvMV0MLCOiX6HvBaITCzVlL85Kxuzae2x2/VHovBRmKuk7Z5QmSMsUJuR0n7dm9ff6qI7K1aCJ9o136zk0Ixs4llKrInS87/PCpYveQedRoyagi7Gnb0/Yu2o52aZvWtGCcMkUMWloTlC2Am4IXsavQx3ln4cB5MBTAY3C1zxBC5iqUMD256g3HR4d7LPdYvgvLyS6WN9sfW9Rb0rTDANYR4JMJFOuiaSeWJhg+NHKR20zxZWNP4p7Ed5F4/F0SIXM2L0xGoZUfIeRKGUgRwgH2531QoOsWM4TamscaYamKGvdlcQ/jz8PYSEFqzu2QcLGDYouAWe0NrWKTlKLy6EVyd8/dzutd/lTTVSItHLdoc4zocE+ViIGqzGA5GrRvHayNbgYpW/bKrWkbKlb3QtU1w9uC96ytI5p32U3JbvC786UikYg//75hBlyozANML8/gC66EfD72BVEVI2hs7iIOXdAuri/P4LJQxDdktts56fjEwUWFFq5JWa28hkvvdJ0RnMUbdN6l3yFkTGDVeevD+e1le6fhWw8bcXbBzNlAhupI8X//To6Szg+tJFz4ubLmn+gvSOBblexehx5mTmOQECV1405KkHCrvFGWRzNFOHfe8PqUyJu0Jh7PChXCRq6EE5fVJUaTaa0NcWXh82g3PuyP+sOu1qiMaw0HsHKBShWrTNdet5DAlhJgSiBiAi84eRXWTUISPtGgKpSxnLK1L3itZehOqMqwpJGQz/RKkcR2/g1K91IsXCC2Wa9TFfCTL5qGpx9r9KsWsCUHKOVjv1sLbQKPtUhyVQTckbepsOLgqsu6Q9gC9Vp2N6ksIxerNP8tIAUzGP9/aO4bKRaodMy0dbcwzTKs6IXJTi3nlNzk1x+nXFxVzbHZxO9NPkTv35SzXrdP3LgvaJtmo474Owtsmv8BMS769Q== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OffersController_listBuyerMinimums + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-for-product.ParamsDetails.json b/docs/api-reference/reference/offers-controller-list-for-product.ParamsDetails.json new file mode 100644 index 0000000000..91b3148849 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-for-product.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-for-product.RequestSchema.json b/docs/api-reference/reference/offers-controller-list-for-product.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-for-product.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-for-product.StatusCodes.json b/docs/api-reference/reference/offers-controller-list-for-product.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-for-product.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-for-product.api.mdx b/docs/api-reference/reference/offers-controller-list-for-product.api.mdx new file mode 100644 index 0000000000..cc3702f097 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-for-product.api.mdx @@ -0,0 +1,69 @@ +--- +id: offers-controller-list-for-product +title: "OffersController_listForProduct" +description: "OffersController_listForProduct" +sidebar_label: "OffersController_listForProduct" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMUKbBImmSzhyAIaHFkcVciFXLkJjX0PH2PPtliKK3txItNc/fJNCmO/jP8zZjjlXAVekXG2XMtEnGRZejDzFnyrijQPxQm0Jnzl97pOiUhRaW8KpHQB5HcrYRVJYpEVO36uRZSeHysjUctEvI1SmEsP6AoF1KENMdSiWQl6LnijYG8sQvRNPe8MVTOBgy8Ph4O+UNjSL2pWKBIhGikmPxo4VYVRkc3IFOmQC3BeaAcgdVgIFgaVyjCAArmdTAWQwBfF9gXUqTOElpis6qqCpNGS4MvgW2vdkW7+Rdsg+E5fGRayei9828/ljqNuxGQAp9UWRU89fv05OHq9K9Pp9c3Qr7y9JrUvEAoVZobiz2PSseJ+HJg232OUokhqMUb79mJGmTOg7PIwSudR8gMFjpEi10gGZOf2dSjyXg+0WlvnA3HvcmHX4e9+S9Hx73jbJKNf8smo+H8w45TM+c9tsdDuQmdM38byiGgX6LvBaMRCrdgLc02Y3dtPDcebyu9l4IMRV2nbPIESZnihNyOkfbsXj9/1RHZ7mgifaNd+j6aEIxdSChVkTlfdvjhU8XmIfWo0ZJRRdjTtqftXbQd7dI2rSlnnFJFDNq8JihbANcFL2JXoY/zzsKB82AogMfgap8ihNRVKGF6ctUbjo8O91jusXwXlpNdLG82P7aoN6RphwGsI8AnEyjWRdNOLE0wfGjkIrep4gvHnsQ9ie8i8finJELqbFaYlEIrP0LIlTKQIoQD7C/6oEDXLWYItTWPNcJSFTXuy+Iexv8PYyMFqQV3RcLFLop3BExrb+g59kpzVB69SO7uudt56eXbjVeJlDvu0RbY9mGUi0QMVGUGy9Gga8DCYLVuxZpBp4NlcKBY25ama0a3xe67so5n9rGbkt3gzPlSkUjEn59vmAAXKvMA08tz+IrPQn4/9JyoivEzNnMRhi5kF9eX53BZKOL7Me/bOef4xMFFhRauSVmtvIbOeziP9+esS75DSJm/qrPWh4+3l+2Nhu88vIlzC2bOBjJUR4b/+3dylHR26FnChV8oa/6J9oIEvlPJ7nXoYeY0BglRUjfupAQJt8obZXk0U4QL5w2vT4m8mdfE41mhQljLlXDi0rrEuGVaa0NcV/g8WseH/VF/2FUalXKl4QBWLlCpYo3peuwWEdgwAswInDkPG0pexHSdi4RPNKgKZSxna+0LXmsJuhOqMqxn1Baj6KSQItlu6TdA5y4Qb1qt5irgJ180DU8/1uifW7yWHJ45H/rdSmgTeKxFkqki4I6+dXUVB1ddxh3CBqeXurtJZRm4WKH5LwEpmMDtvyCa+0aKHJWOybbq1qdpihVt7dwp55yV6yz745Trq6o5Rus4vkqKaP2Hqlar9okb9xVt06xFEn9ngU3zDY9S/fE= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OffersController_listForProduct + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-mine.ParamsDetails.json b/docs/api-reference/reference/offers-controller-list-mine.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-mine.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-mine.RequestSchema.json b/docs/api-reference/reference/offers-controller-list-mine.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-mine.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-mine.StatusCodes.json b/docs/api-reference/reference/offers-controller-list-mine.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-mine.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-list-mine.api.mdx b/docs/api-reference/reference/offers-controller-list-mine.api.mdx new file mode 100644 index 0000000000..bb1dce1723 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-list-mine.api.mdx @@ -0,0 +1,69 @@ +--- +id: offers-controller-list-mine +title: "OffersController_listMine" +description: "OffersController_listMine" +sidebar_label: "OffersController_listMine" +hide_title: true +hide_table_of_contents: true +api: eJztl91OIzcUx1/lyFes5IQkpO0yd2mgFZUQFFh6gRDyeM4k3vXYg30mSxrN8/Q99slWxzN8lFRsuc8Vxh//8/WbE3sjfI1BkfHupBCZOCtLDHHuHQVvLYY7ayKdGodCiloFVSFhiCK7uZUiYKy9ixhFthGT0Yj/FBh1MDXriUyIVorpfy1cK2uKZBVKZSwWEnwAWiIEvG8wEqyMt4owgoK8icZhjBAai0MhhfaO0BHLqrq2Riel/c+RtTci6iVWike0rlFkwuefURNHEDhaMp3LGIIPP96mfYEvdkUKxi2EFPigqtry1K+zo7uL4z8/HV9eCfkq0ktSuUWolF4ah4OAqkgTyTiw9pCzVGGMavEDO1tZg9IH8A45eZUPCKVBW8Sk2CeSq/qWZjGeTvJpoQeTcjQZTD/+PBrkPx0cDg7LaTn5pZyOR/nHraDmPgTsykNLE/tgvhpaQsSwwjCIpkCwfsG+9M6YgIXIbrp8Pkf80tNbKchQ8uuYJY+QlLFH5LdEutq93n/RE9mdaBN94236Tk2Mxi0kVMqWPlQ9fvhQszzogAU6MsrGHW072t5F28E2bbOGloyTVsSg5Q1B1QH41PASdjWGNO8d7PkAhiIEjL4JGiFqX6OE2dHFYDQ5+LDDcoflu7CcbmN59fxji8UzaYXHCM4T4IOJlPqi6SZWJhouGvnErVZ8P9iRuCPxXSQevkkiaO9KazTFzv0EIXfKSIoQ9nC4GIKCoukwQ2icuW8QVso2uGuLOxj/P4ytFKQW/JQRPj16+ERE3QRDa5HdbESOKmDgt057+zrKt95JFdLS82NqgYkYRUuRiX1Vm/3VeL83xrY4G/1b6tHwJfPZsfVovoeWA+mnZD/4zYdKkcjEH39dcZl9rM0dzM5P4AuuhXys7JKoTkkyrvSp4n1ezi7PT+DcKuJLMJ/bKmbasXdWo4NLUq5QoYDz4ItGE5ykS3LZf2EfQDNkda82hNPr8+7awhcbPsQfEMy9i2SoSaB++2d6kPU6tJZwFhbKmb+TXpTAFyfZm8MAc19glJBc6se9K1HCtQpGOR7NFeHCB8PrM6Jg8oZ4PLcqxid3JRx53VSYjsyawhA3D65HF/hoOB6O+naiNLcTTmDtI1UqNRKnUkU6DuAZBGAQoCfhX8l8+tIIH2i/tso4/habYHmto+RGqNqwI2MhX2C59JF4cbPJVcRPwbYtT983GNYdPyuOP+eq3ty2UixRFQndjWAUMjHTGmumMXVKkW03R2b8idzfj7lbqYZ9evL7FX1JvV9Sbv1Ce7Ppdlz5L+jaVsjeCeL/RXvbtu13XmWkHg== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OffersController_listMine + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-remove-buyer-minimum.ParamsDetails.json b/docs/api-reference/reference/offers-controller-remove-buyer-minimum.ParamsDetails.json new file mode 100644 index 0000000000..527b064793 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-remove-buyer-minimum.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"buyerOrganizationId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-remove-buyer-minimum.RequestSchema.json b/docs/api-reference/reference/offers-controller-remove-buyer-minimum.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/offers-controller-remove-buyer-minimum.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-remove-buyer-minimum.StatusCodes.json b/docs/api-reference/reference/offers-controller-remove-buyer-minimum.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-remove-buyer-minimum.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-remove-buyer-minimum.api.mdx b/docs/api-reference/reference/offers-controller-remove-buyer-minimum.api.mdx new file mode 100644 index 0000000000..d06c937f70 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-remove-buyer-minimum.api.mdx @@ -0,0 +1,69 @@ +--- +id: offers-controller-remove-buyer-minimum +title: "OffersController_removeBuyerMinimum" +description: "OffersController_removeBuyerMinimum" +sidebar_label: "OffersController_removeBuyerMinimum" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241uXjsFUjRImmTTQxAEtDiyuSuRCjnyxjX0PH2PPlkxlGIncbC76aEnn0zzY/jn8McRh2vhSvSKjLOnWiTiPMvQh4mz5F2eo7/3WLglfqxW6M+MNUVVCClK5VWBhD6I5HYtrCpQJMJoIYXHh8p41CIhX6EUxopElIoWQoqQLrBQIlkLWpU8IpA3di7qWm6MzHimcz9X1vz1JOu/Wr3jgaF0NmDg9mG/zz8aQ+pNycZFIkQtxeithhuVGx0lQKZMjlqC80ALBFaDgWBpXK4IAyiYVcFYDAF8lWNXSJE6S2iJzaqyzE0aLfU+B7a93hXtZp8xJfat5x0h00hG753/frfUadz1gBT4qIoy56qP4+n95ckfn06uroV8tdIrUrMcoVDpwljseFQ6VsTJgW132UsFhqDm35lnx2uQOQ/OIjuvcB4hM5jrEC22jmTyvmVTD0bD2UinnWHWH3ZGH37ud2Y/HR13jrNRNvwlGw36sw87i5o477HZHlqY0C7mq6EFBPRL9J1gNELu5qylfs7YbePP7YqfK72TggxFXSdscoqkTD4lt2Ok2bvX/S9bIpsRdaRvsEvfmQnB2LmEQuWZ80WLHz6WbB5SjxotGZWHPW172t5F29EubeOKFoxTqohBm1UERQPgJuBF7Er0sd5ZOHAeDAXwGFzlU4SQuhIljKeXnf7w6HCP5R7Ld2E52sXyevuxRb0lTTsMYB0BPppAMS6apmJpguFNIxe5TRXfYfYk7kl8F4nH3yQRUmez3KQUGvkRQo6UgRQhHGB33gUFumowQ6iseagQliqvcB8W9zD+OIy1FKTmnGQJFxMzHhEwrbyhVUy9Zqg8epHc3nG283KVP5bLFUgLx6mfxhwJY3ZHC5GInipNbznoNTP31kbXvZiddYpmcOit38jWak7JohNZ9zO9V4x1g+ST6pb1mPc1VbIt/Op8oUgk4rc/r5kOF0pzD+OLU/iCKyGfgFgQldG3xmYugtK68/zq4hQuckV8d+ZxOwzEHgfnJVq4ImW18houvNNVSnAa79ZZezAPIWU2y9ZaF85uLprbDt+HeBCfO5g4G8hQFfn+5+/RUdLaoZWE5z4KEvi+Jdvp0MPEaQwSoqS23EoJEm6UN8pyaaII584bbh8TeTOriMuTXIWwkSth6tKqwDhkXGlDHHN4P5qF97uDbr+NQirlKMQOLF2gQsX402biDT6w5QcafiACBFuCXvh1c1YJH6lX5spYPs2Vz7mtQetWqNKwpoGQT2BLkcT3g5eEcfVbLwJ3UixcIDa1Xs9UwE8+r2uufqjQrxrwluy4GeNwuxbaBC5rkWQqD7ijehOTxcFle04PYQvay9W0lcoyijGu80OCFMxmfAfhB43/cca3XFTf1VIsUOkYHtZtz3GaYknPbOx8gDiObGLC9OT3k+sTIYWqeOM2m/vqtMYJ3pS4Xjc9rt0XtHW9UUz8nzXW9b+RT1ma +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OffersController_removeBuyerMinimum + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-set-buyer-minimum.ParamsDetails.json b/docs/api-reference/reference/offers-controller-set-buyer-minimum.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-set-buyer-minimum.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-set-buyer-minimum.RequestSchema.json b/docs/api-reference/reference/offers-controller-set-buyer-minimum.RequestSchema.json new file mode 100644 index 0000000000..2e4f5c4375 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-set-buyer-minimum.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"buyerOrganizationId":{"type":"string"},"minimumQuantity":{"type":"number","description":"Overrides Offer.minimumQuantity for this buyer only. Decimal (ADR-024, Deel 17 §29)."}},"required":["buyerOrganizationId","minimumQuantity"],"title":"SetOfferBuyerMinimumDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-set-buyer-minimum.StatusCodes.json b/docs/api-reference/reference/offers-controller-set-buyer-minimum.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-set-buyer-minimum.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-set-buyer-minimum.api.mdx b/docs/api-reference/reference/offers-controller-set-buyer-minimum.api.mdx new file mode 100644 index 0000000000..f286737527 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-set-buyer-minimum.api.mdx @@ -0,0 +1,69 @@ +--- +id: offers-controller-set-buyer-minimum +title: "OffersController_setBuyerMinimum" +description: "OffersController_setBuyerMinimum" +sidebar_label: "OffersController_setBuyerMinimum" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u2zgQgF9lwFMC0L/xbhvdXDsLZIEiaZJ2D0ZQUNLIZiuRKjly4zX0PH2PPtliKMV2omy7Bfbok2X+DOfnmxFHW2FLdIq0NZepiMRVlqHzM2vI2TxH99Ejvak26N5qo4uqEFKUyqkCCZ0X0WIrjCpQREKnQgqHXyrtMBURuQql0EZEolS0ElL4ZIWFEtFW0KbkHZ6cNktR1/fNRvT0xqYbXvFcTmINoSGeUmWZ6yQoPPjkreGxjmgbf8KEWFfH5pFGz7MxG3Lllsrov3cmd/SRomhsfVcpQ5o2B2tMVcTohBQp+sTpkoWw19bonE7RQ/Bf/5kAyKwDWmkPQQOwJt/0YY6JLlQOJ9P5TW84nkiYI+YwegXfv43PT/uirg89unhR/a6y91KQppy1vUUK+hwGcE5W1HUj2pfW+MY14+GIf56axb6YDIfdiQ8q12lQATKlc0wlBAsR2kDCWttcEXpQEFdeG/QeXJVjX/xv0UTnrPv5ssSm2I2yFPigijK46c10/vHm4t37i9u7TmRvScU5QqGSlTbYc6jSMBAOB5bdD8Sg92r5k3M6XgtcWIPsvMI6hExjnvogsXXkS4QeykxHk3E8SZPeOBuOe5PXvw978W9n573zbJKNX2WT0TB+3TFqZp3DJjyBysaYr5pW4NGt0fW8ThFyu/RdCoM/9xYfanqA3gWLnCMpnTfEPRXSxO75+puWyD2jk5ewfKu912YpoVB5Zl3R4ocPJYuHxGGKhrTK/ZG2I22/RNtZl7ZpRSvGKVHEoMUVQdEAuCt4AbsSXRi3Bk6sA00eHHpbuQTBJ7ZECU2hPzs9YnnE8pewnHSxvNu/bDHdk5Za9GAsAT5oT6Eu6mZgrb3moJEN3CaKr3dHEo8k/hKJ5z8kERJrslwn5Bv1A4RcKT0pQjjB/rIPCtKqwQyhMvpLhbBWeYXHsniE8b/DWEtBasktqLChZ+UdHpPKhY5tsRUxKodORIt77jCfNWw/b3MLpJXllri0PpDDbWwkBqrUg/Vo0Bw62Oq0HoTGrNc2Yp573eApVu5AqVtmt21EW9VaoNnIdki2D39YVygSkfjzrztGwPpSf4Tp9SV8xo2Qj1FfEZXBgZwgN/sm+uIRgn9peve4dHrdYc19e2YDW20Erm6vL+E6V8TXbdai2wHzipOrEg3ckjKpcilcO5tWCcFluI5nbS6fQsI4l620Prz9cN1ckPgKxZs4VWFmjSdNVUiJ798mZ1ErhzYSDs3xEviKJtvj0MHMpuglBJXa51YVL+GDcloZfpopwqV1muenRE7HFfHzLFfe79SVMLdJVWDYMq1STVymOLqN4cP+qD9sC5dKuHBxOJiZQoWS1X4faYiDPXLgkSAwB3vonjh1l9uEDzQoc6UNZ3/lcp5reFwIVWpWaCTkYyJIEYWvMc+wvJdixShHC7Hdxsrje5fXNQ9/qdBtGljX7J6Yg77YilR7fk5FlKncY0e9XbEWJzdtAp/CHs6nareDyjC+oeDzFwYpmOfw+ai+r6VYoUpD0m7biVlzRu+Ot+83dl4OtXzcMU0SLOmHa+8P0vv6KpT2uP30VIRXgnDqK5cv9bVR0gabQ+6Gsa3IlVlWoayLRiaHXVUck13cnuV0sOpFN2y3zYo7+xlNXe+8QvyfHVPX/wCZ6cM2 +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OffersController_setBuyerMinimum + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-withdraw.ParamsDetails.json b/docs/api-reference/reference/offers-controller-withdraw.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-withdraw.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-withdraw.RequestSchema.json b/docs/api-reference/reference/offers-controller-withdraw.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/offers-controller-withdraw.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-withdraw.StatusCodes.json b/docs/api-reference/reference/offers-controller-withdraw.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-withdraw.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/offers-controller-withdraw.api.mdx b/docs/api-reference/reference/offers-controller-withdraw.api.mdx new file mode 100644 index 0000000000..2238e10d82 --- /dev/null +++ b/docs/api-reference/reference/offers-controller-withdraw.api.mdx @@ -0,0 +1,69 @@ +--- +id: offers-controller-withdraw +title: "OffersController_withdraw" +description: "OffersController_withdraw" +sidebar_label: "OffersController_withdraw" +hide_title: true +hide_table_of_contents: true +api: eJztmNtu4zYQhl9lwKsEoI9x243uXNsFUnSRNMmmF0EQ0OLI4q5EKuTIm9TQ8/Q99skWQynOwYtsc+8r0zwMf858HHO8Ea5Cr8g4e6JFIk6zDH2YOUveFQX626+Gcu3VVyFFpbwqkdAHkVxvhFUlikQYLaTweFcbj1ok5GuUwliRiEpRLqQIaY6lEslG0EPFKwJ5Y1eiaW54YaicDRh4fDwc8ofGkHpTsSaRCNFIMfnRwJUqjI7KIVOmQC3BeaAcgdVgIFgbVyjCAAqWdTAWQwBfF9gXUqTOElpis6qqCpNGS4PPgW1vdkW75WdMib3g2WNkWsnovfM/n5Y6jbsekALvVVkV3PX7dH57vvj70+LiUshXJ70gtSwQSpXmxmLPo9KxI24ObLvPXioxBLX6yT47XoPMeXAW2Xml8wiZwUKHaLFzJJPxlk09moyXE532xtlw3Jt8+HXYW/5ydNw7zibZ+LdsMhouP+wcaua8xzY8lJvQHYZxg4B+jb4XjEYo3Iq1NM8Zu279+XTi50pvpCBDUdeCTc6RlCnm5HaMtLF7Pf+8I7Jd0UT6Rrv0fTQhGLuSUKoic77s8MP7is1D6lGjJaOKsKdtT9u7aDvapW1aU844pYoYtGVNULYAbhNexK5CH/udhQPnwVAAj8HVPkUIqatQwnR+3huOjw73WO6xfBeWk10sL59+bFE/kaYdBrCOAO9NoJgXTduxNsFw0MhFblPFb4w9iXsS30Xi8ZskQupsVpiUQis/QsiZMpAihAPsr/qgQNctZgi1NXc1wloVNe7T4h7G/w9jIwWpFZdDwsXCiVcETGtv6CEWSUtUHr1Irm+42nl5yrdqrRIpd1yQaSyQMFZflItEDFRlBuvRoN1vsDG64RoreoWFPBNwwZy2jD3K6ODlA3Vdsmv84XypSCTiz38uOdwuVOYWpmcn8AUfhHyMcE5URWcZm7kY+c4/pxdnJ3BWKOLHMK/bCWqccXBaoYULUlYrr+HMO12nBCfxsZx1N+0QUoat6qz14ePVWft84QcOL+KLBDNnAxmqI7Df/pscJZ0depBw6lfKmn+jvSCBH1Cy2w49zJzGICFK6tqdlCDhSnmjLLdminDlvOHxKZE3y5q4PStUCFu5EuYurUuMS6a1NsRJhOPRHnzYH/WHXVpRKacVdmDlApUqJpSukm55gCcg4BkQL3y5vXCE9zSoCmUsX8naFzzWknItVGVYx0jIRzqlSEy8BbkLxFM2m6UK+MkXTcPddzX6hxaiNTthyaG93ghtAre1SDJVBNxRs02Y4uC8u0SH8ATNS5Vdp7KMVUy6XOVLwZzFvxOam0aKHJWOF2fTDUzTFCt6tmQnNfMN296b+eKvxeVCSKFq9sbWY6+wjxv8UNFm0864dF/QNs1WIPF31tg03wHcROWe +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OffersController_withdraw + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-accept.ParamsDetails.json b/docs/api-reference/reference/orders-controller-accept.ParamsDetails.json new file mode 100644 index 0000000000..0b55d89c9d --- /dev/null +++ b/docs/api-reference/reference/orders-controller-accept.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"groupId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-accept.RequestSchema.json b/docs/api-reference/reference/orders-controller-accept.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/orders-controller-accept.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-accept.StatusCodes.json b/docs/api-reference/reference/orders-controller-accept.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-accept.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-accept.api.mdx b/docs/api-reference/reference/orders-controller-accept.api.mdx new file mode 100644 index 0000000000..ae1d3ab2ed --- /dev/null +++ b/docs/api-reference/reference/orders-controller-accept.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-accept +title: "OrdersController_accept" +description: "OrdersController_accept" +sidebar_label: "OrdersController_accept" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEEtDiyuSuRWnKUJivoefoefbJiKNlO4u1u00NPPpkmxeGfMz+OOKqFK9ErMs5eaJGIS6/Rh5mz5F2eo79XaYolCSlK5VWBhD6IZFELqwoUiTBaSOHxc2U8apGQr1AKY0UiSkVrIUVI11gokdSCnkqeEcgbuxJNI7dGVt5V5cV/t3THE0PpbMDA4+PhiH80htSbkvcmEiEaKSbD4f7ArcqNjh6ATJkctQTngdYIrAYDwYNxuSIMoGBZBWMxBPBVjn0hReosoSU2q8oyN2m0NPgY2Ha9L9otP2Ia/enZ82Rayei9899/LHUa9z0gBT6qosy56+fp2f3V+W8fzq9vhHy102tSyxyhUOnaWOx5VDp2xMWBbffZSwWGoFbfWWfPa5A5D84iO69wHiEzmOsQLXaOZMK+ZVOPJuPlRKe9cTYc9ybvfhz2lj+cnPZOs0k2/imbjIbLd3ubmjnvsQ0PrU3oNvOHoTUE9A/oe8FohNytWEvznLFF68/djp8rvZOCDEVd52zyDEmZ/IzcnpE2dq+fv+qIbGc0kb6vYPnehGDsSkKh8sz5osMPH0s2D6lHjZaMysOBtgNtb6LtZJ+2aUVrxilVxKAtK4KiBXCb8CJ2JfrY7ywcOQ+GAngMrvIpQkhdiRKmZ1e94fjk+IDlAcs3YTnZx/Jm97JFvSNNOwxgHQE+mkAxL5q248EEw0EjF7lNFd9VDiQeSHwTiaffJBFSZ7PcpBRa+RFCzpSBFCEcYX/VBwW6ajFDqKz5XCE8qLzCQ1o8wPjvYWykILXiwkq4WIDxjIBp5Q09xXJricqjF8nijqudl7v855qtQFo7LutKF9oajtYiEQNVmsHDaNCuNaiNbgaxBguDuqvFmsHWSOspFvdM1DWz23K3kdYBzZvsumTX+MX5QpFIxK+/3zACLpTmHqbzC/iET0Juor4mKqMDjc1cpKHz2eX1/ALmuSK+IPO8vUDHJ44uS7RwTcpq5TXMvdNVSnARL9BZd/qOIWUAy85aH97fztsrDV96eBIfLpg5G8hQFSH+68/JSdLZoScJl36lrPkS7QUJfKmS3XLoYeY0BglRUtfupAQJt8obZbk1U4Qr5w2PT4m8WVbE7VmuQtjKlXDm0qrAOGVaaUOcWDge7caH/VF/2KUalXKqYQdyuAsVk0xXYreMwA4S2Mb3hSe3R5DwkQZlrozlQ1r5nMdafhZClYZVjITc8CpFEj8FtBjx311R3610J8WaMUwWoq6XKuAHnzcNd3+u0D+1fD2wf5Yc9UUttAnc1iLJVB5wT+o2v4qjq+7MHcOOp5db6DqVZeJijuaPAlIwgvE7Bn+Q+B9X3PinuWukWKPS8XjX3eh0E53NvL0XCOeB7fmeX8aUriqOzzaGr45hNP9VUXXdPnHjPqFtmq1G4v+ssGn+BulzNPc= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_accept + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-add-line.ParamsDetails.json b/docs/api-reference/reference/orders-controller-add-line.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-add-line.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-add-line.RequestSchema.json b/docs/api-reference/reference/orders-controller-add-line.RequestSchema.json new file mode 100644 index 0000000000..2aaf7f0f6c --- /dev/null +++ b/docs/api-reference/reference/orders-controller-add-line.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"offerId":{"type":"string"},"quantity":{"type":"number","description":"Decimal, not just whole units (ADR-024, Deel 17 §29) — e.g. 4.5 kg, 10.75 m."}},"required":["offerId","quantity"],"title":"AddOrderLineDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-add-line.StatusCodes.json b/docs/api-reference/reference/orders-controller-add-line.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-add-line.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-add-line.api.mdx b/docs/api-reference/reference/orders-controller-add-line.api.mdx new file mode 100644 index 0000000000..c59b61962c --- /dev/null +++ b/docs/api-reference/reference/orders-controller-add-line.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-add-line +title: "OrdersController_addLine" +description: "OrdersController_addLine" +sidebar_label: "OrdersController_addLine" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uGzcQgK8y4JMNUL9WmnjfFMkFXDSwYzvpg2AE1HJWorNLrslZ/1RYoIfoHXKPHKUnKYa7luQoSGqgj3oyzZ/h/Hwz4uxKuBK9IuPsqRaJOPMafZg4S97lOfpPSuvfjUUhRam8KpDQB5HMVsKqAkUijBZSeLytjEctEvIVSmGsSESpaCmkCOkSCyWSlaDHkk8E8sYuRF1fNwcx0FunH3nHt3JSZwkt8ZIqy9ykUdHeTXCW53ZEu/kNpsS6ejaLDAZedVmGns3b0UGK20pZMvS4tWirYo5eSKExpN6UfKdIxBRTU6hcgnUEN1UguF+6HKGyhgIcjKcXnf5wJGGKmMPgNXz9Mjw+hH/++huwu+jCqPsKPi8kDPrd16+g6Iq63nbcbK3llk7XUpChnJUaax1jw8GYkhN13ZwPpbOhMXPYH/Cf51qzjaN+f3fho8qNjv6ETJkctQTngZYIbVDgzrhcEQZQMK+CsRgC+CrHrvjfIoPeO//zbanTuBs9KfBBFWV0z9vx9NPFyfsPJ5dXO4G7JDXPEQqVLo3Fjkel40S8HFh2l71UYAhq8ZN7drwGmfPgLLLzCucRMoO5DlFi68jvkbctUw9Gw/lIp51h1h92Rm9+6Xfmr46OO8fZKBu+zkaD/vzNjlET5z024aGlCa0x94aWENDfoe8EoxFytwi7qEV/bize1nQLuRMWOUVSJm+Iey6kid23+y9aIjeMjr6H5TsTgrELCYXKM+eLFj98KFk8pB41WjIqD3va9rS9iLajXdrGFS0Zp1QRgzavCIoGwHXBi9iV6OO8s3DgPHBd9xhc5VOEkLoSJTRl/uhwj+UeyxdhOdrF8mrzY4t6Q5p2GOIjAx9MoFgXTTNxZ4LhoJGL3KaKn2h7EvckvojE4x+SCKmzWW5SCo36EUKulIEUIRzEx6wCXTWYxffvbYVwp/IK92VxD+N/h7GWgtQixOYn9p18ImBa+diQzVZijsqjF8nsmrvF51b+oFUtkJaO29nShUgMt6KJ6KnS9O4Gveay3sroupdzX8NtanQM67KlwyWj2mD2pEnLL9vUTsl28KvzhSKRiN/+uOKIu1CaTzA+P4XP+CjkU5CXRGX0F+fDxab/PXmK+Va/uiFi06b2a+6vMxe5ab17dnl+Cue5In5K85U7SMQdB2clWrgkZbXyGs6901VKcBqf2lmbp4eQMqplK60L7z6eN48ffh7xIU5DmDgbyFAVcf/6ZXSUtHLoUcKZXyhr/ozyggR+fsn2OvQwcRqDhKhSO25VCRI+Km+U5dFEES6cN7w+JvJmXhGPJ7kKYa2uhKlLqwLjkXGlDXEJ4lA2hve7g26/LUoq5aLEvmcuChXLUfsdo6EJNjiB0hpanp75cp2uhA/UK3NlLCd05XNea1CbCVUa1mMg5BPbUiTxY0lD3LUUS4YzmYnVaq4CfvB5XfP0bYX+seHwjp0x5xDPVkKbwGMtkkzlAXe0WpddcXDRpuIhbLh7rm07qSyTGUs3fyuQglGNH3Xq61qKJSod02/VLkyaOzpXfHxzcKfM1/LpxDhNsaQf7r3eStjzs1ik5+0HoSIWd+HVPRcidd8o6aLNMS3j3Erkyi6qWKBFI5ODrCoOxTpc36RrtOq7blitmh1X7jPaul57hfh/dkxd/wv9yZFO +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_addLine + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-create-draft.ParamsDetails.json b/docs/api-reference/reference/orders-controller-create-draft.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-create-draft.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-create-draft.RequestSchema.json b/docs/api-reference/reference/orders-controller-create-draft.RequestSchema.json new file mode 100644 index 0000000000..e759509419 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-create-draft.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shippingAddress":{"type":"object"},"notes":{"type":"string"}},"title":"CreateDraftOrderDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-create-draft.StatusCodes.json b/docs/api-reference/reference/orders-controller-create-draft.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-create-draft.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-create-draft.api.mdx b/docs/api-reference/reference/orders-controller-create-draft.api.mdx new file mode 100644 index 0000000000..1b7de8c4e2 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-create-draft.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-create-draft +title: "OrdersController_createDraft" +description: "OrdersController_createDraft" +sidebar_label: "OrdersController_createDraft" +hide_title: true +hide_table_of_contents: true +api: eJztmM1uIjkQgF+l5FNGaggQdnfCjYGslJVGYZNM9oBQZNoFeKbb7pSrkzCon2ffY59sVe4mZMIo2Uh75ITxT/1+LlxslC+QNFvvzo0aqAsySGHkHZPPMqTblFAzjkkvWCWq0KRzZKSgBtNZogjvSgz8yZu1GmziV0to1ICpxESl3jE6liVdFJlNo6Ljr8E7mQvpCnMtI14XqAbKz79iGvWQmMUWQ9y3skVh3XJoDGEI+weqRDnP+HwlMFm3VFWVKLacydRo50p0c8xeVZXsIAyFd6EW0Ot05cNgSMkWYrAaKFHR73T2F250Zk10CxbaZmgS8AS8QmhiA/fWZ5oxgIZ5GazDEIDKDNvqfwsQEnl6e1vqDe6HKFH4qPMihujTcHx7efbnl7Ora5W88PSK9TxDyHW6sg5bhNrEiagcRHZbopRjCHr5hp69qMHCE3iHErzcE8LCYmZClNgEUvh8Tabp9nvzvklbvUWn1+p//LXTmv9ycto6XfQXvd8W/W5n/nHPqZEnwjo9vLKhcebB8goC0j1SK1iDkPml2NIYUyM+reO58/i5pbMddmcicoysbVYT96OQOncv9182RO4Y7f8My882BOuWCeQ6W3jKG/zwsRDxkBIadGx1Fg60HWh7F20n+7QNS14JTqlmAW1eMuQ1gE8FL2JXIMV57+DIE1gOQBh8SSlCSH2BCQzHl61O7+TDAcsDlu/Csr+P5fXuxxbNjjTjMYDzDPhoA8e6aOuJexusJI195DbV8tI5kHgg8V0knr5KIqTeLTKbcqjNjxBKpQysGeEI28s2aDBljRlC6exdiXCvsxIPZfEA43+HUVocvZSOTPnYvsmJgGlJltdqMN2oOWpCkpatmr308o2OL0deeekMCx/qDpBXaqCOdWGP77vHjULRJxFp2sKt8ithtOZra0IDrjjTTCXN4HdPuWY1UH/8dS2p9qGwtzCcnMM3XKtkm90VcxEDJRfhctd/nm2T/bN+cdcgPjWGibJu4SM2TXAvribnMMk0y0taFO8REXccXRTo4Iq1M5oMTMibMmU4jy/tRXNNP0AqpBaNtDZ8vpnUbx95HckhuYUw8i6w5TLS/s/f/ZNBI4fXCVzQUjv7PcoLCcjrK2nUIcHIGwwJRJOacWNKSOBGk9VORiPNuPRkZX3ITHZesoxHmQ7hydwExj4tc4xHhqWxLBVIElo73ml3252mJulUapJkQJDIdaxGTseU1jDBjiaoaYItTj/E8+nGMj7ycZFp6yQvJWWyVpM2VbqwYktXJc/wXgmNg6nabOY64BfKqkqm70qkdc3gvYRgLomdzqpErVCbeAU2SnCS2x3La+taTJDtWSmm7JXaKtmeGKYpFvzq3tmzCzO5iIVy3vw3kscCq0g/SDHQD/KnQqJ8DEW8IXFuozLtlmUskqqWKZHWpcTiKV4vbk70qlnSbv3Mws2m3nHtv6GrKpU0rrB8V9Wsqqp/Aa/lL5k= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_createDraft + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-get.ParamsDetails.json b/docs/api-reference/reference/orders-controller-get.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-get.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-get.RequestSchema.json b/docs/api-reference/reference/orders-controller-get.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/orders-controller-get.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-get.StatusCodes.json b/docs/api-reference/reference/orders-controller-get.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-get.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-get.api.mdx b/docs/api-reference/reference/orders-controller-get.api.mdx new file mode 100644 index 0000000000..a417f7914a --- /dev/null +++ b/docs/api-reference/reference/orders-controller-get.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-get +title: "OrdersController_get" +description: "OrdersController_get" +sidebar_label: "OrdersController_get" +hide_title: true +hide_table_of_contents: true +api: eJztmNtu4zYQhl9lwKsEoI9x243uXCctUmCRNMmmF0EQ0OLI4q5EKuTIjSvoefoefbJiKMU5eLvb3PvKNA/DnzMfxxw3wlXoFRlnz7RIxLnX6MPCWfKuKNDfr5CEFJXyqkRCH0Ry2wirShSJMFpI4fGhNh61SMjXKIWxIhGVolxIEdIcSyWSRtCm4hWBvLEr0bZ3vDBUzgYMPD4dj/lDY0i9qViOSIRopZh9beBGFUZH0ZApU6CW4DxQjsBqMBCsjSsUYQAFyzoYiyGArwscCilSZwktsVlVVYVJo6XR58C2m13RbvkZ0+gFz84i00lG753//rTUadz1gBT4qMqq4K6f5yf3l6e/fzq9uhbyzUmvSC0LhFKlubE48Kh07IibA9sespdKDEGtvrPPjtcgcx6cRXZe6TxCZrDQIVrsHclQfMumnsymy5lOB9NsPB3MPvw4Hix/ODoeHGezbPpTNpuMlx92DrVw3mMXHspN6A/zp6EcAvo1+kEwGqFwK9bSvmTstvPn84lfKr2TggxFXads8gRJmeKE3I6RLnZv51/2RHYr2kjfZJe+jyYEY1cSSlVkzpc9fvhYsXlIPWq0ZFQR9rTtaXsXbUe7tM1ryhmnVBGDtqwJyg7AbcKL2FXoY7+zcOA8GArgMbjapwghdRVKmJ9cDsbTo8M9lnss34XlbBfL6+cfW9TPpGmHAawjwEcTKOZF03WsTTAcNHKR21Tx82JP4p7Ed5F4/E0SIXU2K0xKoZMfIeRMGUgRwgEOV0NQoOsOM4TamocaYa2KGvdpcQ/j/4exlYLUissh4WLNxCsCprU3tIlF0hKVRy+S2zuudl6f8j/KrBIpd1yGPVVdlItEjFRlRuvJqNtn1Bjdcm0VvcECXmx8xXx2bD1t30PLB+m7ZN/4xflSkUjEb39cc5hdqMw9zC/O4AtuhHyKbE5URScZm7kY8d4v51cXZ3BRKOJHMK/bCWaccXBeoYUrUlYrr+HCO12nBGfxkZz1N+wQUoas6q0N4ePNRfds4YcNL+ILBAtnAxmqI6j//D07Sno7tJFw7lfKmr+ivSCBH06y3w49LJzGICFK6tu9lCDhRnmjLLcWinDlvOHxOZE3y5q4vShUCFu5Ek5cWpcYl8xrbYiTB8ejO/h4OBmO+3SiUk4n7MDKBSpVTCR9Bd1xAM8gQBf5V27c3jHCRxpVhTKWb2HtCx7rILkVqjIsYSLkE5BSJCaCn7tAPKVplirgJ1+0LXc/1Og3HT9rPv+So3rbCG0Ct7VIMlUE3FGzzZHi4LK/N4fwzMtrlX2nskxUzLNc2EvBiMV/ENq7VooclY53pekH5mmKFb1YspON+VJt78uvp5weVc2u2LrrDe7R+lflNE0349p9Qdu2W3XE31lg2/4Lq4DdVg== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_get + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-list.ParamsDetails.json b/docs/api-reference/reference/orders-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-list.RequestSchema.json b/docs/api-reference/reference/orders-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/orders-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-list.StatusCodes.json b/docs/api-reference/reference/orders-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-list.api.mdx b/docs/api-reference/reference/orders-controller-list.api.mdx new file mode 100644 index 0000000000..b1e117e0e2 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-list +title: "OrdersController_list" +description: "OrdersController_list" +sidebar_label: "OrdersController_list" +hide_title: true +hide_table_of_contents: true +api: eJztl9tu4zYQhl9lwKssIDu247Yb3blOWqTAImmSTS+CIKCokcVdidQOR25cQ8/T9+iTFUMph8btbnPvqzA8/HP6NCa3yjdImq13Z7lK1TnlSGHpHZOvKqT7ygZWiWo06RoZKaj09i5RhKHxLmBQ6VbNJhP5k2MwZBvRUqlSXaLm/7ZwoyubR4tQaFthnoAn4BKB8EuLgWFtfaUZA2jI2mAdhgDUVjhWiTLeMToWWd00lTVR6fBTEO2tCqbEWsuINw2qVPnsE5oYAUmkbHuXkcjTt7cZn+OLXYHJupVKFD7ouqlk6sfFyf3l6a8fT6+uVfIq0ivWWYVQa1NahyNCnceJaBxEeyxZqjEEvfqGnZ2sQeEJvENJXu0JobBY5SEqDomUin5NM5/OZ9k8N6NZMZmN5u+/n4yy746OR8fFvJj9UMynk+z9TlBLT4R9ebi0YQjmd8slBKQ10ijYHKHyK/FlcMYS5iq97fP5HPFLT+8SxZajX6cieYKsbXXCfkekr93r/ZcDkf2JLtI33aXvgw3BulUCta4KT/WAHz40Ig+GMEfHVldhT9uetjfRdrRL26LlUnAymgW0rGWoewCfGl7ErkGK897BgSewHIAw+JYMQjC+wQQWJ5ejyezo3R7LPZZvwnK+i+X1848t5s+k5R4DOM+ADzZw7Iu2n1jbYKVo7CO3RsvdYE/insQ3kXj8VRLBeFdU1nDo3Y8QSqcMrBnhAMerMWjI2x4zhNbZLy3CWlct7tviHsb/D2OXKNYrecooHx88ciKgacnyRqW3W5WhJiR563R3r6P8rzdSjVx6eUStsH8ycalSdagbe7ieHg6GxI5kYnhHPRq9EjZ7rh5ND8BKEMNUMgx+8lRrVqn65bdrKbEPjb2HxcUZfMaNSh6rWjI3MUHWFT5We8jJ+dXFGVxUmuUCLOd2Chl3HJw36OCKtcs15XBBPm8Nw1m8IBfD1/UOjADWDGpj+HBz0V9Z5FIjh+TjgaV3gS23EdK//pwfpYMObxI4p5V29o+oFxKQS1MymEOCpc8xJBBdGsaDKyGBG01WOxktNePKk5X1BTPZrGUZLysdwpO7CZx409YYjyza3LI0DqlHH/hkPB1PhlaijbQSSWDjA9c6NhGnY0V6BuAZAhgg+Ecenz4wxgc+bCptnXyCLVWy1gNyq3RjxYepSl7QWPrAsrjdZjrgR6q6Tqa/tEibHp21hJ5JQW/vukSVqPNI7FYJBalaGIONuBQbpEp3e6Kg/QTtz6fSpHQrPj35/Qq8qD4sabd5ob3d9juu/Wd0XaeSwQmW/1V313Xd3/rSn58= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-reject.ParamsDetails.json b/docs/api-reference/reference/orders-controller-reject.ParamsDetails.json new file mode 100644 index 0000000000..0b55d89c9d --- /dev/null +++ b/docs/api-reference/reference/orders-controller-reject.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"groupId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-reject.RequestSchema.json b/docs/api-reference/reference/orders-controller-reject.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/orders-controller-reject.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-reject.StatusCodes.json b/docs/api-reference/reference/orders-controller-reject.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-reject.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-reject.api.mdx b/docs/api-reference/reference/orders-controller-reject.api.mdx new file mode 100644 index 0000000000..639d9a4b11 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-reject.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-reject +title: "OrdersController_reject" +description: "OrdersController_reject" +sidebar_label: "OrdersController_reject" +hide_title: true +hide_table_of_contents: true +api: eJztmEtv4zYQgP/KgKcEoJ9x241urpMCKbCIm2TTgxEEtDiyuCuRWnKUJivo9/R/9JcVQynOw9vdpoeefDLNx3AeH0ccNsJV6BUZZ8+0SMS51+jDwlnyrijQ33r8iCkJKSrlVYmEPohk1QirShSJMFpI4fFzbTxqkZCvUQpjRSIqRbmQIqQ5lkokjaCHilcE8sZuRNvKrZCNd3V19t8l3fDCUDkbMPD4dDzhH40h9aZi20QiRCvFbDzeHbhWhdHRA5ApU6CW4DxQjsDaYCC4M65QhAEUrOtgLIYAvi5wKKRInSW0xGJVVRUmjZJGHwPLbnaVdutHf3r2PJlOZfTe+e9PS53GXQ9IgfeqrAru+nl+cntx+tuH08srIV9ZeklqXSCUKs2NxYFHpWNH3BxY9pC9VGIIavOdfXa8Bpnz4Cyy80rnETKDhQ5RYu9IJuxbMvVkNl3PdDqYZuPpYPbux/Fg/cPR8eA4m2XTn7LZZLx+t2PUwnmPXXgoN6E35g9DOQT0d+gHwWiEwm1Yl/Y5Y6vOn08WP9f0RgoyFPU6ZZEnSMoUJ+R2hHSxez3/oieyW9FG+r6C5XsTgrEbCaUqMufLHj+8r1g8pB41WjKqCHva9rS9ibajXdrmNeWMU6qIQVvXBGUH4DbhRewq9LHfWThwHgwF8Bhc7VOEkLoKJcxPLgbj6dHhHss9lm/CcraL5dXTxxb1E2naYQDrCPDeBIp50XQddyYYDhq5yG2q+K6yJ3FP4ptIPP4miZA6mxUmpdCpHyHkTBlIEcIBDjdDUKDrDjOE2prPNcKdKmrcp8U9jP8exlYKUhsurISLBRivCJjW3tBDLLfWqDx6kaxuuNp5aeU/12wlUu64rKtc6Go4ykUiRqoyo7vJqNtr1BjdjmINFkZNX4u1o62QzlOs3DOlLpndjrtH1Xqg2ci+S/aNX5wvFYlE/Pr7FSPgQmVuYb48g0/4IORj1HOiKjrQ2MxFGnqfnV8uz2BZKOILMq/bCXSccXBeoYVLUlYrr2Hpna5TgrN4gc7603cIKQNY9dKG8P562V1p+NLDi9hsWDgbyFAdIf7rz9lR0suhBwnnfqOs+RLlBQl8qZL9duhh4TQGCVGlvt2rEiRcK2+U5dZCEW6cNzw+J/JmXRO3F4UKYauuhBOX1iXGJfNaG+LEwvHoDB8PJ8Nxn2pUyqmGHcjhLlVMMn2J3TECT5DANr4vPLk9goT3NKoKZSwf0toXPNbxsxKqMqzFRMhHXqVI4lNAhxH/fV7Ux51upMgZw2QlmmatAn7wRdty9+ca/UPH1x37Z81RXzVCm8BtLZJMFQF3VN3mV3Fw0Z+5Q3ji6aUJfaeyTFzM0fwoIAUjGN8x+EHif9zx0T/tTStFjkrH4930o/M0xYqerdv5gHAe2J7v5XlM6arm+Gxj+OoYRvFfVappuhlX7hPatt3qSPyfNWzbvwF1GDU4 +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_reject + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-remove-line.ParamsDetails.json b/docs/api-reference/reference/orders-controller-remove-line.ParamsDetails.json new file mode 100644 index 0000000000..ee7dfe90c9 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-remove-line.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"lineId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-remove-line.RequestSchema.json b/docs/api-reference/reference/orders-controller-remove-line.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/orders-controller-remove-line.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-remove-line.StatusCodes.json b/docs/api-reference/reference/orders-controller-remove-line.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-remove-line.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-remove-line.api.mdx b/docs/api-reference/reference/orders-controller-remove-line.api.mdx new file mode 100644 index 0000000000..d7077740c2 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-remove-line.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-remove-line +title: "OrdersController_removeLine" +description: "OrdersController_removeLine" +sidebar_label: "OrdersController_removeLine" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241uru0CKXaRNMmmhyAIaHFkc1ciFXLkJhX0PH2PPlkxlOJ8eJFteujJJ9OkOPxz5scRR7VwJXpFxtkTLRJx6jX6MHOWvMtz9LceC7fBj8aikKJUXhVI6INIrmthVYEiEUYLKTzeVcajFgn5CqUwViSiVLQWUoR0jYUSSS3ooeQZgbyxK9E0cmskNxZP/ruhG54YSmcDBh4fD4f8ozGk3pS8PZEI0Ugx+dbAlcqNjk6ATJkctQTngdYIrAYDwca4XBEGULCsgrEYAvgqx76QInWW0BKbVWWZmzRaGnwJbLveFe2WXzAldqdn55NpJaP3zn//sdRp3PWAFHivijLnrp+n89vzxW+fFxeXQr7a6QWpZY5QqHRtLPY8Kh074uLAtvvspQJDUKvvrLPjNcicB2eRnVc4j5AZzHWIFjtHMmRv2dSjyXg50WlvnA3HvcmHH4e95Q9Hx73jbJKNf8omo+Hyw86mZs57bMNDaxO6zfxhaA0B/QZ9LxiNkLsVa2meM3bd+vNpx8+V3khBhqKuBZucIymTz8ntGGlj9/r5847IdkYT6Rvt0vfJhGDsSkKh8sz5osMP70s2D6lHjZaMysOetj1t76LtaJe2aUVrxilVxKAtK4KiBXCb8CJ2JfrY7ywcOA+GAngMrvIpQkhdiRKm8/PecHx0uMdyj+W7sJzsYnn59LJF/USadhjAOgK8N4FiXjRtx8YEw0EjF7lNFV9X9iTuSXwXicdvkgips1luUgqt/AghZ8pAihAOsL/qgwJdtZghVNbcVQgblVe4T4t7GP89jI0UpFZcVwkXazCeETCtvKGHWG0tUXn0Irm+4Wrn5S7fLtsKpLXj6k5jjtQWcrQWiRio0gw2o0G74qA2uhlwIRYGdVuPNVx0RTexsmeKLhjcFrpHXR3NvMOuS3aNX5wvFIlE/Pr7JcffhdLcwvTsBL7ig5CPIV8TldF7xmYuotA57PTi7ATOckV8O+Z5O1GOTxyclmjhgpTVyms4805XKcFJvD1n3dE7hJTpKztrffh0ddbeZ/jGw5P4ZMHM2UCGqkjw339NjpLODj1IOPUrZc2f0V6QwDcq2S2HHmZOY5AQJXXtTkqQcKW8UZZbM0W4ct7w+JTIm2VF3J7lKoStXAlzl1YFxinTShvirMLxaDc+7I/6wy7PqJTzDDuwdIEKFTNMV163gMATIdASAh0iL9y5PYSE9zQoc2UsH9PK5zzWsnMtVGlYykjIR2KlSOK3gIgQ/+uK+hsp1i4QT6rrpQr42edNw913FfqHlqwNe2bJ8b6uhTaB21okmcoD7ujbplVxcN4dtUN4Iuml7q5TWWYtpmb+FiAFwxe/XvBniP9xxc4rzU0jxRqVjoe67ganaYolPZu289rg07890fPFx8XlQkihKo7KNnKvTmBc4Juq6rp94tJ9Rds0W5HE/1lj0/wDItAyhQ== +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_removeLine + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-submit.ParamsDetails.json b/docs/api-reference/reference/orders-controller-submit.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-submit.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-submit.RequestSchema.json b/docs/api-reference/reference/orders-controller-submit.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/orders-controller-submit.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-submit.StatusCodes.json b/docs/api-reference/reference/orders-controller-submit.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-submit.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-submit.api.mdx b/docs/api-reference/reference/orders-controller-submit.api.mdx new file mode 100644 index 0000000000..0391adfaff --- /dev/null +++ b/docs/api-reference/reference/orders-controller-submit.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-submit +title: "OrdersController_submit" +description: "OrdersController_submit" +sidebar_label: "OrdersController_submit" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEElDiyuCuRCjlKkzX0PH2PPlkxlOJ8eLvb3H0yTWpGf878OOZ4I1yNXpFx9kyLRJx7jT4snCXvyhL9bWjSypCQolZeVUjog0hWG2FVhSIRRgspPN41xqMWCfkGpTBWJKJWVAgpQlZgpUSyEfRYs0Ugb+xatO0NG4ba2YCB16fjCX9oDJk3NSsSiRCtFLPxeHfhWpVGR92QK1OiluA8UIHAajAQ3BtXKsIACtImGIshgG9KHAopMmcJLbFbVdelyaKn0efAvje7ol36GbMYBc/xItNJRu+d//FjmdO4GwEp8EFVdclTv85Pbi9O//h0enkl5JudXpJKS4RKZYWxOPCodJyILwf2PeQoVRiCWv/gPTtRg9x5cBY5eJXzCLnBUofosQ8kc/E9n3oym6YznQ2m+Xg6mH34eTxIfzo6Hhzns3z6Sz6bjNMPO5taOO+xSw8VJvSb+ctQAQH9PfpBMBqhdGvW0r5kbNXF83nHL5XeSEGGoq5TdnmCpEx5Qm7HSZe7t89f9ER2Fm2k7xtYfjQhGLuWUKkyd77q8cOHmt1D5lGjJaPKsKdtT9u7aDvapW3eUME4ZYoYtLQhqDoAtwUvYlejj/POwoHzYCiAx+AanyGEzNUoYX5yMRhPjw73WO6xfBeWs10sr55/bFE/k6YdBrCOAB9MoFgXTTdxb4LhpJGL3GaKbxh7EvckvovE4++SCJmzeWkyCp38CCFXykCKEA5wuB6CAt10mCE01tw1CPeqbHBfFvcw/n8YWylIrbkdEi62TWwRMGu8ocfYJKWoPHqRrG6423m9y//utCqkwnEzVrvQdV5UiESMVG1G95NR967Rxuh2tLXpAsNaXmi4ZFQ7zJ6U9Pzynvop2Q9+c75SJBLx+59XnHEXanML8+UZfMFHIZ+SXBDVMV7G5i4mvw/R+eXyDJalIr4Ps91OXuMTB+c1WrgkZbXyGpbe6SYjOIv35bw/bIeQMW91720IH6+X3Q2G7zhsxGcJFs4GMtREZv/5e3aU9H7oUcK5XytrvkZ/QQLfoWT/OvSwcBqDhCipH/dSgoRr5Y2yPFoowrXzhtfnRN6kDfF4UaoQtnIlnLisqTCazBttiOsI56Pb+Hg4GY77yqIyriwcQM5upWJN6ZvpDgl4ZgK2+X0Vye2JI3ygUV0qY/lMNr7ktQ6XlVC1YRUTIZ/wlCKJ/Xrv9UaKgglLVmKzSVXAT75sW56+a9A/dizdcyxSzvBqI7QJPNYiyVUZcEfWtnSKg4v+OB3CMzuv5faTyjJdsfxyvy8F4xb/WGhvWikKVDoeoU2/MM8yrOmFyU6R5rO2PUPL81g2VcNB2QbuDfvR/Tf1bDbdE1fuC9q23coj/s4K2/Zfj9boBg== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_submit + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-update-status.ParamsDetails.json b/docs/api-reference/reference/orders-controller-update-status.ParamsDetails.json new file mode 100644 index 0000000000..0b55d89c9d --- /dev/null +++ b/docs/api-reference/reference/orders-controller-update-status.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"groupId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-update-status.RequestSchema.json b/docs/api-reference/reference/orders-controller-update-status.RequestSchema.json new file mode 100644 index 0000000000..71f1ef409c --- /dev/null +++ b/docs/api-reference/reference/orders-controller-update-status.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["PROCESSING","FULFILLED","PARTIALLY_FULFILLED","COMPLETED","CANCELLED"]}},"required":["status"],"title":"UpdateOrderGroupStatusDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-update-status.StatusCodes.json b/docs/api-reference/reference/orders-controller-update-status.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/orders-controller-update-status.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/orders-controller-update-status.api.mdx b/docs/api-reference/reference/orders-controller-update-status.api.mdx new file mode 100644 index 0000000000..bf74e946ec --- /dev/null +++ b/docs/api-reference/reference/orders-controller-update-status.api.mdx @@ -0,0 +1,69 @@ +--- +id: orders-controller-update-status +title: "OrdersController_updateStatus" +description: "OrdersController_updateStatus" +sidebar_label: "OrdersController_updateStatus" +hide_title: true +hide_table_of_contents: true +api: eJztmNtuGzcQhl+F4JUDUAfbapvsnSIrgQqnViU5RWEYBrUcSUx2yQ05dOwK+zx9jz5ZMeTqYCtImqLola5EccnhzM9vZzlcc1uBk6itGSme8SunwPmBNehsUYC7C5WSCFOUGDwXvJJOloDgPM9u1tzIEnjGteKCO/gUtAPFM3QBBNeGZ7ySuOKC+3wFpeTZmuNjRTM8Om2WvK7F1sjS2VCN/r2l2zQRPL626pFGPLeTW4NgkB7Jqip0HuPufPDWUN+BaTv/ADlS1I5UQg0+jktiHLggOJhQ8uyGjydXg+F0OvrlLRf8zfXlm9Hl5fCCCz7uT2aj/uXl73f7vYOrd+PL4Sy1+78MhrH/tq73pbjZrHsrOGosaOHruDlxz96SemmbLtDyuk6zfWWNT26fdbv0o8DnTlcUOc84rwXvfenBe1loFfVhC6kLUIJZx3AFrBGZ3WtbSATPJJsHrw14z1wooM3/M6XBOeu+PSy3Cr64HQ+yrKJQr/sXd5Phr9fD6YyLZ5FOUc4LYKXMV9pAy4FUsSMuzsh2m1QqwXu5/MY6B6qxhXXMGiDxSuuALTQUykeLjZD03n3Npjrtnc17Km+dLbpnrd7LH7ut+Q/nr1qvFr3F2U+L3ml3/vIgqIF1DtL24Er7JpjPGlfMg7sH1/JaASvsknx5BlrUcxfxvqd78A3J5AWg1EUi7qmRtHfPx08aIneM9rqnh/S9095rsxSslMXCurLBDx4qMs9yBwoMaln4I21H2r6LtvND2voBV4RTLpFAmwdkZQJwm/AidhW42G8NO7GOafTMgbfB5cB8bisQrH8xaXXPzl8csTxi+V1Y9g6xnO0+tqB2pCkLnhmLDB60x5gXdeq4117TpqGN3OaSTnBHEo8kfheJr75KIsutWRQ6R5/cjxBSpqTTKbATaC/bTDIVEmbAgtGfArB7WQQ4psUjjP8cxlpwlEsqNLmNZSnN8JAHp/Exlp9zkA4cz25uqfp7GuW3KtkScGWp5K1CpIbKy4x3ZKU796edtGBnrVXdiYWp76ybArXu+I2NJBd5uOfZlABO8G38a6imSJsu0TTeWFdK5Bn/+bcZcWB9pe9YfzxiH+GRi83WrxCrqCK9JZNdlTvckLCrSveLz5pq54WNDDVKX03HIzYuJNKxmhY6wCOOOLmqwLApSqOkU2zsrAo5slE8di+ad/YFywnbqrHWZu/ej9NBiI5KNIleSTawxqPGENH/68/eedbYwUfBrtxSGv1HtOcFo6OYaJYDxwZWgRcsutS0G1e8YO+l09JQayARltZpet5HdHoekNqDQnq/dVewC5uHEuKUflAaKR3RBqbAu+3TdrdJUDKnBEWKV9ZjKWNqai4qEllshxZLaLEtW08E3b6/CA/YqQqpDW1McAU9S9zdcFlpcuaUiw3sgmfxXiXhR393NyS7q4CV9Ujz1+u59HDtirqm7k8B3GPi8p5kmtPm36y50p7aimcLWXg4cHWbnPnJpHlhX7Adh09DaDqlIVJjgqcbBcEJ3XgpRLc7/+OKG33q21rwFUgVc8O6eTpIC7VmZGM3++AbRE6nGf08hwq/OvZ2L5GMr+kDMm8un8r44eFOfqYkKT8nR22MOyaH2LfmhTTLED8ePJkk6GQgKrbkPEsaMagvSrFepxEz+xFMXW+VQfpPutT13xB60AI= +sidebar_class_name: "put api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrdersController_updateStatus + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-add-legal-entity.ParamsDetails.json b/docs/api-reference/reference/organizations-controller-add-legal-entity.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-add-legal-entity.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-add-legal-entity.RequestSchema.json b/docs/api-reference/reference/organizations-controller-add-legal-entity.RequestSchema.json new file mode 100644 index 0000000000..79cf67d7b6 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-add-legal-entity.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code"},"vatNumber":{"type":"string"}},"required":["name","country"],"title":"CreateLegalEntityDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-add-legal-entity.StatusCodes.json b/docs/api-reference/reference/organizations-controller-add-legal-entity.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-add-legal-entity.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-add-legal-entity.api.mdx b/docs/api-reference/reference/organizations-controller-add-legal-entity.api.mdx new file mode 100644 index 0000000000..e10f754798 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-add-legal-entity.api.mdx @@ -0,0 +1,69 @@ +--- +id: organizations-controller-add-legal-entity +title: "OrganizationsController_addLegalEntity" +description: "OrganizationsController_addLegalEntity" +sidebar_label: "OrganizationsController_addLegalEntity" +hide_title: true +hide_table_of_contents: true +api: eJztmNtuGzcQQH9lwKcEWF2tponeFNkFXDS1YzvpgyAEo+VIYsIlN+SsYlfY7+l/9MuK4a4t2QpyAfqoJ1O8DOdyZszZrfIlBWTj3blWY3URVujM32kiTr3j4K2l8AG1/oNWaM8cG75TmSoxYEFMIarxbJ6pQJ8rivza6zs13qafJpBWYw4VZSr3jsmxLGFZWpOnG3ofo3cyF/M1FSgjvitJjZVffKSc5Z4gCrKhKKsOC9rbFTkYt1K1yK8ch7vDtUxpinkwpdynxur8+gJOBi9edAaAtlxjZwjtWci9JpG1Qf6zKhYUvnJTne2ZNmv02d0+zxQbtnJgGgiZ9nx2yl7VdSMglt7FxqJhfyB/HispWoz6/cOF92iNTq6DJRpLOgMfgNcErf9hY7xFpggIiyoaRzFCqCx11f8WBArBh+9vS+78SjzoFosy+ej15PTD1dnbd2fXNwdxumZcWIIC87Vx1AmEOk2ky1OouuKlgmLE1XfuOfAaLH0A70icV/hAsDRkdUwSW0dKNnxLph6MhouRzjvDZX/YGb180e8sfjl51Xm1HC2Hvy5Hg/7i5YFRUx8CNeHhtYmtMV8MryFS2FDoRKMJrF+JLk9YS/7cWbyv6R53ZyLylBiNbYh7LKSJ3dP9Vy2RO0ZHX8PyjYnRuFUGBdqlD0WLH92WIh7yQJocG7TxSNuRtp+i7eSQtknFa8EpRxbQFhVD0QD4UPASdiWFNO8dPPMBDEcIFH0VcoKY+5IymJxedfrDk+dHLI9Y/hSWo0Msb3b/bEnvSNOeIjjPQLcmcqqLppnYmGgkaOwTtznKg+pI4pHEnyLx1TdJhNy7pTU5x0b9BKFUysjIBM+ou+oCgq4azAgqZz5XBBu0FR3L4hHGH4exzhTjSro+5febRTkYKa+C9Ifj2VYtCIP0ULN5PX9q7A+3mQXx2ktjWvqYMEJeq7HqYWl6m0HvkQa9gnpWTnfk2ZBQE5XEd22Teq/ftdDckHivZYu4mN1OZe3gNx8KZDVWv/91I1D4WJoPMLk8h08kKrYcrJnL5FJJmatdN3x2j8V997oj5qFp3U3t9Z573a1xS5+QawNzcX15DpcWWV7hosoBTWnHs4uSHFwzOo1Bw2XwusoZztMrfdmm+HPIhfKyldaFN+8vm3eTvKzkkGQwTL2LbLhKmfLvP6OTcSuH7zJ4FM4M5OWWtddRgKnXFDNIKrXjVpWYwXsMBp2Mpsi08sHI+oQ5mEXFMp5ajPFB3QxOfV4VlI5MKm1YqpeEuDG83x10+209w1zqmcRE6CnQ7QXhkcqwQxBQa0gMwgOEj1z7kPhMt9wrLRonIaqClbWGz5nC0ohaA5U9yRJBWmXqCafzTK0F8PFMbbcLjPQu2LqW6c8VCSFC70ZctRAAZvM6U2tCnfJrqwREqSCphHduRD/ZbivR86Cc19n9iUmeU8nf3Dvfy8HLi1SMF+03niIVcRXwixQc/CIfLjLly8ZQ+Qgkc1tl0a2qVIhVI1MigpU46sGZT3IuWdUuobvb03C7bXbc+E/k6lplrSksv1U9r+v6P2k2eWY= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrganizationsController_addLegalEntity + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-get-own.ParamsDetails.json b/docs/api-reference/reference/organizations-controller-get-own.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-get-own.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-get-own.RequestSchema.json b/docs/api-reference/reference/organizations-controller-get-own.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-get-own.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-get-own.StatusCodes.json b/docs/api-reference/reference/organizations-controller-get-own.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-get-own.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-get-own.api.mdx b/docs/api-reference/reference/organizations-controller-get-own.api.mdx new file mode 100644 index 0000000000..f1d15a8374 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-get-own.api.mdx @@ -0,0 +1,69 @@ +--- +id: organizations-controller-get-own +title: "OrganizationsController_getOwn" +description: "OrganizationsController_getOwn" +sidebar_label: "OrganizationsController_getOwn" +hide_title: true +hide_table_of_contents: true +api: eJztl9tu4zYQhl9lwKssQB/jthvduU5apMAi2TibXgRBQFEjmbsSqZAjb1xDz9P36JMVQylHF5vm3lemeRj+M/NxRG6Fq9ErMs6eZiIRZ75Q1vwVO8LCWfKuLNHfFkhn362QolZeVUjog0iub6TwGGpnAwaRbMV0POafDIP2pmYbIhGilWL2XwNXqjRZ3AlyZUrMJDgPtELweNdgIFgbVyrCAArSJhiLIYBvShwKKbSzhJbYrKrr0uhoafQ1sO2tCHqFleIWbWoUiXDpV9TEHnh2mUwnGb13/u1p2mX4bFYgb2whpMB7VdUld/06P769OPn85WR5KeQrT5ek0hKhUnplLA48qix2xM2BbQ85ShWGoIo39tmJGuTOg7PIwaucR8gNllmIFvtAcmp/ZDObzKbpLNODaT6eDmYffx4P0p8OjwZH+Syf/pLPJuP0445TC+c9dumhlQm9M98NrSCgX6MfBJMhlK5gLb0Y4zETyXUXzyePnyu9kYIMRV0nbPIYSZnymNyOkS53r+df9ER2K9pI32SXvk8mBGMLCZUqc+erHj+8r9k8aI8ZWjKqDHva9rS9i7bDXdrmDa0YJ62IQUsbgqoD8LHgRexq9LHfWThwHgwF8Bhc4zVC0K5GCfPji8F4evhhj+Uey3dhOdvF8vLpY4vZE2mZwwDWEeC9CRTrouk61iYYThq5yK1WfDvYk7gn8V0kHv2QRNDO5qXRFDr5EUKulIEUIRzgsBiCgqzpMENorLlrENaqbHBfFvcw/n8YWylIFfyUEe75y4cXBtSNN7QRyfVWpKg8en7ytDevnX3zzVQhrRy/rgqM9ChaiUSMVG1G68noxcajih3uYtS/sB50LJnajrgHNT3K7F7fJfvGb85XikQi/vjzkpPvQm1uYX5+Ct9wI+RDvldEdQydsbmLHPTROluen8J5qYivxrxuJ8VxxsFZjRaWpGymfAbn3mWNJjiNV+e8P3cfQDN6dW9tCJ+uzrvLDF93eBEfK1g4G8hQE/H95+/ZYdLboY2EFzGWwNcp2W+HHhYuwyAhSurbvZQg4Up5oyy3FoqwcN7w+JzIm7Qhbi9KFcKjXAnHTjcVxiXzJjPEJYXz0Tk+Hk6G477IKM1FhgNYu0CViuXFqpiRF5LhiQsokKAD40VEHw8h4T2N6lIZy8e08SWPddBcC1UbVjMR8hWxjBlju3KBeOJ2m6qAX3zZttx916DfdECtOSApp/n6ppVihSqLaG8Fs5GIudZYM6ixoIpkt4byGXiE+vcTLmqqYX2PPrzCMVrvh5TdPLO93XYzLt03tG0rZC+C+L9ob9q2/Rd5vbYA +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrganizationsController_getOwn + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-invite-user.ParamsDetails.json b/docs/api-reference/reference/organizations-controller-invite-user.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-invite-user.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-invite-user.RequestSchema.json b/docs/api-reference/reference/organizations-controller-invite-user.RequestSchema.json new file mode 100644 index 0000000000..d7aaa91ea5 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-invite-user.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"roleIds":{"description":"Role IDs to assign — at least one is required.","type":"array","items":{"type":"string"}}},"required":["email","roleIds"],"title":"InviteUserDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-invite-user.StatusCodes.json b/docs/api-reference/reference/organizations-controller-invite-user.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-invite-user.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-invite-user.api.mdx b/docs/api-reference/reference/organizations-controller-invite-user.api.mdx new file mode 100644 index 0000000000..6c479ca267 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-invite-user.api.mdx @@ -0,0 +1,69 @@ +--- +id: organizations-controller-invite-user +title: "OrganizationsController_inviteUser" +description: "OrganizationsController_inviteUser" +sidebar_label: "OrganizationsController_inviteUser" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uGzcQgK8y4FMCUJZsq22iN8V2ARVI7dpO+iAIwWh3JDHhkhty1rEqLNBD9A69R4/SkxTDXVmyZDgJ0Ee9rYbkcH4+jjhcKV9SQDbejXI1UJdhjs78kQTxzDsO3loKH4y7M0zvIgWlVYkBC2IKUQ3GE60Cfa4o8hufL9VglX6aQLkacKhIq8w7JscyhGVpTZa0dz9G70QWswUVKF+8LEkNlJ9+pIxlnyDGsaEoo1SgsVvTIgfj5qrWamZC5F+xoCdHLT4zGLylUZ705xSzYEqxTQ3UtbcEo/MI7AFjNHMH//75FyCDJYwM3hGYCGtfj5ReK8cQcKm0MkxFfGLTutZbIRq3fm1MmWjFhq0sGT1E/Zy9rExLY+ldbGJy0jveN1386vd6+wPv0Zo8BR9maCzlGnwAXhC0GYQ74y0yRUCYVtE4ihFCZUnc+7/SGIIPX5+W+fyJjGlF91iUKThvhucfri9+e3dxc6v0jqc3jFNLUGC2MI46gTBPgrQ5iO4jiVJBMeL8K/vsRQ1mPqT8+wCFDwQzQzaPSWMbSDlLz+nMj/sn036edU5mvZNO/9WPvc70h9PXndez/uzkp1n/uDd9tefUmQ+BmvTwwsTWmS+GFxAp3FHoRJMTWD8XW3YoS/HceLxt6RZwF6LynBiNbYjbQTXlbnf+dUvkhtH+U1i+NTEaN9dQoJ35ULT40X0p6iELlJNjgzYeaDvQ9l20ne7TNqx4IThlyALatGIoGgAfCl7CrqSQ5N7BCx/AsNT06KuQEcTMl6RheH7d6Z2cvjxgecDyu7Ds72N5u/mzpXxDWu4pgvMMdG8ip7poGsGdiUaSxj5xm6Fcxw4kHkj8LhJfP0siZN7NrMk4NuYnCKVSRkYmeEFH8yNAyKsGM4LKmc8VwR3aig5l8QDjt8NYa8U4l75R+e1WUxZGyqpgeKkG45WaEgYK0l/Wk11nv6lJLYgXXlra0seEEPJCDVQXS9O9O+4+2r1bULeK0s+KFRKutrNdm3QjADfwrQ1rqRZPW5FuP372oUBWA/XL77fCgY+l+QDDqxF8ouWmT1wwlymKckquNy30xZqEh5Z3Q8lWp7sRbhrcjeyhrx2vZZNaK+NmPsHXpujy5moEVxZZ7uNi4R5XacaLy5Ic3DC6HEMOV8HnVcYwSvf1WXvYX0ImvJettiN4+/6quUHJHUsWyVmGM+8iG67Smfnn7/7poNXDSw2PEqtB7nC63Y4CnPmcooZkUvvdmhI1vMdg0MnXGTLNfTAyPmQOZlqxfJ9Z6ePX5mo491lVUFoyrHLDUsck843jvaPjo15b2TCTyiapEpYKTDXNNRF/ZDJsYIQGRmhpfBTVh9PPdM/d0qJxUh+qkJ43GlDHCksjFh0rvXNUhG2lVQPsRKuFAD4Yq9VqipHeBVvXIv5cUVg2GN9JcKaS8rFgsCDM09laKSFSqkcq351bMUum2yq9ZOyW8lqvVwyzjEp+du5k6wxeXaZCPG1fiIpUwFXAL4IqfpFHC6182fgnT0giWymLbl6lIqwanZIDrCQ+DzHcOXzJq/VLjFtuWbhaNTNu/Sdyda106wrLb1VP6rr+D2Xcjd8= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrganizationsController_inviteUser + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-legal-entities.ParamsDetails.json b/docs/api-reference/reference/organizations-controller-list-legal-entities.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-legal-entities.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-legal-entities.RequestSchema.json b/docs/api-reference/reference/organizations-controller-list-legal-entities.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-legal-entities.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-legal-entities.StatusCodes.json b/docs/api-reference/reference/organizations-controller-list-legal-entities.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-legal-entities.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-legal-entities.api.mdx b/docs/api-reference/reference/organizations-controller-list-legal-entities.api.mdx new file mode 100644 index 0000000000..4120b560a6 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-legal-entities.api.mdx @@ -0,0 +1,69 @@ +--- +id: organizations-controller-list-legal-entities +title: "OrganizationsController_listLegalEntities" +description: "OrganizationsController_listLegalEntities" +sidebar_label: "OrganizationsController_listLegalEntities" +hide_title: true +hide_table_of_contents: true +api: eJztl81u4zYQx19lwFMWoD/jthvdXCctUnSxaZJND4ERUNLI4i5FKuTIG9fQ8/Q9+mTFUMqXXew2d59Mk5zhf4Y/jsitcDV6RdrZ81wk4qNfKav/ih1h4Sx5Zwz6O6MD/Y4rZc4sadIYhBS18qpCQh9EcruUwmOonQ0YRLIV0/GYf3IMmdc1uxOJEK0Us/8auFFG53FRKJQ2mEtwHqhE8HjfYCBYa2cUYQAFaRO0xRDANwaHQorMWUJL7FbVtdFZ9DT6HNj3VoSsxEpxizY1ikS49DNmxBF4jj6Gk2wFeu/896dlLscXswJ5bVdCCnxQVW246+f56d3l2R+fzq6uhdyJ9IpUahAqlZXa4sCjymNHXBzY95CzVGEIavWddfayBoXz4Cxy8irnEQqNJg/RY59I3uVv+cwns2k6y7PBtBhPB7P3P44H6Q/HJ4OTYlZMfypmk3H6fi+ohfMeu+2hUoc+mK+aSgjo1+gHQecIxq1YSy9Ge8xFctvl8znil0qXUpCmqOuMXZ4iKW1Oye056fZud/5lT2Rn0Ub6Jvv0fdAhaLuSUClTOF/1+OFDze4h85ijJa1MONB2oO1NtB3v0zZvqGScMkUMWtoQVB2ATwUvYlejj/3OwpHzoCmAx+AanyGEzNUoYX56ORhPj98dsDxg+SYsZ/tYXj9/bDF/Ji13GMA6AnzQgWJd1F3HWgfNm0YucpspvigcSDyQ+CYST75JImTOFkZnFDr5EUKulIEUIRzhcDUEBXnTYYbQWH3fIKyVafBQFg8w/n8YWylIrfgpI9zLRxAbBswar2kjktutSFF59PzkaZe7wb7l+VQhlY7fXCuMICkqRSJGqtaj9WT0SsOowpFh8wE+23fZ699ejwqvmOeOxUedPeQceN8l+8YvzleKRCJ++/OasXCh1ncwvziHL7gR8pGEkqiOSdW2cJGQPo8fry7O4cIo4ksz2+1tfpxx9LFGC1ekbK58Dhfe5U1GcB4v1UV/It9BxlDWvbchfLi56K45fBFiIz5wsHA2kKYmgv3P37PjpPdDGwmvsi+BL1qyXw49LFyOQUKU1Ld7KUHCjfJaWW4tFOHKec3jcyKv04a4vTAqhCe5Ek5d1lQYTeZNromLDe9HF/h4OBmO+/KjMi4/nMDaBapULDxWxR15JRmeiQEmBiIy8IKZV9l9OqqEDzSqjdKWD3PjDY91PN0KVWtWNhFyh2smUEixw9VSitIFYsvtNlUBP3nTttx936DfdLStOVspM3C7bKUoUeXxRGwFg5OIeZZhzVDHOiyS/dLLR+fpAPx6xrVQNSz4KagdVqP3fkjZzQvf220349p9Qdu2QvYiiP+Ldtm27b8IBs9D +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrganizationsController_listLegalEntities + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-roles.ParamsDetails.json b/docs/api-reference/reference/organizations-controller-list-roles.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-roles.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-roles.RequestSchema.json b/docs/api-reference/reference/organizations-controller-list-roles.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-roles.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-roles.StatusCodes.json b/docs/api-reference/reference/organizations-controller-list-roles.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-roles.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-roles.api.mdx b/docs/api-reference/reference/organizations-controller-list-roles.api.mdx new file mode 100644 index 0000000000..8f2ff0b6f5 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-roles.api.mdx @@ -0,0 +1,69 @@ +--- +id: organizations-controller-list-roles +title: "OrganizationsController_listRoles" +description: "OrganizationsController_listRoles" +sidebar_label: "OrganizationsController_listRoles" +hide_title: true +hide_table_of_contents: true +api: eJztl9tu2zgQhl9lwKsUoI/x7ja68zrZRRYokk3S7EVgBJQ0sthSpEKO3HgNPc++R5+sGEo5etE2974yzcPPOXwckVvhavSKtLOnuUjEmV8pq/+NHWHhLHlnDPpbowNdOINBSFErryok9EEkN0spPIba2YBBJFsxHY/5J8eQeV2zjEiEaKWY/d/AtTI6j5tBobTBXILzQCWCx7sGA8FaO6MIAyhIm6AthgC+MTgUUmTOElpiWVXXRmdRafQpsPZWhKzESnGLNjWKRLj0E2bEHnj2mnRnMnrv/I+nZS7HZ7MCeW1XQgq8V1VtuOv3+fHtxcnfH08ur4R85eklqdQgVCortcWBR5XHjrg5sPaQo1RhCGr1g312ogaF8+AscvAq5xEKjSYPUbEPJGf3e5r5ZDZNZ3k2mBbj6WD2/tfxIP3l8GhwVMyK6W/FbDJO3+84tXDeY5ceKnXonfmiqYSAfo1+EHSOYNyKbemN0R5zkdx08Xzy+LmlSylIU7TrhCWPkZQ2x+R2RLrcvZ5/0RPZrWgjfZNd+j7oELRdSaiUKZyvevzwvmZ5yDzmaEkrE/a07Wl7E22Hu7TNGyoZp0wRg5Y2BFUH4GPBi9jV6GO/s3DgPGgK4DG4xmcIIXM1SpgfXwzG08N3eyz3WL4Jy9kulldPH1vMn0jLHQawjgDvdaBYF3XXsdZBc9LIRW4zxReEPYl7Et9E4tF3SYTM2cLojEJnfoSQK2UgRQgHOFwNQUHedJghNFbfNQhrZRrcl8U9jD8PYysFqRU/ZYR7/vjhhQGzxmvaiORmK1JUHj0/edrla2d/5tlUIZWO31grjAApKkUiRqrWo/Vk9GLvUYUj3y/rgtU/tR4MumR8O/QezOqZZj/7Ltk3/nC+UiQS8dc/V0yBC7W+hfn5KXzGjZAPiS+J6hhDbQsXgejDdnZ5fgrnRhHfkXndTq7jjIOzGi1ckrK58jmce5c3GcFpvEMX/QF8BxkzWPdqQ/hwfd7davjew4v4fMHC2UCamsjx1/9mh0mvQxsJL4Itge9Vst8OPSxcjkFCNKlv96YECdfKa2W5tVCEK+c1j8+JvE4b4vbCqBAezZVw7LKmwrhk3uSauLZwPjrHx8PJcNxXG5VxteEA1i5QpWKdsSpm5IXJ8AQIMCDwQMiLoD4eSMJ7GtVGactHtvGGxzp6boSqNRs0EfIVvcwbn5sovZSidIF4wXabqoAfvWlb7r5r0G86ttYcm5QzfrNspShR5RH3rWBMEjHPMqyZ3FhkRbJbV/lcPFL+5wkXOtWwnY++vCIzqvdDym6eaW+33Ywr9xlt2wrZG0H8X7TLtm2/AcLPvtA= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrganizationsController_listRoles + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-users.ParamsDetails.json b/docs/api-reference/reference/organizations-controller-list-users.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-users.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-users.RequestSchema.json b/docs/api-reference/reference/organizations-controller-list-users.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-users.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-users.StatusCodes.json b/docs/api-reference/reference/organizations-controller-list-users.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-users.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-list-users.api.mdx b/docs/api-reference/reference/organizations-controller-list-users.api.mdx new file mode 100644 index 0000000000..3fec33b3f8 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-list-users.api.mdx @@ -0,0 +1,69 @@ +--- +id: organizations-controller-list-users +title: "OrganizationsController_listUsers" +description: "OrganizationsController_listUsers" +sidebar_label: "OrganizationsController_listUsers" +hide_title: true +hide_table_of_contents: true +api: eJztl9tu4zYQhl9lwKssQB/jthvduU5apMAiaU69CIyAkkYWdylSIUfeuIaep+/RJyuGUo4udjf3vjLFw/CfmY9jcitcjV6RdvY0F4k48ytl9d+xIyycJe+MQX9ndKDrgD4IKWrlVYXEH8ntUgqPoXY2YBDJVkzHY/7JMWRe12xGJEK0Usz+b+BGGZ3HzaBQ2mAuwXmgEsHjfYOBYK2dUYQBFKRN0BZDAN8YHAopMmcJLbFZVddGZ9HS6HNg21sRshIrxS3a1CgS4dLPmBF74Nlr0p1k9N7570/LXI4vZgXy2q6EFPigqtpw16/z47uLkz+vTy6vhHzj6SWp1CBUKiu1xYFHlceOuDmw7SFHqcIQ1Oo7++xEDQrnwVnk4FXOIxQaTR6ixT6QnN1v2cwns2k6y7PBtBhPB7OPP48H6U+HR4OjYlZMfylmk3H6ccephfMeu/RQqUPvzFdNJQT0a/SDoHME41aspRejPeYiue3i+ezxS6VLKUhT1HXCJo+RlDbH5HaMdLl7O/+iJ7Jb0Ub6Jrv0fdIhaLuSUClTOF/1+OFDzeYh85ijJa1M2NO2p+1dtB3u0jZvqGScMkUMWtoQVB2ATwUvYlejj/3OwoHzoCmAx+AanyGEzNUoYX58MRhPDz/ssdxj+S4sZ7tYXj3/2WL+TFruMIB1BPigA8W6qLuOtQ6ak0YucpspviDsSdyT+C4Sj75JImTOFkZnFDr5EUKulIEUIRzgcDUEBXnTYYbQWH3fIKyVaXBfFvcw/jiMrRSkVvyUEe7l44cXBswar2kjktutSFF59PzkaZdvnf2RZ1OFVDp+Y60wAqSoFIkYqVqP1pPRq71HFY6aflkXrP6p9SjokvHt0HuU1TPNfvZdsm/85nylSCTij7+umAIXan0H8/NT+IIbIR8TXxLVMYbaFi4C0Yft7PL8FM6NIr4j87qdXMcZB2c1WrgkZXPlczj3Lm8ygtN4hy76A/gBMmaw7q0N4dPNeXer4XsPL+LzBQtnA2lqIsf//jM7THo7tJHwKtgS+F4l++3Qw8LlGCRESX27lxIk3CivleXWQhGunNc8PifyOm2I2wujQniSK+HYZU2Fccm8yTVxbeF8dI6Ph5PhuK82KuNqwwGsXaBKxTpjVczIK8nwDAgwIPBIyKugPh1Iwgca1UZpy0e28YbHOnpuhao1C5oI+YZe5k1I0VG0lKJ0gXjBdpuqgNfetC133zfoNx1ba45Nyhm/XbZSlKjyiPtWMCaJmGcZ1kxuLLIi2a2rfC6eKP/9hAudaljnky9vyIzW+yFlNy9sb7fdjCv3BW3bCtmLIP4W7bJt2/8ACKG/EQ== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrganizationsController_listUsers + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-update.ParamsDetails.json b/docs/api-reference/reference/organizations-controller-update.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-update.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-update.RequestSchema.json b/docs/api-reference/reference/organizations-controller-update.RequestSchema.json new file mode 100644 index 0000000000..bfedfc1405 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-update.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","enum":["PENDING","ACTIVE","SUSPENDED","ARCHIVED","DELETED"]}},"title":"UpdateOrganizationDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-update.StatusCodes.json b/docs/api-reference/reference/organizations-controller-update.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-update.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/organizations-controller-update.api.mdx b/docs/api-reference/reference/organizations-controller-update.api.mdx new file mode 100644 index 0000000000..be290dc0ae --- /dev/null +++ b/docs/api-reference/reference/organizations-controller-update.api.mdx @@ -0,0 +1,69 @@ +--- +id: organizations-controller-update +title: "OrganizationsController_update" +description: "OrganizationsController_update" +sidebar_label: "OrganizationsController_update" +hide_title: true +hide_table_of_contents: true +api: eJztmF9vGzcMwL+KwKcUkB0n8db23lzbWz2srRc72UMQFPKJ9qm9k64SL01m3OfZ99gnG6i7+E9cpCuwRz9FoSSKIn+kxVuDK9ErMs5ONCTwwa+UNX9FQRg6S97lOfqPVakVIUgolVcFEvoAyc0arCoQEjAaJHj8UhmPGhLyFUowFhIoFWUgIaQZFgqSNdBDyTsCeWNXUNe3zUYM9MbpB17xVE/qLKElnlJlmZs0Wnf6KTjLsgPVbvEJU2JbPV+ODAaebUw9MEBCIEVVOJySgLYqILmB6fj9aPL+V5AwGM4n12OQMLuasXQ8YuHl8O3kOg5H49/H8/EIbutaAhnKWd9VdN6ua0fkoK55jcdQOhsaE897Pf6jMaTelLwQEmAT+9+auFa50VGdWCqTo5bCeUEZitah4s64XBEGocSiCsZiCMJXOXbhf/Mqeu/895elTn/D+RLwXhVldNKbwejj5fiPq/FsDvLJTWekFjmKQqWZsdjxqHQUxMMF6+6ylwoMQa2+c86B18TSeeEssvMK51EsDeY6RI2tIzk1ntOpz/rni75OO+fL3nmn/+rnXmfx08Xrzutlf3n+ctk/6y1eHVxq6LzHJjyUmdBe5quhTAT0d+g7wWgUuVuxLfVuft00/tzeeNfS2y14Y1Y5QlImb4jbV9LE7un6y5bILaP93tkhfe9MCMaupChUvnS+aPHD+5LVi9SjRktG5eFI25G2H6Lt4pC2QUUZ45QqYtAWFYmiAXBT8CJ2Jfood1acOC8MBeExuMqnKELqSpRiMLrs9M4vXhyxPGL5Q1j2D7Gcb39sUW9J0w6DsI4E3ptAsS6aRnBnguGgkYvcpopfV0cSjyT+EImvnyVRpM4uc5NSaMyPEHKl5IcuihPsrrpCCV01mKGorPlSobhTeYXHsniE8b/DyE2OWnErCG63c+SNAdPKG3qIfeIClUcPyc0tN3z7l/1uz1kgZU43zWSaxSaUMkjgVJXm9O7sdO/o07XRNXec0U9s2o4tMya3oe7RohZnvmIrku3gF+cLRZDAb3/OGQAXSvNRDKYT8RkfQD7GPCMqo/s4PS63rez4EYFNl7yh47Hj3DSWNXfLSxdJav39YTadiGmuiB/XfOoBJHHFyYcSrZiRslp5Labe6SolMYmP72WbuS9EyvCWrbaueHc9bZ5D/GDiTZyYYuhsIENVTIB//u5fJK0eepBiL0pS8INMtsehF0OnMUgRTWrHrSlBimvljbI8GirClfOG5wdE3iwq4vEwVyFszJVi5NKqwLhlUGlDXJQ4ms3Fe92zbq8tUyrlMsXuL12gQtkdf++ZLLZkiQ1Zew7dZDHhPZ2WuTKWA1P5nOca5m5AlYaNOQP5BHkJiYkZlrlAvHK9XqiAVz6vaxZ/qdA/NDjesUMWHOabNWgTeKwhWao84IFRm2IMJ5dtgr4QW/z2jW2FyjKgsaDzFwQJTGz8TFPf1hIyVDpm47qdGDZndOa8fbvxoPjX8nHHIE2xpGfX3u5k7nQwH77lzGq/8RSx5oNXX7k+qa+Nla5sXMkfgVi2hlzZVRXrNjRKOdKq4lBswvUkbeO1vumH9bpZMXef0db1xi3E/7Nn6vpfBbmFew== +sidebar_class_name: "patch api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +OrganizationsController_update + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/ospi-platform-api.info.mdx b/docs/api-reference/reference/ospi-platform-api.info.mdx new file mode 100644 index 0000000000..73b0d77a3b --- /dev/null +++ b/docs/api-reference/reference/ospi-platform-api.info.mdx @@ -0,0 +1,82 @@ +--- +id: ospi-platform-api +title: "OSPI Platform API" +description: "OSPI (Open Standard Product Identification) core platform. MVP scope per Project Constitution §43: Identity, Organizations, Auth, Producer Codes, OSPI Codes, Products, Variants, Categories, Attributes, Classification, Documents, Audit." +sidebar_label: Introduction +sidebar_position: 0 +hide_title: true +custom_edit_url: null +--- + +import ApiLogo from "@theme/ApiLogo"; +import Heading from "@theme/Heading"; +import SchemaTabs from "@theme/SchemaTabs"; +import TabItem from "@theme/TabItem"; +import Export from "@theme/ApiExplorer/Export"; + + + + + + + + + +OSPI (Open Standard Product Identification) core platform. MVP scope per Project Constitution §43: Identity, Organizations, Auth, Producer Codes, OSPI Codes, Products, Variants, Categories, Attributes, Classification, Documents, Audit. + +
+ + + + + + + +
+ + + + + + + + + + +
+ Security Scheme Type: + + http +
+ HTTP Authorization Scheme: + + bearer +
+ Bearer format: + + JWT or ospi_ API key +
+
+
+
+
+ \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-get-inventory.ParamsDetails.json b/docs/api-reference/reference/partner-controller-get-inventory.ParamsDetails.json new file mode 100644 index 0000000000..a63581de43 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-get-inventory.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-get-inventory.RequestSchema.json b/docs/api-reference/reference/partner-controller-get-inventory.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/partner-controller-get-inventory.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-get-inventory.StatusCodes.json b/docs/api-reference/reference/partner-controller-get-inventory.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-get-inventory.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-get-inventory.api.mdx b/docs/api-reference/reference/partner-controller-get-inventory.api.mdx new file mode 100644 index 0000000000..0b89dfec18 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-get-inventory.api.mdx @@ -0,0 +1,69 @@ +--- +id: partner-controller-get-inventory +title: "PartnerController_getInventory" +description: "PartnerController_getInventory" +sidebar_label: "PartnerController_getInventory" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQgF9lwFMC0L9x241urpMWKbCIm2TTQxAEtDSyuSuRCjnyxhX0PH2PPlkxlGI70WLToEBPPpnmz/zx44jDStgCnSJtzUUiIjFXjgy6mTXkbJahe1giXZg1GrJuI6QolFM5EjovortKGJWjiIR1S2X0n89ypHD4WGqHiYjIlSiFNiIShaKVkMLHK8yViCpBm4JXe3LaLEVdy63AwtmkjOk/yLrnhb6wxqPn8fFwyD8J+tjpgg0VkRC1FJNvDdyqTCfBHUiVzjCRYB3QCoGtQU+w1jZThB4ULEqvDXoPrsywL6SIrSE0xGJVUWQ6DpIGnz3LrrpG28VnjImj63g7SDcmo3PWvT0ttgl2IyAFPqm8yLjr5+nZw9X575/Or2+EfOXpNalFhpCreKUN9hyqJHQE5cCy+xylHL1Xyzf0dKIGqXVgDXLwcusQUo1Z4oPENpCM3fdkJqPJeDFJ4t44HY57kw8/DnuLH05Oe6fpJB3/lE5Gw8WHjlMz6xw220Mr7VtnvmpagUe3RtfzOkHI7JJtqfcZu2viufN439J7KUhTsOucRZ4hKZ2dke0Iafbu9fyrlshmRR3oG3Xp+6i912YpIVdZal3e4odPBYuH2GGChrTK/IG2A23vou2kS9u0pBXjFCti0BYlQd4AuE14AbsCXei3Bo6sA00eHHpbuhjBx7ZACdOzq95wfHJ8wPKA5buwnHSxvNl9bDHZkZZY9GAsAT5pTyEv6qZjrb3mTSMbuI0V318OJB5IfBeJp98lEWJr0kzH5BvzA4ScKT0pQjjC/rIPCpKywQyhNPqxRFirrMRDWjzA+O9hrKUgteQyi4sursp4ice4dJo2ofpaoHLoRHR3z+XOSzffrORypJXlmm+JgRsuqCIxUIUerEeDVuVgv7Lzg+ploVcP2jrND6ptxVYP9J6WJqTsxZ7x1wx5A+izCy35HI22S7aNX6zLFYlI/PbHDbNifaEfYDq/gC/IGlo8VkRFiLQ2qQ3YtMG9vJ5fwDxTxDdpXtchIsw4uizQwDUpkyiXwLxxBy7CTTttj+kxxExq0Urrw8fbeXP34dsRL+JTCDNrPGkqA+1//zU5iVo5tJFwuR9RCXz7kq06dDCzCXoJwaS23ZriJdwqp5Xh1kwRLq3TPD4lcnpRErdnmfJ+a66EMxuXOYYl0zLRxBmI96NxfNgf9YdtTlIx5yQOYGE95Spko7Yab1mCHUywRIJ9ml5EdHtmCZ9oUGRKGz7Vpct4rCHtTqhCszWj5lUhAC5fvCR4IUXUeVp4Ro4H958JdtTdS7GynlhHVS2Ux08uq2vufizRbRoW1xzLBRNyV4lEe24nIkpV5rHjzjZpi6Or9iAfw469l262ncpwXELi55cGKRjXzlMJv3n8j9p3AavvaylWqJKQQKp2fBrHWNDeys43ijPNNnX8es4fDVXyhm43/dX5DdK/aVVVNTNu7Bc0db01kvg/G1jX/wBeEGYJ +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +PartnerController_getInventory + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-get-product.ParamsDetails.json b/docs/api-reference/reference/partner-controller-get-product.ParamsDetails.json new file mode 100644 index 0000000000..a63581de43 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-get-product.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-get-product.RequestSchema.json b/docs/api-reference/reference/partner-controller-get-product.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/partner-controller-get-product.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-get-product.StatusCodes.json b/docs/api-reference/reference/partner-controller-get-product.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-get-product.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-get-product.api.mdx b/docs/api-reference/reference/partner-controller-get-product.api.mdx new file mode 100644 index 0000000000..4345154614 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-get-product.api.mdx @@ -0,0 +1,69 @@ +--- +id: partner-controller-get-product +title: "PartnerController_getProduct" +description: "PartnerController_getProduct" +sidebar_label: "PartnerController_getProduct" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMWKbBImmTTQxAEtDSyuCuRCjnyJhX0PH2PPlkxlGI70WLToEBPPpnmx/DP4Y8jDmthS3SKtDVniYjEhXJk0C2sIWfzHN39CunC2aSKSUhRKqcKJHReRLe1MKpAEQnrVsroP5+tSOHwodIOExGRq1AKbUQkSkWZkMLHGRZKRLWgp5JHe3LarETTyI3Bsp3wP9i644G+tMaj5/bpeMw/CfrY6ZKFikiIRorZtxpuVK6TsBxIlc4xkWAdUIbAatATrLXNFaEHBcvKa4Peg6tyHAopYmsIDbFZVZa5joOl0WfPtuu+aLv8jK13HW8G6VYyOmfd291im2DfA1LgoyrKnKt+np/cX57+/un06lrIVyu9IrXMEQoVZ9rgwKFKQkWYHNj2kL1UoPdq9cY8Pa9Bah1Yg+y8wjqEVGOe+GCxcyRD9z2byWQ2Xc6SeDBNx9PB7MOP48Hyh6PjwXE6S6c/pbPJePmht6iFdQ7b7aFM+24xXzVl4NGt0Q28ThByu2ItzS5jt60/tyveVXonBWkKuk7Z5AmS0vkJ2Z6Rdu9e97/siGxHNIG+SZ++j9p7bVYSCpWn1hUdfvhYsnmIHSZoSKvc72nb0/Yu2o76tM0ryhinWBGDtqwIihbATcAL2JXoQr01cGAdaPLg0NvKxQg+tiVKmJ9cDsbTo8M9lnss34XlrI/l9fZji8mWtMSiB2MJ8FF7CnFRtxVr7TVvGtnAbaz49rIncU/iu0g8/i6JEFuT5jom38oPEHKk9KQI4QCHqyEoSKoWM4TK6IcKYa3yCvdhcQ/jv4exkYLUitMsTro4J+MhHuPKaXoK2dcSlUMnots7TndeLvONPK5Ayizneyts0zrKRCRGqtSj9WTUTTjazev8qH6Z5jWjLkvzo3qTrzWclAU3svIdwVcMdgvls+yOdvZAVyW7wi/WFYpEJH7745r5sL7U9zC/OIMv+CTkMxIZURm8q01qAyqdQ8+vLs7gIlfEt2ce16Mg9Dg4L9HAFSmTKJdA5x04C7frtDuahxAznWVnbQgfby7a+w7fiHgQnzxYWONJUxUI//uv2VHU2aEnCee7fpTANy7ZTYcOFjZBLyFI6sqdFC/hRjmtDJcWinBlneb2OZHTy4q4vMiV9xu5Ek5sXBUYhsyrRBNHHd6PduHj4WQ47uKQijkOsQNL66lQIQJ1GXjHD2wBghUSbAl64c/NKSV8pFGZK234HFcu57aWrluhSs1aJu07QkBavng78EKKqPeY8IwZN24fBu6kyKwntlvXS+Xxk8ubhqsfKnRPLX1r9t6SmbitRaI9lxMRpSr32FvCJjSLg8vuuB7ClraXS+sqlWEeQ3jn9wQpGNDegwi/bPyPs2+d1Nw1UmSokhAm6q59HsdY0s7I3peI48kmRPx6yp8GVfEmbjb61YkN1r+pqq7bHtf2C5qm2Ygk/s8Cm+YfIKFaxw== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +PartnerController_getProduct + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-list-documents.ParamsDetails.json b/docs/api-reference/reference/partner-controller-list-documents.ParamsDetails.json new file mode 100644 index 0000000000..a63581de43 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-list-documents.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}},{"name":"productId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-list-documents.RequestSchema.json b/docs/api-reference/reference/partner-controller-list-documents.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/partner-controller-list-documents.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-list-documents.StatusCodes.json b/docs/api-reference/reference/partner-controller-list-documents.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-list-documents.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-list-documents.api.mdx b/docs/api-reference/reference/partner-controller-list-documents.api.mdx new file mode 100644 index 0000000000..1132c6b3f3 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-list-documents.api.mdx @@ -0,0 +1,69 @@ +--- +id: partner-controller-list-documents +title: "PartnerController_listDocuments" +description: "PartnerController_listDocuments" +sidebar_label: "PartnerController_listDocuments" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQgF9lwFMC0L9x241uqZMWKbCIm2TTQxAEtDi2uSuRCjnyJhX0PH2PPlkxlGI70WLToEBPPpnmz/zx44jDSrgCvSLj7LkWiZgpTxb91FnyLsvQ32cm0KlLyxwtBSFFobzKkdAHkdxWwqocRSKcXypr/nwWJIXHh9J41CIhX6IUxopEFIpWQoqQrjBXIqkEPRW8OpA3dinqWm4EFt7pMqX/IOuOF4bC2YCBx8fDIf9oDKk3BRsqEiFqKSbfGrhRmdHRHVgok6GW4DzQCoGtwUCwNi5ThAEUzMtgLIYAvsywL6RInSW0xGJVUWQmjZIGnwPLrrpGu/lnTImj63k/yDQmo/fOvz0tdRq7EZACH1VeZNz188np/eXZ75/Orq6FfOXpFal5hpCrdGUs9jwqHTuicmDZfY5SjiGo5Rt6OlGDhfPgLHLwcucRFgYzHaLENpDM3fdk6tFkPJ/otDdeDMe9yYcfh735D0fHvePFZDH+aTEZDecfOk5NnffYbA+tTGid+WpoBQH9Gn0vGI2QuSXbUu8ydtvEc+vxrqV3UpChaNcZizxFUiY7JdcR0uzd6/mXLZHNijrSN+rS99GEYOxSQq6yhfN5ix8+FiweUo8aLRmVhT1te9reRdtRl7aTklaMU6qIQZuXBHkD4CbhRewK9LHfWThwHgwF8Bhc6VOEkLoCJZycXvaG46PDPZZ7LN+F5aSL5fX2Y4t6S5p2GMA6Anw0gWJeNE3H2gTDm0YucpsqvsDsSdyT+C4Sj79LIqTOLjKTUmjMjxBypgykCOEA+8s+KNBlgxlCac1DibBWWYn7tLiH8d/DWEtBasllFhddXJbxkoBp6Q09xeprjsqjF8ntHZc7L918u5TLkVaOq74lRnC4okrEQBVmsB4NWp2D3dIuDKqXlV49aAu1MKg2JVs90DtampiyGzvWXzHlDaHPPrToczjaLtk2fnE+VyQS8dsf1wyLC4W5h5PZOXzBJyGf+VgRFTHUxi5c5KaN7sXV7BxmmSK+SvO6DhJxxsFFgRauSFmtvIZZ4w6cx6v2oj2nh5AyqkUrrQ8fb2bN5YevR7yIjyFMnQ1kqIy4//3X5Chp5dCThIvdiErg65ds1aGHqdMYJEST2nZrSpBwo7xRlltTRbh03vD4CZE385K4Pc1UCBtzJWw2nBVpQ5yCeD8ax4f9UX/YJiWVclLiABYuUK5iOmrL8RYm2NIETBPs4vQipJtTS/hIgyJTxvK5Ln3GYw1qt0IVhs0ZNe8KEXH54i2B5Sadx4Vn5nhw96Fgi92dFCsXiHVU1VwF/OSzuubuhxL9UwPjmoM5Z0RuK6FN4LYWyUJlATvubNK2OLhsj/IhbOF76WbbqSzjGVM/vzVIwbx2Hkv41eN/1L4NWH1XS7FCpWMKqdrxkzTFgnZWdr5SnGs2uePXM/5sqJI3dLPprw5wlP5Nq6qqmXHtvqCt642RxP/ZwLr+B7t9ZvE= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +PartnerController_listDocuments + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-list-products.ParamsDetails.json b/docs/api-reference/reference/partner-controller-list-products.ParamsDetails.json new file mode 100644 index 0000000000..5647e888ab --- /dev/null +++ b/docs/api-reference/reference/partner-controller-list-products.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"organizationId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-list-products.RequestSchema.json b/docs/api-reference/reference/partner-controller-list-products.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/partner-controller-list-products.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-list-products.StatusCodes.json b/docs/api-reference/reference/partner-controller-list-products.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-list-products.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/partner-controller-list-products.api.mdx b/docs/api-reference/reference/partner-controller-list-products.api.mdx new file mode 100644 index 0000000000..fa22db8a03 --- /dev/null +++ b/docs/api-reference/reference/partner-controller-list-products.api.mdx @@ -0,0 +1,69 @@ +--- +id: partner-controller-list-products +title: "PartnerController_listProducts" +description: "PartnerController_listProducts" +sidebar_label: "PartnerController_listProducts" +hide_title: true +hide_table_of_contents: true +api: eJztmM9u4zYQxl9lwFMC0H/jthvdXCctUmCxbpJND0EQ0NLI5i5FKuTIm9TQ8/Q9+mTFUIrtRItNc/fJNEWOPn78cczxRrgSvSLt7EUmEjFXniz6mbPknTHo740ONPcuq1IKQopSeVUgoQ8iud0IqwoUiXB+qaz++zmOFB4fKu0xEwn5CqXQViSiVLQSUoR0hYUSyUbQU8mzA3ltl6Ku73hiKJ0NGPj5eDjkjwxD6nXJwUUiRC3F5HsPbpTRWZQAudIGMwnOA60QWA0GgrV2RhEGULCogrYYAvjKYF9IkTpLaInDqrI0Oo2RBl8Cx950RbvFF0yJHfFsIelGMnrv/NvDUpdh1wEp8FEVpeGuX6dn95fnf34+v7oW8tVKr0gtDEKh0pW22POostgRXw4cu88uFRiCWr7xno5rkDsPziKbVziPkGs0WYgRWyMZlR/FzEaT8WKSpb1xPhz3Jh9+HvYWP52c9k7zST7+JZ+MhosPnUXNnPfYbA+tdGgX803TCgL6Nfpe0BmCcUvWUu8zdtv4uVvxvtI7KUhT1HXOIc+QlDZn5DpBmr17Pf6yJbKZUUf6Rl36PuoQtF1KKJTJnS9a/PCx5PCQeszQklYmHGg70PYu2k66tE0rWjFOqSIGbVERFA2A24QXsSvRx35n4ch50BTAY3CVTxFC6kqUMD277A3HJ8cHLA9YvgvLSRfL692PLWY70jKHAawjwEcdKOZF3XSsddC8aeQit6niO8eBxAOJ7yLx9IckQupsbnRKoZEfIeRMGUgRwhH2l31QkFUNZgiV1Q8VwlqZCg9p8QDj/4exloLUkksjLpS4kuIpAdPKa3qKFdMClUcvkts7LndeLvPN6qtAWjmu05YYueGCKhEDVerBejRoXznYr8bCYPOyOKsH5S5eYx7r3ZN5xTg3KD6LbRnndbddsm385nyhSCTij7+umQoXSn0P0/kFfMUnIZ9BWBGV0VNtcxcBaW38dDW/gLlRxHdmntfZ+zji6FOJFq5I2Uz5DFpL4CLeqfP2QB5DykyWbbQ+fLyZN7ccvgfxJD5vMHM2kKYqcv3vP5OTpI1DTxI+7Xsnge9Zsn0depi5DIOEKKltP++OhBvltbLcminCpfOan0+JvF5UxO2ZUSFs5Uo4c2lVYJwyrTJNnGt4P5qFD/uj/rDNPirl7MMGli5QoWLeaYvvlhrYYQOMDexx88LR7ekkfKRBaZS2fH4rb/hZw9StUKVmNaOm5o8oyxd1PsdNOoX/Fq47KVYuEIfabBYq4Gdv6pq7Hyr0Tw1ya7ZswSDcbkSmA7czkeTKBOyo3mZhcXTZnsxj2CH2cjVtp7IMYczk/NeBFExl5/+K+q6WYoUqiwdz0w6apimWtDe9k/v5BG+P5O/nnIxVxfZtLX51WmL070rbbJoR1+4r2rreKiX+zgLr+j/C4RKN +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +PartnerController_listProducts + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-add-variant.ParamsDetails.json b/docs/api-reference/reference/products-controller-add-variant.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-add-variant.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-add-variant.RequestSchema.json b/docs/api-reference/reference/products-controller-add-variant.RequestSchema.json new file mode 100644 index 0000000000..5af2001b92 --- /dev/null +++ b/docs/api-reference/reference/products-controller-add-variant.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"identity":{"description":"Segments to mint a distinct OSPI identity (own full code) for this variant. Every variant now requires its own identity (product owner decision, ADR-015 amendment, 2026-08-17) — provide either this or ospiIdentityId, exactly one, not neither.","allOf":[{"type":"object","properties":{"producerCodeId":{"type":"string"},"categoryCode":{"type":"string","example":"123456"},"companyProductId":{"type":"string","description":"Producer-supplied product identifier (Deel 4 §14)","example":"00012345"},"variantCode":{"type":"string","example":"0001"},"serialBatch":{"type":"string","example":"00000001"},"version":{"type":"number","minimum":1,"maximum":9,"default":1},"reserved":{"type":"boolean","description":"Reserve this identity (ADR-024, Deel 4 §37) instead of registering it outright — useful for ERP sync/bulk imports/manufacturing workflows that need to hold a code before the product is fully created. Attaching it to a Product/Variant later still works directly — it does not need a separate \"un-reserve\" step first — and moves it straight to ACTIVE."},"reservedUntil":{"type":"string","description":"Only meaningful with reserved: true — when the reservation lapses."}},"required":["producerCodeId","categoryCode","companyProductId"],"title":"IssueOspiIdentityDto"}]},"ospiIdentityId":{"type":"string","description":"An already-issued, unattached OSPI identity ID for this variant. Provide either this or `identity`, exactly one."}},"required":["sku"],"title":"CreateVariantDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-add-variant.StatusCodes.json b/docs/api-reference/reference/products-controller-add-variant.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-add-variant.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-add-variant.api.mdx b/docs/api-reference/reference/products-controller-add-variant.api.mdx new file mode 100644 index 0000000000..d5997c688d --- /dev/null +++ b/docs/api-reference/reference/products-controller-add-variant.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-add-variant +title: "ProductsController_addVariant" +description: "ProductsController_addVariant" +sidebar_label: "ProductsController_addVariant" +hide_title: true +hide_table_of_contents: true +api: eJztWdtuI7kR/ZUCn2ygdbXmpjeP7QAOsLBjeyYPXmOWalZLXLPJHrJatiIIyEfkH/Y/9lPyJUGR3ZIsKeMMkEe/tdgssi6nDptHS+Eq9JK0s5dKjMW1d6rOKZw5S94Zg/6bVOqr9FpaEpmopJclEvogxvdLYWWJYiy0Epnw+L3WHpUYk68xE9qKsagkzUQmQj7DUorxUtCiYotAXtupWK0ekiEG+uzUgmfsrpM7S2iJX8mqMjqP3vZ+D87y2N7SbvI75tFXz7GRxhDnPdYH9s+aEA680AotaYo+KQy51xVvLMbiFqclWgpADkptCSQoHUjbnODq9voSWlM4ck8WitoYyJ3CYyicB5rpAPOU0S5czNEv2p9g3RM08QfQFIDtN6tVqTo8ih4U5jpoZzM4Pb/p9AfvQJZoFbuWwbA/fN/pf+wMPhzDv//5L6i8m2uFgJpm2DjhPLhQ6ctm/UuVAT7LnMwCnMUMrCOwyaArMiGNuSpi2X+c6eQl+jOnkEF1ILe5JJw6v+Ap+xMygc+yrAwPDYYno3fvo40rK2kXDUIPLZzt1Om6caQTagYOKmgTmFJaaPRwdI5oYAR//jEYHb/Yut/vx91586ZAr/vLRmwQ0GtpPkvKZ68a9FujOfqgE6wbA1uXE/QiE6W2uqxLMR5kopTP6fkTR1zI2pAYD1bcSQH9HLdTM3HOoLR7ublJUxMQNgiLSBqOMlhn5eTDMWgbCKUCV4DHqQ6EHAZoAleT19MZRYzVAYvaRJBf3FxDWNi8N6nNI+iycp5Cr5S2LmROdTR/cv6xMO4pAM0kIw0Vd9TMGQUyNgxMsHCencRN6UJsqAXkHiWh6sIpkcxnjUPkQEKDkV7DW2AkoYdA2pi4awClPUags9+aQDkMDd6Rdw/ITEcIv4radpq8/iogEFZQaB9SxNIqKN08NisE8jLmghycnt1dfr3oiq2ifLGkzeugvbJmASVKq+2Us/mkaQbtGmNgToxbP83QxsSkd5EUwcgqYOiK1Wqbj+93W3KnAQ/01kMmSFME6GUINV5t8cQ5ObF6WGXiJXm8HtqpBWk8SrXoaF5UZVBbGauHaoc5L88PkOX1YRL7rbX67QWB7aeBz4CtyM4ighqQxKhWySJUzoZEZsP+YP8A4LKO+v39F1+l0SqVopDacIQxCITmkIO5dozGABImddAWQwBfG+yK/9tJh947//q0/FUu+3x6/u3m4m9fLm7v9mp5S3JiEMrYedjhqsaBuHls3gj+EkOQ01f22ctaLL2zyMkrmQAKjUaFpp1iIg/jbbOmGoyGk5HKO8OiP+yMPr7vdybvTj51PhWjYvihGA36k497QZ057zGVJ2IrBRM7MPaf7wSGn3HTAz2Wp1ZqI972dAtzF7zkOZLUJiHu5SKpdrvzbxpEbjA6OgTLX3QI2k4zKKUpnC8b+OFzxcszYcY+kSa8oe0NbT+FtpN9tJ3WNGM48VGiMpjUBGUC4JrwIuwq9HHcWThyPn7Vegyu9jlCyF2Fzffr8OT4DZZvsPwpWI72YXm3OWxRbZC2/sDDZx0o8qJOA3MdNBeNXMRtLvnW+4bENyT+FBI//RCJkDtbGJ1TSO5HEDJTBuJLxhF2p11WEeoEM4Ta6u81wlyaGt9o8Q2M/zsYV5kgOQ2bWx8FtgmY1z6qWfdLMUHp0Yvx/QPrb4dEk/+uAJZIM8dSYeVCUgRpJsaiJyvdmw967Z69pVarXnNzCyIKIvMkG255c8uwTZBrfWqwHLWLNJQ1D39xvpQkxuKvf79rtatvcHp9CY+4EFlb8BlRFXPHvXGz0RYv2vo3WuAGGY2Kuf69rfztilmbWS81rFaoOqRTbZSkHSEpqUU7YtFGEdoShAbb4k7SRXd0hS11bfdevi1q2sLF5mggFC/d10YS3xc4l/t6BM84uqrQwi1Jq6RXrb4Cl42MlsjoGHLux6pZrQu/fL1OX3j8DchGzDVw5mwgTXXs6T//GJ2MoXU2gys/lVb/I64XMuBvzAxaHQ84ayFLSkHz3MI1gwaiIYOzVBnN70+JvJ7UxM9nRoawdjeDc5fXUcjljZSm7nbGRb876PYb5pU5My+DilFfysi5DWxaD2DTMSCVgk3LvEjompgIn6lXGaktF6b2URtK3XQvZKXZmUFi5tTFmRhHoX3dVA+ZmHETju/FcjmRAb94s1rx8Pca/SK1Wpw94WLfL4XSgZ+VGBfSBNxzbX3KiKObhnmOYdNaL11uBqVdRKdMzb9EJrgb438CUSSaoVSRa5bNi7O0R+eOzTeGe6faKmstTvMcK/rh3IctYrq+imfSpPk/oUyt5uUT8658Sk66GHNknji2FEbaaR3PI5HW5HLLmrb12x1G2hbDX6ZhuUwz7twj2tVqnRXi35yY1eo/7E3GDw== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_addVariant + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create-bulk.ParamsDetails.json b/docs/api-reference/reference/products-controller-create-bulk.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create-bulk.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create-bulk.RequestSchema.json b/docs/api-reference/reference/products-controller-create-bulk.RequestSchema.json new file mode 100644 index 0000000000..f075a16045 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create-bulk.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"string"},"gtin":{"type":"string","description":"GTIN-8/12/13/14 (ADR-005) — checksum-validated, not confirmed against GS1's registry."},"identity":{"description":"Segments used to mint the OSPI identity for this product (Deel 4). Not required if you already issued an identity via POST /ospi-identities and pass ospiIdentityId instead.","allOf":[{"type":"object","properties":{"producerCodeId":{"type":"string"},"categoryCode":{"type":"string","example":"123456"},"companyProductId":{"type":"string","description":"Producer-supplied product identifier (Deel 4 §14)","example":"00012345"},"variantCode":{"type":"string","example":"0001"},"serialBatch":{"type":"string","example":"00000001"},"version":{"type":"number","minimum":1,"maximum":9,"default":1},"reserved":{"type":"boolean","description":"Reserve this identity (ADR-024, Deel 4 §37) instead of registering it outright — useful for ERP sync/bulk imports/manufacturing workflows that need to hold a code before the product is fully created. Attaching it to a Product/Variant later still works directly — it does not need a separate \"un-reserve\" step first — and moves it straight to ACTIVE."},"reservedUntil":{"type":"string","description":"Only meaningful with reserved: true — when the reservation lapses."}},"required":["producerCodeId","categoryCode","companyProductId"],"title":"IssueOspiIdentityDto"}]},"ospiIdentityId":{"type":"string","description":"An already-issued, unattached OSPI identity ID"}},"required":["name"],"title":"CreateProductDto"}}},"required":["items"],"title":"BulkCreateProductDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create-bulk.StatusCodes.json b/docs/api-reference/reference/products-controller-create-bulk.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create-bulk.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create-bulk.api.mdx b/docs/api-reference/reference/products-controller-create-bulk.api.mdx new file mode 100644 index 0000000000..ba48d02904 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create-bulk.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-create-bulk +title: "ProductsController_createBulk" +description: "ProductsController_createBulk" +sidebar_label: "ProductsController_createBulk" +hide_title: true +hide_table_of_contents: true +api: eJztWdtuI7kR/ZUCX2IDrZut2Z3Rm8d2Fgqwa8f2TB68xoDqrpa4ZpM9ZFG2IgjIR+Qf9j/2U/IlQZHdkixp1hkgj35rsXkpVp1z2DxaClujk6SsGRdiJK6dLUJO/twaclZrdF9yh5LwY9CPIhO1dLJCQufF6P4hEw6/BvT00RYLMVrGn8phIUbkAmYit4bQEL+Sda1VHlfq/eat4Tafz7CS/ESLGsVI2MlvmBOv4zguUuj5rSKs/FY36ZxciGyv/RvDjaxwq5cnp8xUrDJRoM+dqjmmg+9zSTi1bsGpOfB6SurAuJ1pxU93418673uDk97gtDcYwtHZxU2n3393DP/5178hn2H+6EPVmUutCklYZGAsQW5NqVyFBcipVMYT/HQ7+IsHh1PlyS26HIAq0JCimPqXi97itEJDHoLHAshCpQwBzRCubq/H0A6E0jqgmfJQp8LD0QWihuFxF36xBG09QZWwsAGkdiiLBSjvA4dmNjPNlYTrq9s76Flfq07TrtCDNAXU0nvgF+Om/7gA3hXKoisyIbW+KsXo/rVKpijRndsCv1GUtmbc5VBx8FlWteamwcnp8N0PcYytamkWDfgPTbxb1OsmkI4PjGss1glMGy8VujaX8Mfvg+Hxi6X7/X5cnRefS6ekodfj5UE8wKNTUn+UlM9eHdBvB83R+ZcwN6GaoBOZqJRRVajEaJCJSj6n5w+841IGTWI0WDHRPbo5bqdmYq1GafZyc5O6Jlyt8ZFgfzLMYJ2V0x+PWxCALRtoI28DFIEN5NR0RpEmwWMZdITr5c01+IXJe5OgH0FVtXXke5U0oZQ5hTj8ybrHUtsnDzSTBAYTCWZWFyAhtwXCBEvrMFJiXToPZdB6AUnyii6cEcl81gREFiQ0GOl9TlUDLQkdeFJax1U9FMphTnoR41YEhUUfKR2jkOCRRZQQfhXBdJq8/irAE9ZQKufTjpk1lZ2j5zk8ORlzQRbOzu/Gny8j/9uifDKk9OugvTJ6ARVKo8yUs/mkaAbtHCNgyY5LP83QxMSkd1GzQcvao++K1Srbkvn7XUruEPAAtx4yQYoiQMcsI1dbqnBBVqweVpl4KRWvb+3MtNrUSdqUQTAyVg+LHc0bX+xtIp4QW4GdRwA0Mcegdkeko2drCB+Qh4alMtXW+CRhJ/3BvlxzMYf9/v6Lz+lU4AKUUmneV1RshObkhbmyjEEPEibBK4Pegwsau+L/dvyic9a93i1/VcE+nl18ubn8+6fL27u9Ct6SnGiEKvINO1zL2BAXj5SNkK/Qezl9ZZ29rEXhsAY5eRXTvlSoC9+QKCbyMMo2cxaD4clkWOSdk7J/0hm+/6Hfmbw7/dD5UA7Lkx/L4aA/eb+3qXPrHKbyRDVMm4m8i6xzHa8KBG2nB5iVJwK1O96OdAt3lzzlBZJUOiHu5SSpdrv9bxpEbjA6PATLn5X3ykwzqKQuLX+NRPjhcx0/CnKHkVNS+ze0vaHtu9B2uo+2s0AzhlOevoIngaBKAFwLXoRdjS62WwNH1oEi/ir2Nrgcwee2xgzSt8bp8Rss32D5XbAc7sPybnPYYrFB2vqzDp+Vp6iLKjXMlVdcNLIRt7nka/QbEt+Q+F1I/PCnSIz+gFY5+RR+BCErpSe+Whxhd9oFCUVIMEMIRn0NCHOpA77J4hsY/3cwrjJBcuo3dz2K9x6PeXDRe7pfiglKh44twdXDYavk25ZihTSz7D3W1kfgSJqJkejJWvXmg167Zrzui+h+zNf2YxvELaM1Ia0NpYFwNCpSU9Y8/NW6SpIYib/9446LznfNL3B2PYZHZFexqfOMqI4pY0rcbHzOy7bsa1/yvrUYv3U7XTdvG4qb1uQjbn5v23q7jtf+XMk4at2sQ2bWxm7acZuSpbTjKG1soy3XaLDtACVvd8d82LLgdi/v61d8s1emtJFNDebi3fxaS+ILBldh37bgHkdXNRq4JWkK6YrWhoFx47Yl9TqGnAlcN7N14efP1+mTkD8aeRCLE5xb40lRiCLwx+/D0xG04WZw5abSqH/G+XwG/FGaQWv3AefNZ8lQaJ5bfGfQeEI+g/NUG8Xvz4icmgTi53MtvV+Hm8GFzUP0aXmhQlF3O+ei3x10+41Uy5ylmuHINKmk2Rjba4bBhmKNhQUNxw4b3YTP1Ku1VIarFly0kBL97oWsFQczSFKeaJ+JSMKHTMyYq6N7sVxOpMdPTq9W3Pw1oFskakagTbjE91z2GcoiKsRSMMtY/uL507njWLi7DtHa3z2LVlk74izPsaY/7fuwJSdsRnPEzV8TVUK8k0+slvKJXZdM2JiTKByxbSm0NNMQTxGR5uScy0DbXuuOoGwb19IstiJcLlOPO/uIZrUSWbMV4t/Mh9Xqv1SIyOk= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_createBulk + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create-relationship.ParamsDetails.json b/docs/api-reference/reference/products-controller-create-relationship.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create-relationship.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create-relationship.RequestSchema.json b/docs/api-reference/reference/products-controller-create-relationship.RequestSchema.json new file mode 100644 index 0000000000..34b0fb59c2 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create-relationship.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"targetProductId":{"type":"string"},"relationshipType":{"type":"string","enum":["REPLACEMENT_FOR","ACCESSORY_FOR","COMPATIBLE_WITH","PART_OF","CONTAINS","VARIANT_OF","SUPERSEDES","REQUIRES"]},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"Default PRIVATE (Deel 7 §42) — an internal/ERP relationship is not automatically public."},"metadata":{"type":"object"},"validFrom":{"type":"string"},"validUntil":{"type":"string"}},"required":["targetProductId","relationshipType"],"title":"CreateProductRelationshipDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create-relationship.StatusCodes.json b/docs/api-reference/reference/products-controller-create-relationship.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create-relationship.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create-relationship.api.mdx b/docs/api-reference/reference/products-controller-create-relationship.api.mdx new file mode 100644 index 0000000000..d20d1576b1 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create-relationship.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-create-relationship +title: "ProductsController_createRelationship" +description: "ProductsController_createRelationship" +sidebar_label: "ProductsController_createRelationship" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uIjkQgK9S8lMidQJJ2J0Z3ggQLavJwALJaIWiyHQX4Bm33WNXZ8KilvYQe4e5xxxlT7IqdycQQPMj7SNPNP4p18/nsssrYTN0kpQ1vUQ0xcDZJI/Jt60hZ7VGdx87lIRD1GGUX6hMRCKTTqZI6LxoTlbCyBRFU6hERMLhp1w5TESTXI6RUEY0RSZpISLh4wWmUjRXgpYZz/DklJmLorgrJ6KnS5ssecS2nNgaQkPcJbNMqzjoU/vgreG2HdF2+gFjYl0d20gKfeiVbo5U2ck27+jCmqyNHYfO7UGRQJOnojkRw+7gbavdve6+G99f9YciEq12uzsa9Yd/Vv/b/etBa9y7fNu9f98b/yYiMWgNx/f9q9D3btzqvRuJSNy2hr3Wu6p9dDPoDkfdTpd7ht0/bnrD7kjcFZF4UF5NlVa0/JZWg2HvtjXu8lo3l297bXEXiQR97FTGhomm6OBM5pqgGglHHUQNr+Drl8b5Mfz79z8gDShD6IzUte5wAJteAeXBWAKZk00lqVhqvYQsn2oVn7ILUySZSNoTELZBapVcOZvu9X7ovTGk9D5QNgGb7ERzT+zuIkGKNAtpB5Sr0ZtEd8iKoiiF+8waX7JyXj/jn5eOYxUb9fpuxy3rHUTCTCqNSQTWAS0QKrLhQVktCT1ImOZeGfQeXK7xVPxveKNz1n1/WGyT/VQ/yjQLvrpsde4ZvO5oLLbZGZGcaoRUxgtl8MShTEJDWBxYdsWA93L+nXV2vAYz68AaZOel1iHMFOrEn4riOUXs27abMpOzxvm0kcQn57P6+Unj9a/1k+kvF29O3swas/NXs8ZZffp6x6i2dYEd9EAL5StjPitagEf3gO7EqwRB2znrssVh8Ofa4k1NN/jrssgOklS6JO6lkDJ22+OHFZFrRhv7sLxW3iszjyCVemZdWuGHjxmLh9hhgoaU1P5A24G2n6LtYpe2Vk4LximWxKBNc4K0BPA54QXsMnSh3Ro4sg4UeXDobe5iBB/bDCNodYYn9fOL4wOWByx/CsvGLpbj9WGLyZq0xGJ5XcFH5Snkxer+Em5TGoFs4JavMegOJB5I/CkS33yTRIitmWkVky/VDxBypvQkCeEIT+enICHJS8wQcqM+5QgPUud4SIsHGH8cxiISJOdck3NMQyXPczzGuQsV42QlpigdOtGc3BU7ReGPlv8p0sLye0FmfQCIy/umqMlM1R7Oak9r11YqKWqbFZnnR4DgMVZyQ7URM1zy96RgBTYbWzVF1ceVdakk0RS/vx8zCtZn6h5agx58xKWInqK/IMqCI3mjDNevC90nGPa8BqyR2X0E2FPrb1bjG0X3RvX7stxdi9+scjeKX2VmNihWhbk/GvRgoCXxnZ5N3GEzjDjqZ2hgRNIk0iVQGQS9cOefVQnjGGLeM1kl7RSubwflLYzvaTyJ8wG0rfGkKA/77uuXxkWzkkPLCPpuLo36q/RMBHwPjKrl0EHbJugjCCpV309IRXArnZKGv9qScG6d4v4WkVPTnPi7raX3z+pG0LFxnmKY0soTRZwLGZ3S8Prp2Wm9yo4y5uzIsWYiUxnyYvUq9aQBrKmGkmrYwvqFY5+TCOEj1TItleEA5S48S5TET4TMFCt1VmbRcsdFoqm2nyLCPlzwbmlOxGo1lR5vnC4Kbv6Uo1uW2+GBfTTlyE9WIlGevxPRnEntcUe/52NBHA2rVHEMa/xf6l01SrMs4cv5n4gE75jwclfw69ICZRKSw6rqaJdrnIQdsJ64cwwV0dOMVhxjRt8ce7eRQQb9cIhMq1e/NBw+wsnP7ED5uVTSBptDdghtK6GlmefhABGlTI69zDkoz4HbyhrBqr1uWK3KEWP7EU1RPHuF+D87pij+AzWkP0k= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_createRelationship + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create.ParamsDetails.json b/docs/api-reference/reference/products-controller-create.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create.RequestSchema.json b/docs/api-reference/reference/products-controller-create.RequestSchema.json new file mode 100644 index 0000000000..20d70efaeb --- /dev/null +++ b/docs/api-reference/reference/products-controller-create.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"string"},"gtin":{"type":"string","description":"GTIN-8/12/13/14 (ADR-005) — checksum-validated, not confirmed against GS1's registry."},"identity":{"description":"Segments used to mint the OSPI identity for this product (Deel 4). Not required if you already issued an identity via POST /ospi-identities and pass ospiIdentityId instead.","allOf":[{"type":"object","properties":{"producerCodeId":{"type":"string"},"categoryCode":{"type":"string","example":"123456"},"companyProductId":{"type":"string","description":"Producer-supplied product identifier (Deel 4 §14)","example":"00012345"},"variantCode":{"type":"string","example":"0001"},"serialBatch":{"type":"string","example":"00000001"},"version":{"type":"number","minimum":1,"maximum":9,"default":1},"reserved":{"type":"boolean","description":"Reserve this identity (ADR-024, Deel 4 §37) instead of registering it outright — useful for ERP sync/bulk imports/manufacturing workflows that need to hold a code before the product is fully created. Attaching it to a Product/Variant later still works directly — it does not need a separate \"un-reserve\" step first — and moves it straight to ACTIVE."},"reservedUntil":{"type":"string","description":"Only meaningful with reserved: true — when the reservation lapses."}},"required":["producerCodeId","categoryCode","companyProductId"],"title":"IssueOspiIdentityDto"}]},"ospiIdentityId":{"type":"string","description":"An already-issued, unattached OSPI identity ID"}},"required":["name"],"title":"CreateProductDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create.StatusCodes.json b/docs/api-reference/reference/products-controller-create.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-create.api.mdx b/docs/api-reference/reference/products-controller-create.api.mdx new file mode 100644 index 0000000000..e93b65b416 --- /dev/null +++ b/docs/api-reference/reference/products-controller-create.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-create +title: "ProductsController_create" +description: "ProductsController_create" +sidebar_label: "ProductsController_create" +hide_title: true +hide_table_of_contents: true +api: eJztWdtuIzcS/ZUCX9YGWjdbk8zozWN7Ay2Q2Gt7Zh8cY0B1V0uM2WQPWZStFQTsR+w/5D/yKfmSoMhuSZaUeAfYR7+1eC1WnXO6ebQUtkYnSVkzLsRIXDtbhJz8uTXkrNbovuQOJaHIRC2drJDQeTG6f8iEw68BPX20xUKMlvGncliIEbmAmcitITTEXbKutcrjLr1fvDXc5vMZVpKfaFGjGAk7+QVz4n0cx0QKPfcaWeHWKE9OmalYZaJAnztV86IH+3NJOLVuwec60D0ldWDezrLih7vxT533vcFJb3DaGwzh6OziptPvvzuG3//zX8hnmD/6UHXmUqtCEhYZGEuQW1MqV2EBciqV8QQ/3A7+5sHhVHlyiy4HoAo0pCjm7uWmtzit0JCH4LEAslApQ0AzhKvb6zG0E6G0DmimPNSpanB0gahheNyFnyxBWxBQJSxsAKkdymIByvvAoZnNSnMl4frq9g561teq07Qr9CBNAbX0Hrhj3IwfF8CnQll0RSak1lelGN2/VskUJbpzW+CfFKWtGQ85VBx8llWtuWlwcjp8912cY6tamkWD3EML7xb1ugmk4wMDE4t1AtPBS4WuzSX89utgePxi636/H3fnzefSKWno9Xh5Ek/w6JTUHyXls1cn9NtJc3T+JcxNqCboRCYqZVQVKjEaZKKSz+n5A5+4lEGTGA1WzFSPbo7bqZlYq1GavdzcpKEJV2t8JNifDDNYZ+X0++MWBGDLBtrIxwBFYAM5NZ1RpEnwWAYd4Xp5cw1+YfLeJOhHUFVtHfleJU0oZU4hTn+y7rHU9skDzSSBwUSCmdUFSMhtgTDB0jqMlFiXzkMZtF5A0quiC2dEMp81AZEFCQ1Gep9T1UBLQgeelNZxVw+FcpiTXsS4FUFh0UdKxygkeGQVJISfRTCdJq8/C/CENZTK+XRiZk1l5+h5DU9OxlyQhbPzu/Hny8j/tiifDCn9OmivjF5AhdIoM+VsPimaQbvGCFhz49ZPMzQxMakvii5oWXv0XbFaZVs6fb9LyR0CHuDWQyZIUQTomGXkaksVLsiK1cMqEy+l4vWjnZlWmzpJmzIIRsbqYbGjeeOLvUPEN8RWYOcRAE3MMahVmuJra3zSopP+YF93uSrDfn+/43OSd85kKZXmAKP0IjTvQJgry2DyIGESvDLoPbigsSv+by9CdM6614flr0rRx7OLLzeX//x0eXu3V4pbkhONUEXiYIeLEhvi5pF7EbsVei+nr+yzl7WoANYgJ69i/pYKdeEbNsREHobLZs1iMDyZDIu8c1L2TzrD99/1O5N3px86H8phefJ9ORz0J+/3DnVuncNUnihr6TCRQJE+ruNVgaDt9ABF8sSE9sTbkW5h7pKXvECSSifEvVwk1W53/E2DyA1Gh4dg+aPyXplpBpXUpeXPigg/fK7j2z13GMkhtX9D2xvavgltp/toOws0Yzjl6XN2EgiqBMC14EXY1ehiuzVwZB0o4s9bb4PLEXxua8wgfTScHr/B8g2W3wTL4T4s7zYvWyw2SFt/n+Gz8hR1UaWGufKKi0Y24jaXfJl9Q+IbEr8JiR/+Eonxoq9VTj6FH0HISumJ7whH2J12QUIREswQglFfA8Jc6oBvsvgGxv8djKtMkJz6zaWNPM/xmAcXTaT7pZigdOjYnFs9HPY8Dht7FdLMsvtXWx9BI2kmRqIna9WbD3rr/aJ7MV/7f+3etwzSBLA2gga50WhITVnz8HfrKkliJP7xrzuuNd8Vv8DZ9RgecSGytrwzojpmiplwszEaL9tqt8bgn90p183bNuCmNbl/m9/bZtyuT7W/VrJ7Wg/qkAW1MYl2PKJkBO34QBuzZ8vrGWz7NslS3bEMtoyz3Sv3VpcypY3EaeAV79PXWhLfJTjz+1YDjzi6qtHALUlTSFe01gmMG4csCdUx5MzVulmtCz9+vk5ff/x9yJNYh+DcGk+KQuT7b78OT0fQBpvBlZtKo/4d1/MZ8PdnBq1FB5w1nyUToHluoZxB4+P4DM5TZRT3nxE5NQnEz+daer8ON4MLm4forfJGhaLudsZFvzvo9htVljmrMkOQWVFJs4W5NgLYsAnWbDrsSxM+U6/WUhmuSXDR8UlEuxeyVhzHIAn2mtwzpuPoXiyXE+nxk9OrFTd/DegWiYIRWhMu6z0bLzOURRSApWA2sbrF10vnjoPg4TpwMHuvmlXWzjjLc6zpL8c+bCkGm8bM7eY/gCph3MknFkP5xKZKJmxMRhSI2LYUWpppiC8JkdbkPMtA257ojnBsG8zSLLYiXC7TiDv7iGa1EllzFOLf7EitVn8Ayb6SyA== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_create + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-find-one.ParamsDetails.json b/docs/api-reference/reference/products-controller-find-one.ParamsDetails.json new file mode 100644 index 0000000000..08719de9ac --- /dev/null +++ b/docs/api-reference/reference/products-controller-find-one.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"locale","required":true,"in":"query","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-find-one.RequestSchema.json b/docs/api-reference/reference/products-controller-find-one.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-find-one.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-find-one.StatusCodes.json b/docs/api-reference/reference/products-controller-find-one.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-find-one.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-find-one.api.mdx b/docs/api-reference/reference/products-controller-find-one.api.mdx new file mode 100644 index 0000000000..ea71be5f9d --- /dev/null +++ b/docs/api-reference/reference/products-controller-find-one.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-find-one +title: "ProductsController_findOne" +description: "ProductsController_findOne" +sidebar_label: "ProductsController_findOne" +hide_title: true +hide_table_of_contents: true +api: eJztmN1OKzcQx19l5CuQnE/S9rB3aaAVlY6gwKEXCCFnPZv4HK+92LMcaLTP0/fok1XjXUIgp5wi9TJX2fXH+O+Zn2c9WQlfYVBkvDvRIhNnwes6pzjzjoK3FsNtYZw+dSikqFRQJRKGKLLrlXCqRJEJo4UUAe9qE1CLjEKNUhgnMlEpWgopYr7EUolsJeix4hmRgnEL0TRybcT6XFn8N0N3NYbHNy3d8MxYeRcxcv94OOQfjTEPpuLtiUyIRorJtzqulDU6OQEKZSxqCT4ALRFYDkaCe+OtIoygYF5H4zBGCLXFvpAi947QEZtVVWVNniwNPke2vdoW7eefMSf2Z2Dnk2klYwg+fH9Y7jVue0AKfFBlZbnp5+nR7fnx75+OLy6FfLXTC1Jzi1CqfGkc9gIqnRrS4sC2++ylEmNUi++ss+U1KHwA75CdV/qAUBi0OiaLnSMZsrds6tFkPJ/ovDcuhuPe5MOPw978h4PD3mExKcY/FZPRcP5ha1MzHwK24aGlid1mvhpaQsRwj6EXjUawfsFamk3Irlt/Pu94U+mNFGQo6Tpmk0dIytgj8ltG2ti9Hn/eEdnOaBJ9o236PpoYjVtIKJUtfCg7/PChYvOQB9ToyCgbd7TtaHsXbQfbtE1rWjJOuSIGbV4TlC2A64SXsKswpHbvYM8HMBQhYPR1yBFi7iuUMD067w3HB/s7LHdYvgvLyTaWl88fW9TPpGmPEZwnwAcTKeVF0zbcm2g4aOQTt7niy8qOxB2J7yLx8E0SIfeusCan2MpPEHKmjKQIYQ/7iz4o0HWLGULtzF2NcK9sjbu0uIPxv8PYSEFqwYUVxzTVYDwnYl4HQ4+p4JqjChhEdn3D9c7Lfb5ZuJVIS8/l3QITNFyXZWKgKjO4Hw2e1husjG64ykp+YSkbAi6Y1JayJxkdvrylrkl2D7/4UCoSmfjtj0sOuI+VuYXp2Ql8Qa7juhgviarkLuMKn2Lfeej04uwEzqwivg7zvK2wphF7pxU6uCDltAoaOhfASbouF91Z24eccas6a334eHXWXmD4isOT+CjBzLtIhuqE7N9/TQ6yzg49SjgNC+XMn8lelMBXKNkthwFmXmOUkCR1z0/RkHClglGOn2aKcOGD4f4pUTDzmvh5ZlWMa7kSjnxel5imTGttiNMIx6Pd+LA/6g+7xKJyTizswMpHKlVKKV1B/aQAnoEABgJaIl54c33oCB9oUFllHB/LOljua2m5FqoyrGTUZp2WUCkyk87C0kfiQavVXEX8FGzTcHNbuDO72kROJlpkhbIRtxSsE6XYO+8Ozz48o/JSGVO08Z9BSrepvr/hl2B4pf9/1a5RucfNNZ/UGC2am0aKJSqdDumq65jmOVa0MWXrQ8Cy10f012POzKpmp68D8+p8JevflLNatSMu/Rd0TbNWR/zOApvmH1l7Iy8= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_findOne + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-relationships.ParamsDetails.json b/docs/api-reference/reference/products-controller-list-relationships.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-relationships.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-relationships.RequestSchema.json b/docs/api-reference/reference/products-controller-list-relationships.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-relationships.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-relationships.StatusCodes.json b/docs/api-reference/reference/products-controller-list-relationships.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-relationships.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-relationships.api.mdx b/docs/api-reference/reference/products-controller-list-relationships.api.mdx new file mode 100644 index 0000000000..04699855ab --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-relationships.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-list-relationships +title: "ProductsController_listRelationships" +description: "ProductsController_listRelationships" +sidebar_label: "ProductsController_listRelationships" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMWKbBImmTTQxAEtDiyuEuRCjlKkxp6nr5Hn6wYSnE+vNjd3H0yTXKGfw5/HHO8Fr7GoMh4d6JFJs6C101OceEdBW8thltrIp2jTXNiaeoopKhVUBUShiiy67VwqkKRCaOFFAHvGhNQi4xCg1IYJzJRKyqFFDEvsVIiWwt6rNkiUjBuJdr2hg1j7V3EyOPT8Zg/NMY8mJqXFpkQrRSzrw1cKWt0EgiFMha1BB+ASgRWg5Hg3nirCCMoWDbROIwRQmNxKKTIvSN0xG5VXVuTJ0+jz5F9r7dF++VnzImjEDh4ZDrJGIIP35+We43bEZACH1RVW+76dX50e37856fji0sh3+z0gtTSIlQqL43DQUClU0daHNj3kKNUYYxq9Z11tqIGhQ/gHXLwKh8QCoNWx+SxDyRD8i2fejKbLmc6H0yL8XQw+/DzeLD86eBwcFjMiukvxWwyXn7Y2tTCh4Dd8VBpYr+Zvw2VEDHcYxhEoxGsX7GW9iVj1108n3f8UumNFGQo6Tpml0dIytgj8ltOurN7O/+8J7KzaBN9k236PpoYjVtJqJQtfKh6/PChZveQB9ToyCgbd7TtaHsXbQfbtM0bKhmnXBGDtmwIqg7ATcJL2NUYUr93sOcDGIoQMPom5Agx9zVKmB+dD8bTg/0dljss34XlbBvLy+cfW9TPpGmPEZwnwAcTKeVF03Xcm2j40MgnbnPFj40diTsS30Xi4TdJhNy7wpqcYic/QciZMpIihD0croagQDcdZgiNM3cNwr2yDe7S4g7GH4exlYLUisshPtNUQ7FNxLwJhh5TmbREFTCI7PqG653X+/zBwqtCKj0XaitM+HBdlYmRqs3ofjJ6Wnm0NrodhTe2XbxY4gthF0xwR9+TvB5r3mrfJfvGbz5UikQm/vjrkkHwsTa3MD87gS/4KOTT2ZdEdQqjcYVPTPSRO704O4Ezq4ifyWy3ddxpxt5pjQ4uSDmtgoY+NHCSntFFfwf3IWcM697bED5enXUPG376sBFfMVh4F8lQk1D+79/ZQdb7oUcJp2GlnPmni5IEflrJfjkMsPAao4QkqW8/nZKEKxWMctxaKMKVD4bH50TBLBvi9sKqGDdyJRz5vKkwmcwbbYjTC59Ht/HxcDIc9wlH5ZxwOIC1j1SplGr6GvtJATyDAgwKvCXlVVw315LwgUa1VcbxxW2C5bGOomuhasOaJl1e6hiWIuvL+pfub6QofSQ2Wq+XKuKnYNuWu+8aDI8dYvccoiUf/PVaaBO5rUVWKBtxS98m0Yq98/7y7cMzUq91953KMXQpWfO/A1IwhelviPamlaJEpdN1W/cD8zzHml6YbKV0vpebK/b7MedY1XBwNgF8cyOS96/KWa+7GZf+C7q23agj/s4C2/Z/VsMALw== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_listRelationships + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-serialized-units.ParamsDetails.json b/docs/api-reference/reference/products-controller-list-serialized-units.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-serialized-units.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-serialized-units.RequestSchema.json b/docs/api-reference/reference/products-controller-list-serialized-units.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-serialized-units.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-serialized-units.StatusCodes.json b/docs/api-reference/reference/products-controller-list-serialized-units.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-serialized-units.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-serialized-units.api.mdx b/docs/api-reference/reference/products-controller-list-serialized-units.api.mdx new file mode 100644 index 0000000000..5e673e9cec --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-serialized-units.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-list-serialized-units +title: "ProductsController_listSerializedUnits" +description: "ProductsController_listSerializedUnits" +sidebar_label: "ProductsController_listSerializedUnits" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMWKbBIGifpIQgCWhzZ3JVIhRxlkzX0PH2PPlkxlGwn0WJ3c/fJNKkZ/Tn8zZjjtXAlekXG2TMtEnHhna5SCjNnybs8R3+fm0Bz9Ebl5ivqa2soCClK5VWBhD6I5HYtrCpQJMJoIYXHh8p41CIhX6EUxopElIpWQoqQrrBQIlkLei7ZIpA3dinq+o4NQ+lswMDr4+GQPzSG1JuSBYpEiFqKybcWblRudNwGZMrkqCU4D7RCYDUYCB6NyxVhAAWLKhiLIYCvcuwLKVJnCS2xW1WWuUmjp8GnwL7XXdFu8QlT4ih4Dh+ZRjJ67/yPH0udxm4EpMAnVZQ5T/0+Pbm/PP37+nR+JeSbnc5JLXKEQqUrY7HnUek4EV8O7LvPUSowBLX8wXs6UYPMeXAWOXiF8wiZwVyH6LENJGPyPZ96NBkvJjrtjbPhuDf58Ouwt/jl6Lh3nE2y8W/ZZDRcfOhsaua8x+Z4aGVCu5kvhlYQ0D+i7wWjEXK3ZC31S8Zum3judvxS6Z0UZCjqOmWXJ0jK5CfkOk6as3v7/GVLZGNRR/pGXfo+mhCMXUooVJ45X7T44VPJ7iH1qNGSUXnY07an7V20HXVpm1a0YpxSRQzaoiIoGgC3BS9iV6KP887CgfNgKIDH4CqfIoTUlShhenLZG46PDvdY7rF8F5aTLpZXux9b1DvStMMA1hHgkwkU66JpJh5NMHxo5CK3qeLrxp7EPYnvIvH4uyRC6myWm5RCIz9CyJUykCKEA+wv+6BAVw1mCJU1DxXCo8or3JfFPYw/D2MtBaklt0N8prGLYpuAaeUNPcc2aYHKoxfJ7R33O6/3+dOtV4G0ctysLTECxJ1VIgaqNIPH0WDz7sHa6HoQtta9qjVvgsY6X6ibM8YNghuNLdu833ZKtoM/nC8UiUT89c8V0+BCae5henEGn/FZyA0AK6IyxtLYzEUw2vCdzy/O4CJXxHdltuuceXzi4LxEC3NSViuvoY0PnMW7dNYm4iGkzGLZeuvDx5uL5nbD9x824jyDmbOBDFWR5//+nRwlrR96lnDul8qar9FfkMD3K9m+Dj3MnMYgIUpqx5ujknCjvFGWRzNFuHTe8PqUyJtFRTye5SqErVwJJy6tCowm00ob4hrD59FsfNgf9Ydt1VEpVx0OYOkCFSrWm7bR3iiAHS3AtMAOF9jw8iq02/QkfKJBmStjOYErn/Naw9KtUKVhWaOmPjUsS5HE9r6D1J0UKxeI7dbrhQp47fO65umHCv1zA9ojB2rBx3+7FtoEHmuRZCoP2JG4rbni4LLNw0PYgfVaejupLKMX6zb/USAFsxj/kajvailWqHTMvHW7ME1TLOmFSae6c4puc+3PUy63quL4bGP4Ji+i92/KWa+bJ67cZ7R1vVVH/J0F1vX/JJwEiw== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_listSerializedUnits + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-translations.ParamsDetails.json b/docs/api-reference/reference/products-controller-list-translations.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-translations.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-translations.RequestSchema.json b/docs/api-reference/reference/products-controller-list-translations.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-translations.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-translations.StatusCodes.json b/docs/api-reference/reference/products-controller-list-translations.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-translations.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-translations.api.mdx b/docs/api-reference/reference/products-controller-list-translations.api.mdx new file mode 100644 index 0000000000..e41f1cf535 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-translations.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-list-translations +title: "ProductsController_listTranslations" +description: "ProductsController_listTranslations" +sidebar_label: "ProductsController_listTranslations" +hide_title: true +hide_table_of_contents: true +api: eJztmM1uGzcQx19lwJMNUJ9W23hvquwWLhDYtR33YBgGtZyVmHDJNTmrWhX2efoefbJiuGv5Q0ES33USRXKGfw5/HHG0Eb7CoMh4d6ZFJi6C13VOceYdBW8thntrIl0H5aJN06KQolJBlUgYoshuN8KpEkUmjBZSBHyoTUAtMgo1SmGcyESlaCmkiPkSSyWyjaB1xRaRgnEL0TR3bBgr7yJGHh8Ph/yhMebBVLysyIRopJh8beBGWaOTOCiUsagl+AC0RGA1GAlWxltFGEHBvI7GYYwQaot9IUXuHaEjdquqypo8eRp8jux7syvazz9jThyFwLEj00rGEHz4/rTca9yNgBT4qMrKctev05P7y9M/P51eXQv5ZqdXpOYWoVT50jjsBVQ6daTFgX33OUolxqgW31lnJ2pQ+ADeIQev9AGhMGh1TB67QDIj3/KpR5PxfKLz3rgYjnuTDz8Pe/Ofjo57x8WkGP9STEbD+YedTc18CNgeDy1N7Dbzt6ElRAwrDL1oNIL1C9bSvGTsto3n845fKr2TggwlXafs8gRJGXtCfsdJe3Zv5192RLYWTaJvtEvfRxOjcQsJpbKFD2WHHz5W7B7ygBodGWXjnrY9be+i7WiXtmlNS8YpV8SgzWuCsgVwm/ASdhWG1O8dHPgAhiIEjL4OOULMfYUSpieXveH46HCP5R7Ld2E52cXy+vnHFvUzadpjBOcJ8NFESnnRtB0rEw0fGvnEba74rbEncU/iu0g8/iaJkHtXWJNTbOUnCDlTRlKEcID9RR8U6LrFDKF25qFGWClb4z4t7mH8cRgbKUgtuBziM00lFNtEzOtgaJ3KpDmqgEFkt3dc77ze54/VXSXS0nOZtsBED5dVmRioygxWo8HTwoON0c2AXpu20WKBL2RdMb8te0/iOqh5o12X7Bq/+VAqEpn4469rxsDHytzD9OIMvuBayKeTXxJVKYjGFT4R0cXt/OriDC6sIn4ks93OYacZB+cVOrgi5bQKGrrAwFl6RBfdDTyEnCGsOm99+Hhz0T5r+OHDRnzBYOZdJEN1Avm/fydHWeeH1hLOw0I5808bIQn8sJLdchhg5jVGCUlS1346Iwk3KhjluDVThAsfDI9PiYKZ18TtmVUxbuVKOPF5XWIymdbaECcXPo9248P+qD/s0o3KOd1wACsfqVQp0XQV9pMCeMYEGBN4w8mrsG7vJOEjDSqrjONbWwfLYy1Dt0JVhiWN2qTUAixFlmr6VyjdSbH0kdhms5mriJ+CbRrufqgxrFvAVhygOR/77UZoE7mtRVYoG3FH3jbJioPL7uIdwjNQr2V3ncoxcilR8z8DUjCD6S+I5q6RYolKp6u26QameY4VvTDZSed8J7f36/dTzq+q5ths4/fmPiTvX5Wz2bQzrv0XdE2zVUf8nQU2zf8aEP4x +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_listTranslations + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-variants.ParamsDetails.json b/docs/api-reference/reference/products-controller-list-variants.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-variants.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-variants.RequestSchema.json b/docs/api-reference/reference/products-controller-list-variants.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-variants.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-variants.StatusCodes.json b/docs/api-reference/reference/products-controller-list-variants.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-variants.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list-variants.api.mdx b/docs/api-reference/reference/products-controller-list-variants.api.mdx new file mode 100644 index 0000000000..6542ff6ed7 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list-variants.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-list-variants +title: "ProductsController_listVariants" +description: "ProductsController_listVariants" +sidebar_label: "ProductsController_listVariants" +hide_title: true +hide_table_of_contents: true +api: eJztmM1uIzcMx1+F0CkB5M+47WZurpMWKbDYNMmmhyAI5BFta1cjTSSON64xz9P36JMV1IztJF5smrtPHuuD8xf5Iy16LXyJQZHx7kKLTFwGr6uc4sQ7Ct5aDA/WRLpVwShHUUhRqqAKJAxRZHdr4VSBIhNGCykCPlYmoBYZhQqlME5kolS0EFLEfIGFEtla0KrkHZGCcXNR1/e8MZbeRYw8P+z3+UNjzIMpWZnIhKilGH1v4lZZo5N+mCljUUvwAWiBwGowEiyNt4owgoJpFY3DGCFUFrtCitw7QkdsVpWlNXmy1PsS2fZ6X7SffsGc2AuB/UamkYwh+PD2stxr3PeAFPikitLy0K/js4er8z8/n1/fCPnqpNekphahUPnCOOwEVDoNpJcD2+6ylwqMUc3feM+e12DmA3iH7LzCB4SZQatjstg6kvn4kU09GA2nI513hrP+sDP68HO/M/3p5LRzOhvNhr/MRoP+9MPeoSY+BGzCQwsT28N8M7SAiGGJoRONRrB+zlrq54zdNf7cnfi50nspyFDSdc4mz5CUsWfk94w0sXu9/qolstlRJ/oG+/R9NDEaN5dQKDvzoWjxw6eSzUMeUKMjo2w80Hag7V20nezTNq5owTjlihi0aUVQNABuC17CrsSQxr2DIx/AUISA0VchR4i5L1HC+Oyq0x+eHB+wPGD5LixH+1je7H5sUe9I0x4jOE+ATyZSqoumGViaaDho5BO3ueJ7xoHEA4nvIvH0hyRC7t3MmpxiIz9ByJUykiKEI+zOu6BAVw1mCJUzjxXCUtkKD2XxAOP/h7GWgtSc2yGOaWqfeE/EvAqGVqlNmqIKGER2d8/9zstzvt1zFUgLz+3ZHBM53FJloqdK01sOepuX9tZG173lblvjJRb2TM41c9swtxHVwswHbIdk+/CbD4UikYk//rrh8PtYmgcYX17AV1wJuYn4gqhMzjNu5hMJrb8+XV9ewKVVxJdj3rcX5LTi6FOJDq5JOa2ChtYhcJEuz7M2844hZ/jK1loXPt5eNtcZvvDwJk4smHgXyVCVAP73n9FJ1tqhlYRPYa6c+TvZixL4QiXb12GAidcYJSRJ7fMmNhI24ZAwUYRzHwzPj4mCmVbEzxOrYtzKlXDm86rAtGVcaUNcVDgezcH73UG335YZlXOZYQeWPlKhUoFpO+uNAtjhAYwHPOPjhUu3eUj4RL3SKuM4U6tgea5h506o0rCcQVOIGmilyFIfv0XoXoqFj8Tr1+upivg52Lrm4ccKw6oBK62ecrjv1kKbyM9aZDNlI+5J2xZVcXTVJtox7EB6KbkdVG6VRNmKvwkpmL30l0N9X0uxQKVTaq3biXGeY0nPtuyVb87BbU79fs71VFXsl63vXuVBsv5dOet1s+LGf0VX11t1xN9ZYF3/B5GD9Y8= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_listVariants + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list.ParamsDetails.json b/docs/api-reference/reference/products-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..04896d1517 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"pageSize","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortDir","required":false,"in":"query","schema":{"default":"asc","enum":["asc","desc"],"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list.RequestSchema.json b/docs/api-reference/reference/products-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list.StatusCodes.json b/docs/api-reference/reference/products-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-list.api.mdx b/docs/api-reference/reference/products-controller-list.api.mdx new file mode 100644 index 0000000000..0d1a3a10ce --- /dev/null +++ b/docs/api-reference/reference/products-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-list +title: "ProductsController_list" +description: "ProductsController_list" +sidebar_label: "ProductsController_list" +hide_title: true +hide_table_of_contents: true +api: eJztmF9v2zYQwL/KgU8pIDu2422N31w7HTKgSBan2UMQBLR0stlSpEKe0qSGPs++xz7ZcBRjO1HmNnv2G0WR9/fHE08rYUt0kpQ1p5kYiXNnsyolP7GGnNUa3a1WnkQiSulkgYTOi9H1ShhZoBiJUi5QJMLhXaUcZmKUS+0xEcqIkbir0D2KRPh0iYUUo5UolFFFVYhRPxEZ5rLSFMb0WLI0UxVzdKKuk2cKZur7/1VSyIc47vW2VA56u3R66+jD4w81ZuhTp0qOnRiJjwp1BmSBd8P8uUlRlyenzKKla6rcG9xbOyGkT0Ui0LB/1/GJjRI3SUvjDSvwpTUePUsZ9HqNsG0fRJ2I4WsvrqRWWaAEcqk0ZglYB7REYKvRE9wrqyWhBwnzyiuD3oOrNHZFIlJrCA2xWFmWWqVB0uEXz7JX7TDZ+RdMA3OO6STVmIzOWffjZanNsB3zROCDLErNUx/G09uLkz8/n8wuW2mckZxrhEKmS2Ww41BmYSIoB5bd5SgV6D2jv1NPK2qQWwfWIAevsA4hZ2h8kBgDyadwl8ysPxzMh1naGeS9QWf4/tdeZ/7L0XHnOB/mg9/yYb83f99yamKdwyY9tFQ+OvNN0RI8unt0Ha8yBG0XbEu9zeJ1E8+Nx9uWMmeKgl0nLHKKJJWekm0JaXL3cv1FJLLZUQf6+m36PinvlVkkUEidW1dE/PChZPGQOszQkJLa72nb0/Ym2o7atI0rWjJOqSQGbV4RFA2A64IXsCvRhXlr4MA6UOTBobeVSxF8aktMYDy96PQGR+/2WO6xfBOWwzaWl5uPLWYb0jKLHowlwAflKdRF1UzcK684aWQDt6nk29yexD2JbyLxeCeJkFqTa5WSb8wPEHKl9CQJ4QC7iy5IyKoGM4TKqLsK4V7qCvdlcQ/jz8NYJ4LkgptPzmloUnmPx7Ryih5DUzpH6dCJ0fUN9zvP/fzvzrZAWlpufhfYNLq0FCNxKEt1eN8/XCtjXRwPNmFL8YwJbeh6Uh+xZVfiVBIHH60rJLduf/x1yYm2vlS3MD4/ha/IXV7M7ZKoDGFSJrch5zEyZ7PzUzjXkvgazPta6QwrDs5KNDAjaTLpMoiuw2m4JufxjL2DlDEro7QufLo6by4ufLXhTXyEYGKNJ0VVQPWfv4dHoyiHHhM4cwtp1PcgzyfAV6ckqkMHE5uhTyCYFMdPWUjgSjolDY8mknBhneL3YyKn5hXxeKKl92tzE5jatCowbBlXmSIuH5yPxvFet9/txYIiUy4oHMDSeipkKCWx4X6yADYgQAThWSTXB43wgQ5LLZXho1g5ze8aSK6FLBVb0W8qzZrKpfXEr1erufT42em65ummmWdSM+W5dGyafc7/+ndKKI9NP75zafwxsnv5C6/WBfe1PxavutzoW/8U+RnjNn81Nqtv+MEpXh5OaCKWKLNwXFdx2zhNsaStXa1PAktZn9ffT7hGy4pTsU7XixMXpMdX0mzbv1o1Ky7tVzR1LZ5sJ34W9U1d1/8Ci4aF7g== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-publish.ParamsDetails.json b/docs/api-reference/reference/products-controller-publish.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-publish.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-publish.RequestSchema.json b/docs/api-reference/reference/products-controller-publish.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-publish.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-publish.StatusCodes.json b/docs/api-reference/reference/products-controller-publish.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-publish.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-publish.api.mdx b/docs/api-reference/reference/products-controller-publish.api.mdx new file mode 100644 index 0000000000..9300cefed2 --- /dev/null +++ b/docs/api-reference/reference/products-controller-publish.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-publish +title: "ProductsController_publish" +description: "ProductsController_publish" +sidebar_label: "ProductsController_publish" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEElDiyuSuRCjlKkxp6nr5Hn6wYSraTeJFt7j6ZJjWjP2d+HHO8Fq5Cr8g4e6FFIube6TqjMHOWvCsK9PdVnRYmrIQUlfKqREIfRLJYC6tKFIkwWkjh8aE2HrVIyNcohbEiEZUiNgvZCkslkrWg54otAnljl6Jp7tgwVM4GDLw+Ho74Q2PIvKlYlEiEaKSYDIf7C7eqMDpKh1yZArUE54FWCKwGA8GjcYUiDKAgrYOxGAL4usC+kCJzltASu1VVVZgsehp8Dex7vS/apV8xI46C55CRaSWj987/+LHMadyPgBT4pMqq4Klfp2f3V+d/fDm/vhHyzU6vSaUFQqmylbHY86h0nIgvB/bd5yiVGIJa/uA9e1GD3HlwFjl4pfMIucFCh+ixCySj8Z5PPZqM04nOeuN8OO5NPv087KU/nZz2TvNJPv4ln4yG6ae9Tc2c99imh1YmdJv5y9AKAvpH9L1gNELhlqylecnYoo3nbscvld5JQYairnN2eYakTHFGbs9Jm7u3z191RLYWTaTvO1h+NiEYu5RQqiJ3vuzww6eK3UPmUaMlo4pwoO1A24doO9mnbVrTinHKFDFoaU1QtgBuC17ErkIf552FI+fBUACPwdU+QwiZq1DC9OyqNxyfHB+wPGD5ISwn+1je7H5sUe9I0w4DWEeATyZQrIumnXg0wXDSyEVuM8VXjAOJBxI/ROLpuyRC5mxemIxCKz9CyJUykCKEI+wv+6BA1y1mCLU1DzXCoypqPJTFA4z/H8ZGClJLboc4p7FzYpuAWe0NPcc2KUXl0Ytkccf9zut9vttulUgrx01Z5UKkhtupRAxUZQaPo8HmhYO10c1gZ9YGiDW9UHLNyLa4bfR0HPPeuinZDX5zvlQkEvH7nzeceRcqcw/T+QV8w2chN8leEVUxbsbmLkLQheryen4B80IR34vZbi+/8YmjywotXJOyWnkNXSzgIt6b8+7QHUPG3FWdtz58vp23Nxm+67ARnymYORvIUB3Z/fefyUnS+aFnCZd+qaz5O/oLEvguJbvXoYeZ0xgkREndeJMWCbfKG2V5NFOES+cNr0+JvElr4vGsUCFs5Uo4c1ldYjSZ1toQ1xPOR7vxYX/UH3YVRmVcYTiAnOBSxdrSNdUbBbAjA3YpfhXM7eEjfKJBVShj+XjWvuC1FpqFUJVhIaO2+rSkSpHE5n3j+E6KFaOWLMR6naqAX3zRNDz9UKN/bol65IiknOfFWmgTeKxFkqsi4J6ybSEVR1fd4TqGHUGvFXeTyjJjsRhz9y8FQxf/ZmjuGilWqHQ8TutuYZplWNELk72Szedue5jml7GIqprjso3dmxMQ3X9Xz3rdPnHjvqFtmq084u+ssGn+Azen71M= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_publish + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-recall.ParamsDetails.json b/docs/api-reference/reference/products-controller-recall.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-recall.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-recall.RequestSchema.json b/docs/api-reference/reference/products-controller-recall.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-recall.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-recall.StatusCodes.json b/docs/api-reference/reference/products-controller-recall.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-recall.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-recall.api.mdx b/docs/api-reference/reference/products-controller-recall.api.mdx new file mode 100644 index 0000000000..bf62b88984 --- /dev/null +++ b/docs/api-reference/reference/products-controller-recall.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-recall +title: "ProductsController_recall" +description: "ProductsController_recall" +sidebar_label: "ProductsController_recall" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEEtDiyuUuRCjlKkxp6nr5Hn6wYSnE+vMg2d59Mk5rRnzM/jjneCF9hUGS8O9MiE/PgdZ1TnHlHwVuL4TZgrqwVUlQqqBIJQxTZYiOcKlFkwmghRcC72gTUIqNQoxTGiUxUitZCipivsVQi2wh6rNgiUjBuJZrmhg1j5V3EyOvj4Yg/NMY8mIo1iUyIRorJcLi7cK2s0Uk5FMpY1BJ8AFojsBqMBPfGW0UYQcGyjsZhjBBqi30hRe4doSN2q6rKmjx5GnyN7HuzK9ovv2JOHIXAESPTSsYQfPjxY7nXuBsBKfBBlZXlqV+nJ7cXp398Ob28EvLNTi9JLS1CqfK1cdgLqHSaSC8H9t3nKJUYo1r94D07UYPCB/AOOXilDwiFQatj8tgFksl4z6ceTcbLic5742I47k0+/TzsLX86Ou4dF5Ni/EsxGQ2Xn3Y2NfMhYJseWpvYbeYvQ2uIGO4x9KLRCNavWEvzkrFFG8/nHb9UeiMFGUq6TtnlCZIy9oT8jpM2d2+fv+iIbC2aRN93sPxsYjRuJaFUtvCh7PDDh4rdQx5QoyOjbNzTtqftQ7Qd7dI2rWnNOOWKGLRlTVC2AG4LXsKuwpDmvYMDH8BQhIDR1yFHiLmvUML05KI3HB8d7rHcY/khLCe7WF49/9iifiZNe4zgPAE+mEipLpp24t5Ew0kjn7jliwWGPYl7Ej9E4vG7JELuXWFNTrGVnyDkShlJEcIB9ld9UKDrFjOE2pm7GuFe2Rr3ZXEP4/+HsZGC1IrbIc5papzYJmJeB0OPqU1aogoYRLa44X7n9T7f67ZKpLXnlqzyMUHD3VQmBqoyg/vR4Ol9g43RzWBr1YaHFb3QccnAtrA9qeko5p11U7Ib/OZDqUhk4vc/rzjvPlbmFqbzM/iGj0I+pXpNVKWoGVf4hEAXqPPL+RnMrSK+FbPdTnbTEwfnFTq4JOW0Chq6SMBZujUX3ZE7hJypqzpvffh8PW/vMXzTYSM+UTDzLpKhOpH77z+To6zzQ48SzsNKOfN38hcl8E1Kdq/DADOvMUpIkrrxU1IkXKtglOPRTBGufDC8PiUKZlkTj2dWxbiVK+HE53WJyWRaa0NcTTgf7caH/VF/2NUXlXN94QByfkuVKkvXUj8pgGcuYJvhV7HcnjzCBxpUVhnHZ7MOltdaZBZCVYZ1jNrS02IqRdZ17snvjRRr5ixbiM1mqSJ+CbZpePquxvDY8nTP8VhylhcboU3ksRZZoWzEHWHbIioOLrqDdQjP/LwW3E0qx4SlQsydvxSMXPqLoblppFij0ukobbqFaZ5jRS9Mdso1n7ntSZqfpwKqag7LNnRv+E/uv6tns2mfuPLf0DXNVh7xd1bYNP8BxJPsvw== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_recall + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-register-serialized-unit.ParamsDetails.json b/docs/api-reference/reference/products-controller-register-serialized-unit.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-register-serialized-unit.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-register-serialized-unit.RequestSchema.json b/docs/api-reference/reference/products-controller-register-serialized-unit.RequestSchema.json new file mode 100644 index 0000000000..f710cce330 --- /dev/null +++ b/docs/api-reference/reference/products-controller-register-serialized-unit.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"variantId":{"type":"string","description":"Optional — registers the unit under a specific variant rather than the base product."},"serialBatch":{"type":"string","description":"The real per-unit/per-batch value (Deel 4 segment [EEEEEEEE]) — not the \"00000000\" placeholder.","example":"00000001"}},"required":["serialBatch"],"title":"RegisterSerializedUnitDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-register-serialized-unit.StatusCodes.json b/docs/api-reference/reference/products-controller-register-serialized-unit.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-register-serialized-unit.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-register-serialized-unit.api.mdx b/docs/api-reference/reference/products-controller-register-serialized-unit.api.mdx new file mode 100644 index 0000000000..5668d7fe99 --- /dev/null +++ b/docs/api-reference/reference/products-controller-register-serialized-unit.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-register-serialized-unit +title: "ProductsController_registerSerializedUnit" +description: "ProductsController_registerSerializedUnit" +sidebar_label: "ProductsController_registerSerializedUnit" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uGzcQgK8y4JMNrCzJVttEb47sAi5Q2LWd9MExgtFypGXCJTfkrGNHWKCH6B16jx6lJymGu5Isy0hqoI/Si2n+DOfn4yyHC+UrCsjGuzOtxuoieF3nHCfecfDWUvgQaG4iU7iiYNCar6TfOsMqUxUGLIkpRDW+WSiHJamxMlplKtDn2gTSasyhpkwZp8aqQi5UpmJeUIlqvFD8UMmKyMG4uWqa23YhRX7j9YPMeCon947JsQxhVVmTJ837H6N30rcl2k8/Up50DWInG4oyeofBoGOx+KkWmdIU82AqEazG6jw10MI/f/wJS1dE4IKgdoahdpoCIMSKcjMzOXSyISAXFIALdGn2FCNB1br3QDWZismfb5Dz4vtqXBcEgdBCRaEnG/elMZXFcIe2Jtg7IbIwgkjzkhzDzWn3u91PujvPSY/3atD93iuoLOZUeKspHKhM0T2WlRU1uilD1TSPo3mzofVtpthwmn/5LCQn7FXTtCJi5V1s3X84GMqfTQvFJaPBYHvgHVqjU5xhhsaSzsCHZEoHC9wZb5EpAsK0jsZRjBBqS2LS/0QMheDD96flXtNzwVw79s3xyYfL09/enl5dbwX5inFqCUrMC+OoFwh16kibg8hO4JQUI86/s8+W12DmA3hH4rzSB4KZIatjktg58vnzsJaph6PD6UjnvcPZ4LA3evXjoDf94eh17/VsNDv8aTYaDqavtoya+BCoDQ8XJnbGfDFcQKRwR6EXjSawfi66PKEt+XNt8WNNH8F3KiJPiNHYlrhNIW3sns6/7IhcMzp6DstfTYzGzTMo0c58KDv86L4S8ZAH0uTYoI072na0vYi2o23ajmsuBKccWUCb1gxlC+Aq4SXsKgqp3zvY8wEMRwgUfR1ygpj7ijI4PrnsDQ6P9ndY7rB8EZajbSyv1x9b0mvStKeY7hV0byKnvGjajjsTjQSNfeI2R7lJ7kjckfgiEl9/k0TIvZtZk3Ns1U8QSqaMjEywRwfzA0DQdYtZuq9/rqm9Lu/S4g7G/w5jkynGuZS5qqvgoqyJlNfB8EMqf6eEgYIa39xKHbtp50uq6pK48FKKVz62VTYXaqz6WJn+3bC/3L+/MLrpx9XqVBRGlcrKu7Ykf6ThlaDcYrjUs+NbbO66sq7xsw8lshqrX36/FiJ8rMwHOL44g0/0oLIlBAVzlfwp5+VyXbefLpnYqLPXzGzUvY8KTXklmPlEWReL86uLM7iwyHLxFgW2q3OZsXdekYMrRqcxaOicDWfpYj7rTvU+5AJ21Uk7gF/fXbRXJblMySI5tDDxLrLhOh2Ov/8aHY07OfyQwXmYozNfk7yYgVzWsm47CjDxmmIGSaWuvYx7Bu9aT8QMJsg098HI+DFzMNOapT2xGONK3QxOfF5LIZ820oYlYUlgW8MHB8ODQZfCMJcUJpEQZEpMyat7jVlqAGv0Vq8YsGYPOvg2vLs67kz33K8sGidRqoOVsZbLG4WVEc2Gbb5rz0amxukZaAvP20wVgvX4Ri0W8iLyNtimke7PNYWHFtpEzVQIuFkobaK0tRrP0EbaUnGVw9XeZXeu92EN6abqXSc6wTh9B+ThIVPCdXq5am6bTBWEOp3kRTcwaffoXcvy9cKtb0aTLVcc5zlV/M25t4+O+sV5yvjT7tWrTF8KFfCLZDX80irpk83pDKe+hbLo5nXK9qqVKQxgzY/fk56c7WTVs25YLNoZ1/4TuaZZeYXlf3FM0/wL9p/uVQ== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_registerSerializedUnit + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-register-serialized-units-bulk.ParamsDetails.json b/docs/api-reference/reference/products-controller-register-serialized-units-bulk.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-register-serialized-units-bulk.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-register-serialized-units-bulk.RequestSchema.json b/docs/api-reference/reference/products-controller-register-serialized-units-bulk.RequestSchema.json new file mode 100644 index 0000000000..28ca6eb4c0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-register-serialized-units-bulk.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"variantId":{"type":"string","description":"Optional — registers the unit under a specific variant rather than the base product."},"serialBatch":{"type":"string","description":"The real per-unit/per-batch value (Deel 4 segment [EEEEEEEE]) — not the \"00000000\" placeholder.","example":"00000001"}},"required":["serialBatch"],"title":"RegisterSerializedUnitDto"}}},"required":["items"],"title":"BulkRegisterSerializedUnitDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-register-serialized-units-bulk.StatusCodes.json b/docs/api-reference/reference/products-controller-register-serialized-units-bulk.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-register-serialized-units-bulk.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-register-serialized-units-bulk.api.mdx b/docs/api-reference/reference/products-controller-register-serialized-units-bulk.api.mdx new file mode 100644 index 0000000000..74fd21f951 --- /dev/null +++ b/docs/api-reference/reference/products-controller-register-serialized-units-bulk.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-register-serialized-units-bulk +title: "ProductsController_registerSerializedUnitsBulk" +description: "ProductsController_registerSerializedUnitsBulk" +sidebar_label: "ProductsController_registerSerializedUnitsBulk" +hide_title: true +hide_table_of_contents: true +api: eJztmF1uGzcQgK8y4JMNrP5stU32zZZdwAUCu7aTPihCQC1HWiZcckPOOnaEBXqI3qH36FF6kmK4q383qYE+Si9e82c4nPk45MxCuBK9JO3slRKpuPFOVRmFkbPknTHoP3ic60Do79BrafRXVG+tpnBemU8iEaX0skBCH0Q6XggrCxSp0EokwuPnSntUIiVfYSK0FakoJeUiESHLsZAiXQh6KnlGIK/tXNT1pJmIgc6deuIRu3IyZwktcZcsS6OzqH7vY3CW2/ZEu+lHzIh19bxZ0hi4VxMWYWOY9F4+iWSv/V+mP0ivpSW22u4mEqEwZF6XrJdIxXX8kAb+/v0PWJozAOUIldUElVXoQUIoMdMznUErG7ykHD1QLm0cPZUBoWxc1BV1IkL0ybmkLP++Gvc5gkdpoETf4YV7/DHlyfAgTYVwdIFoYAgB5wVagvFl+5scR92to6jHe9Fvf+8FlEZmmDuj0HdFIvBRFqVhNdohA1HXmzCMt7SeJII0xfG3z4J2QU7UuxIaH23MZRq/OT8KCKWzoXHfSX/Af7YtxCYd9vv7He+k0SpiBjOpDaoEnI+maFmFB+2MJAwgYVoFbTEE8JVBNsn/BCx67/z3h2VO4XMwrB1zfnbx4fby17eXd/d7kNyRnBqEQma5ttjxKFVsiIsDy47gFRiCnH9nnT2rwcx5cBbZeIXzCDONRoUosTXk8+dpLVMNhifToco6J7P+SWf46sd+Z/rD6evO69lwdvLTbDjoT1/tbWrkvMfGPZTr0G7mi6YcAvoH9J2gFYJxc9Zlh7Voz/WONzXdAPCSRV4gSW0a4raFNL7bHX/bErlmdPgclm90CNrOEyikmTlftPjhY8niIfOo0JKWJhxoO9D2ItpO92k7qyhnnDJJDNq0IigaAFcBL2JXoo/tzsKR86ApgMfgKp8hhMyVmMDZxW2nf3J6fMDygOWLsBzuY3m/vmxRrUlTDkN8l+CjDhTjom4aHnTQ7DRykdtM8mv2QOKBxBeR+PqbJELm7MzojEKjfoSQI2UgSQhH2J13QYKqGszie/9zhc1z+xAWDzD+dxjrRJCcc5Yt2gwwJkABs8preorZ9xSlRy/S8YTT6O19vjizL5ByxzWB0oVIEmfuqejJUvceBr2lEr2FVnUvrETEzDL0po2QxoSs9Yaudwx1A+RS45Z03n3blLQfPztfSBKp+OW3e2bDhVJ/gLObK/iEnK63OOREZbQsn5zbdQHhcknHKuEfb+Xua462cumN5HVSc+li5iJ7rYeu726u4MZI4uc4K7Of8/OIo+sSLdyRtEp6Ba0L4Co+12ftWT+GjHEvW2ldePPupnlA8ROLJ/FRhpGzgTRV8cj89efwNG3l0FMC134urf4a5YUE+AmXtMuhh5FTGBKIKrXfSxoSeNfYIiQwkoRz5zX3nxF5Pa2Iv0dGhrBSN4ELl1VcHogLKU0cxtjJzcb73UG33wY2mXFgY68wQ4WMIa0tES01gDWQq9oIrImEiCS0TG7ZeBUKCB+pVxqpLQeLyhvua3AdC1lq1m/QxMLm3CQijRWqXWoZOl5okoicoU/HYrHgostbb+qamz9X6J8amiNEU8ZhvBBKB/5WIp1JE3BP01WYF0e37dE/hjW92ztYFqQs8x2vCq5NJIKBj7W1yGSOUsXDvmg7Rs0anXuevp64d63UyXLGWZZhSd8cO9kIBDfX8VKYtnW5Il4mwssvHPjkl0ZJF/ccD3dsWwgj7byKF4JoZDIQsqLNktXOoY+7etYMi0Uz4t59QlvXK6sQ/8+Gqet/ALFKKZo= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_registerSerializedUnitsBulk + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-remove-relationship.ParamsDetails.json b/docs/api-reference/reference/products-controller-remove-relationship.ParamsDetails.json new file mode 100644 index 0000000000..9711f0f2b6 --- /dev/null +++ b/docs/api-reference/reference/products-controller-remove-relationship.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"relationshipId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-remove-relationship.RequestSchema.json b/docs/api-reference/reference/products-controller-remove-relationship.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-remove-relationship.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-remove-relationship.StatusCodes.json b/docs/api-reference/reference/products-controller-remove-relationship.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-remove-relationship.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-remove-relationship.api.mdx b/docs/api-reference/reference/products-controller-remove-relationship.api.mdx new file mode 100644 index 0000000000..cedf66d369 --- /dev/null +++ b/docs/api-reference/reference/products-controller-remove-relationship.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-remove-relationship +title: "ProductsController_removeRelationship" +description: "ProductsController_removeRelationship" +sidebar_label: "ProductsController_removeRelationship" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urp0CKbrYNMmmhyAIaHFscVciFXLkJhX0PH2PPlkxlOI49mJ300NPPpnmx/DP4Y8jDmvhSvSKjLPnWiTiwjtdpRRmzpJ3eY7+3mPh1niJeewVMlMKKUrlVYGEPojkthZWFSgSYbSQwuNDZTxqkZCvUApjRSJKRZmQIqQZFkoktaCnkkcE8sauRNPIjRG/NdP5fzd4xwND6WzAwO3j4ZB/NIbUm5InEIkQjRSTLzXcqNzoKAOWyuSoJTgPlCGwGgwEa+NyRRhAwaIKxmII4Ksc+0KK1FlCS2xWlWVu0mhp8Cmw7XpftFt8wpTYrZ63g0wrGb13/tvdUqdx3wNS4KMqypyrfp7O7y/Pfv94dnUt5M5Kr0gtcoRCpZmx2POodKyIkwPb7rOXCgxBrb4xz57XYOk8OIvsvMJ5hKXBXIdosXMkY/c1m3o0GS8mOu2Nl8Nxb/Lux2Fv8cPJae90OVmOf1pORsPFu71FzZyPGGEAykzoFvOnoQwC+jX6XjAaIXcr1tJsM3bb+vNlxdtK76QgQ1HXGZucIymTz8ntGWn3brf/ZUdkO6KJ9I326XtvQjB2JaFQ+dL5osMPH0s2D6lHjZaMysOBtgNtb6LtZJ+2aUUZ45QqYtAWFUHRArgJeBG7En2sdxaOnAdDATwGV/kUIaSuRAnT+WVvOD45PmB5wPJNWE72sbx++diifiFNOwxgHQE+mkAxLpq2Ym2C4U0jF7lNFV9fDiQeSHwTiadfJRFSZ5e5SSm08iOEHCkDKUI4wv6qDwp01WKGUFnzUCGsVV7hISweYPx+GBspSK04v+I9jVkZjwmYVt7QU8y7Fqg8epHc3nG+83qd35vKFUiZ49xPY46EMbmjTCRioEozWI8Gz7MPaqObwXZ6Fgb162yt4ZQsOpF1b6m9YqxbJJ81d6zz+rsq2RV+cb5QJBLx6x/XTIcLpbmH6cU5fMYnIZ+ByIjK6Ftjly6C0rnzw9XFOVzkivjuzOP2GIg9jj6UaOGKlNXKa+j8Befxbr3sDuYxpMxm2Vnrw/ubi/a2w/chHsTnDmbOBjJURb7/+XtyknR26EnCB79S1vzV+kkC37dkNx16mDmNQUKU1JWft07CjfJGWS7NFOHKecPtUyJvFhVxeZarEDZyJcxdWhUYh0wrbYhjDu9Hu/Bhf9QfdlFIpRyF2IGlC1SoGH+6JPxZAbzQAy09sIPPK8duDivhIw3KXBnLx7nyObe1XN0KVRoWNWqjVUu2FEn3erCFF9fuPAfcSZG5QGymrhcq4EefNw1XP1Ton1rq1uy1BbNwWwttApe1SJYqD7ineBOQxdFld0iP4YWy1yvpKpVlDmNQ51cEKRjM+P7BDxn/44w73mnuGikyVDoGhbrrNE1TLGlr+N6Hh6PHJg7Mz347uz4TUqiK92uzpzunNE7wRXV13fa4dp/RNs1GLPF/1tg0/wJIAlad +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_removeRelationship + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-remove-translation.ParamsDetails.json b/docs/api-reference/reference/products-controller-remove-translation.ParamsDetails.json new file mode 100644 index 0000000000..c686b24895 --- /dev/null +++ b/docs/api-reference/reference/products-controller-remove-translation.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"locale","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-remove-translation.RequestSchema.json b/docs/api-reference/reference/products-controller-remove-translation.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-remove-translation.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-remove-translation.StatusCodes.json b/docs/api-reference/reference/products-controller-remove-translation.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-remove-translation.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-remove-translation.api.mdx b/docs/api-reference/reference/products-controller-remove-translation.api.mdx new file mode 100644 index 0000000000..d83ffca3d6 --- /dev/null +++ b/docs/api-reference/reference/products-controller-remove-translation.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-remove-translation +title: "ProductsController_removeTranslation" +description: "ProductsController_removeTranslation" +sidebar_label: "ProductsController_removeTranslation" +hide_title: true +hide_table_of_contents: true +api: eJztmM1uGzcQgF9lwJMNUL9W23hvquQCLhrEtRX3YBgGtRxJTLjkmpxV7Qr7PH2PPlkx3LVkW0ES99CTTqZJznB+Po44uxG+xKDIeHeuRSYugtdVTnHiHQVvLYa7gIVf4ywoF23aKKQoVVAFEoYospuNcKpAkQmjhRQB7ysTUIuMQoVSGCcyUSpaCSlivsJCiWwj6LFkiUjBuKWoa7lVYn2uLP5nRbcsGEvvIkZeH/b7/EdjzIMpk/mZELUUoy8tXCtrdHISFspY1BJ8AFohsDUYCdbGW0UYQcG8isZhjBAqi10hRe4doSNWq8rSmjxp6n2KrHuzb7Sff8KcOJyBs0CmMRlD8OHb23KvcT8CUuCDKkrLUz+Pp3eXZ79/PLuaCfnK0ytSc4tQqHxlHHYCKp0m0uHAurscpQJjVMtvnLMXNVj4AN4hB6/wAWFh0OqYNLaBZNq+plMPRsP5SOed4aI/7Ize/djvzH84Oe2cLkaL4U+L0aA/f7fn1MSHgE16aGVi68yfhlYQMawxdKLRCNYv2Zb6OWM3TTx3Hj+39FYKMpTsOmOVUyRl7JT8npImd6/3X7ZENhJ1om+wT997E6NxSwmFsgsfihY/fChZPeQBNToyysYDbQfa3kTbyT5t44pWjFOuiEGbVwRFA+C24CXsSgxp3js48gEMRQgYfRVyhJj7EiWMp5ed/vDk+IDlAcs3YTnax3K2+7FFvSNNe4zgPAE+mEipLppmYm2i4aSRT9zmil8tBxIPJL6JxNOvkgi5dwtrcoqN+QlCrpSRFCEcYXfZBQW6ajBDqJy5rxDWylZ4KIsHGL8fxloKUkvuqzinqRljmYh5FQw9pn5rjipgENnNLfc7L/38zg6uQFp57vg0WiRMPR2tRCZ6qjS99aD3dHhvY3Tdo51w7G2aHq3mRiyFjq19ZuMVw9yA+GRpSzh73U7JdvCLD4UikYlf/5gxEz6W5g7GF+fwGR+FfMJgRVSmiBq38AmPNogfri7O4cIq4hczy+1lPu04+lCigytSTqugoY0SnKcX9aK9jseQM5Flq60L768vmjcOv4JYiG8bTLyLZKhKVP/z9+gka/XQo4QPYamc+asJlQR+Zcn2OAww8RqjhGRSO35KmIRrFYxyPJoowqUPhtfHRMHMK+LxxKoYt+ZKmPq8KjCJjCttiCsN56NxvN8ddPtt7VE51x4OYOkjFSpVnbblfrIAdsxAwwy8hOZFXLc3lPCBeqVVxvEdroLltYamG6FKwzYNmhLV4CxFlj4VPIeKJ9vW/1aKlY/E0pvNXEX8GGxd8/R9heGxYW3NsZozATcboU3ksRbZQtmIe4Zui684umwv5DHs2HrpQDupHNOXCjh/MZCCcUzfOPhjxf94YhuV+raWYoVKp4u/aRfHeY4lPRPb+3HhCrG97NOz385mZ0IKVXF6til8dSfTAV+0arNpdsz8Z3R1vTWS+H+2sa7/BUmwR3I= +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_removeTranslation + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-retire.ParamsDetails.json b/docs/api-reference/reference/products-controller-retire.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-retire.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-retire.RequestSchema.json b/docs/api-reference/reference/products-controller-retire.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-retire.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-retire.StatusCodes.json b/docs/api-reference/reference/products-controller-retire.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-retire.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-retire.api.mdx b/docs/api-reference/reference/products-controller-retire.api.mdx new file mode 100644 index 0000000000..521e74cb3d --- /dev/null +++ b/docs/api-reference/reference/products-controller-retire.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-retire +title: "ProductsController_retire" +description: "ProductsController_retire" +sidebar_label: "ProductsController_retire" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEElDiyuSuRCjly4xp6nr5Hn6wYSnE+vMg2d59Mk5rRnzM/jjneClehV2ScvdAiEXPvdJ1RmDlL3hUF+nuPZDwKKSrlVYmEPohksRVWlSgSYbSQwuNDbTxqkZCvUQpjRSIqRSshRchWWCqRbAVtKrYI5I1diqa5Y8NQORsw8Pp4OOIPjSHzpmJNIhGikWIyHO4v3KrC6KgccmUK1BKcB1ohsBoMBGvjCkUYQEFaB2MxBPB1gX0hReYsoSV2q6qqMFn0NPga2Pd2X7RLv2JGHAXPESPTSkbvnf/xY5nTuB8BKfBRlVXBU79Oz+6vzv/4cn59I+SbnV6TSguEUmUrY7HnUek4EV8O7LvPUSoxBLX8wXv2oga58+AscvBK5xFyg4UO0WMXSCbjPZ96NBmnE531xvlw3Jt8+nnYS386Oe2d5pN8/Es+GQ3TT3ubmjnvsU0PrUzoNvOXoRUE9Gv0vWA0QuGWrKV5ydiijefzjl8qvZOCDEVd5+zyDEmZ4ozcnpM2d2+fv+qIbC2aSN93sPxsQjB2KaFURe582eGHjxW7h8yjRktGFeFA24G2D9F2sk/btKYV45QpYtDSmqBsAdwVvIhdhT7OOwtHzoOhAB6Dq32GEDJXoYTp2VVvOD45PmB5wPJDWE72sbx5/rFF/UyadhjAOgJ8NIFiXTTtxNoEw0kjF7nNFN8wDiQeSPwQiafvkgiZs3lhMgqt/AghV8pAihCOsL/sgwJdt5gh1NY81AhrVdR4KIsHGP8/jI0UpJbcDnFOY+PENgGz2hvaxDYpReXRi2Rxx/3O632+122VSCvHLVnlQoSGu6lEDFRlBuvR4Ol9g63RzWBn1YaHFb3Qcc3AtrA9qeko5p11U7Ib/OZ8qUgk4vc/bzjvLlTmHqbzC/iGGyGfUr0iqmLUjM1dRKAL1OX1/ALmhSK+FbPdXnbjE0eXFVq4JmW18hq6SMBFvDXn3ZE7hoypqzpvffh8O2/vMXzTYSM+UTBzNpChOpL77z+Tk6TzQxsJl36prPk7+gsS+CYlu9ehh5nTGCRESd34KSkSbpU3yvJopgiXzhtenxJ5k9bE41mhQtjJlXDmsrrEaDKttSGuJpyPduPD/qg/7OqLyri+cAA5v6WKlaVrqZ8UwDMXsMvwq1juTh7hIw2qQhnLZ7P2Ba+1yCyEqgzrGLWlp8VUiqTr3KPfOylWzFmyENttqgJ+8UXT8PRDjX7T8rTmeKSc5cVWaBN4rEWSqyLgnrBdERVHV93BOoZnfl4L7iaVZcJiIebOXwpGLv7F0Nw1UqxQ6XiUtt3CNMuwohcme+Waz9zuJM0vYwFVNYdlF7o3/Ef339Wz3bZP3LhvaJtmJ4/4Oytsmv8AVWXtNw== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_retire + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-set-translation.ParamsDetails.json b/docs/api-reference/reference/products-controller-set-translation.ParamsDetails.json new file mode 100644 index 0000000000..c686b24895 --- /dev/null +++ b/docs/api-reference/reference/products-controller-set-translation.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"locale","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-set-translation.RequestSchema.json b/docs/api-reference/reference/products-controller-set-translation.RequestSchema.json new file mode 100644 index 0000000000..ff79526071 --- /dev/null +++ b/docs/api-reference/reference/products-controller-set-translation.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"title":"SetProductTranslationDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-set-translation.StatusCodes.json b/docs/api-reference/reference/products-controller-set-translation.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-set-translation.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-set-translation.api.mdx b/docs/api-reference/reference/products-controller-set-translation.api.mdx new file mode 100644 index 0000000000..413446dbdb --- /dev/null +++ b/docs/api-reference/reference/products-controller-set-translation.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-set-translation +title: "ProductsController_setTranslation" +description: "ProductsController_setTranslation" +sidebar_label: "ProductsController_setTranslation" +hide_title: true +hide_table_of_contents: true +api: eJztmNtuGzcQhl9lwCsHWB1sq22iO0V2ARcI4tpOemEYwWg5kphwyQ0569gV9nn6Hn2yYsi1JFtGDkXRK11pxcNw+PPjkMOV8jUFZOPdmVZjdR68bkqOU+84eGspfIjEVwFdtKmVKlSNAStiClGNr1fKYUVqrIxWhQr0uTGBtBpzaKhQxqmxqpGXqlCxXFKFarxSfF9Lj8jBuIVq22JtxPoSLf1rQze5I0V+7fW9tHhqp/SOybFUYV1bU6ZJDT5G76Rsx7SffaSSZdJBhGJDUWqzuzsOFEpTLIOpk1LPzVSxYStFl8Sd1lvinrBXbSvNAsXau5hHOxoO5eeRbSWjjZ6reI/W6GQO5mgs6QJ8AF4SdNrArfEWmSIgzJpoHMUIobHUV/+ZQBSCD99uVnr9jI6Fojus6qTT68nJh4vT39+dXl6pJ/KqS8aZJaiwXBpHvUCoU0EaHMR2X1SqKEZcfGOcHdVg7gN4RyJe5QPB3JDVMVnshJQd8zWb+nB0NBvpsnc0Hx71Ri9/HvZmPx2/6r2aj+ZHv8xHh8PZy51JTX0IlJeHlyZ2k/lieAmRwi2FXjSawPqF+NJub5XrrOdmxtue3mzYOxWTJ8RobCbusZG8dk/bX3REbhgdDQ936XtjYjRuUUCFdu5D1eFHd7WYhzKQJscGbdzTtqfth2g73qVt0vBScCqRBbRZw1BlANcBL2FXU0jl3sGBD2A4QqDom1ASxNLXVMDk5KI3PDp+scdyj+UPYTnaxfJqc9iS3pCmPUVwnoHuTOQUF00uuDXRyKKxT9yWKDevPYl7En+IxFdfJRFK7+bWlByz+wlCiZSRkQkOqL/oA4JuMmYEjTOfG4JbtA3tw+Iexu+HUfIcXEh6KGuaEkrpE6lsguH7lDbOCAMFNb6+kbTt8Ty/JwutiJdeUta6SexIbjhWA6zN4PZw8DDsYGV0O+BNzzhY5SSzlUwyiSZ+bnl3KRhnBB987NiW+XZFRffxqw8Vshqr3/64Ehp8rM0HmJyfwSe6V8UDAEvmOmkpe+Vik6KePvCwzoDXqDxWZJNhGjf3Ca1uAd5enp/BuUWW27aMvNM3tTh4W5ODS0anMWjoFIazdBufd1v5BZRCc91Z68Ob9+f5fiQ3KOkkOxWm3kU23KQd8fdfo+NxZ4fvC3gbFujMn1nsAuSGVnTDUYCp1xQLSC513w+LXcB7DAadfE2RaeGDkfoJczCzhuV7ajHGtbsFnPiyqSh1mTTasEQpWdE88WH/sD/s4haWErdkCWofuUK3pfmDB7DhDSIxPAbu+dSe6Y4HtUXjZHGaYKUuw3itsDbi0GGObXkfFGqcnkq2mZTC7unjplBLH1l6r1YzjPQu2LaV4s8NhfuM6q0INZPlv14pbaJ8azWeo4204+g6aquDi24nv4ANmo8n0BWiE3hT5JenhkIJzemNRx5r/scRO1Xam7ZQS0KdIsaqq5zmcXpXYmLTeedsEp9zj0lZUs1fbXuzFVrO38nBMuvekqp0IKmAXyR44pfsp6/zEspjk5StlEW3aNKhorJJoQ4bQWKNzZMwkib1rBKrVW5x5T+Ra9u1MCz/RZe2/QcZk8kB +sidebar_class_name: "put api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_setTranslation + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-unpublish.ParamsDetails.json b/docs/api-reference/reference/products-controller-unpublish.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-unpublish.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-unpublish.RequestSchema.json b/docs/api-reference/reference/products-controller-unpublish.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-unpublish.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-unpublish.StatusCodes.json b/docs/api-reference/reference/products-controller-unpublish.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-unpublish.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-unpublish.api.mdx b/docs/api-reference/reference/products-controller-unpublish.api.mdx new file mode 100644 index 0000000000..5eea552cc2 --- /dev/null +++ b/docs/api-reference/reference/products-controller-unpublish.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-unpublish +title: "ProductsController_unpublish" +description: "ProductsController_unpublish" +sidebar_label: "ProductsController_unpublish" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2TTgxEElDiyuSuRCjlKkxp6nr5Hn6wYSrGdeLFp7j6ZJjWjP2d+HHO8Fq5Cr8g4e6FFIube6TqjMHOWvCsK9Pe1req0MGElpKiUVyUS+iCSxVpYVaJIhNFCCo8PtfGoRUK+RimMFYmoFLFZyFZYKpGsBT1XbBHIG7sUTXPHhqFyNmDg9fFwxB8aQ+ZNxbJEIkQjxWQ43F+4VYXRUTzkyhSoJTgPtEJgNRgIHo0rFGEABWkdjMUQwNcF9oUUmbOEltitqqrCZNHT4Gtg3+t90S79ihlxFDwHjUwrGb13/v3HMqdxPwJS4JMqq4Knfp2e3V+d//Hl/PpGyDc7vSaVFgilylbGYs+j0nEivhzYd5+jVGIIavnOe/aiBrnz4Cxy8ErnEXKDhQ7RYxdIhuNHPvVoMk4nOuuN8+G4N/n087CX/nRy2jvNJ/n4l3wyGqaf9jY1c95jmx5amdBt5i9DKwjoH9H3gtEIhVuylmaXsUUbz+2Od5XeSUGGoq5zdnmGpExxRm7PSZu7t89fdUS2Fk2k7ztYfjYhGLuUUKoid77s8MOnit1D5lGjJaOKcKDtQNuHaDvZp21a04pxyhQxaGlNULYAbgpexK5CH+edhSPnwVAAj8HVPkMImatQwvTsqjccnxwfsDxg+SEsJ/tY3mx/bFFvSdMOA1hHgE8mUKyLpp14NMFw0shFbjPFl4wDiQcSP0Ti6Q9JhMzZvDAZhVZ+hJArZSBFCEfYX/ZBga5bzBBqax5qhEdV1HgoiwcY/z+MjRSkltwOcU5j78Q2AbPaG3qObVKKyqMXyeKO+53X+3yn4SqRVo4bs8qFyA03VIkYqMoMHkeDl1cO1kY3g13DNkisa0fNNWPbIveiqWOZ99dNyW7wm/OlIpGI3/+84ey7UJl7mM4v4Bs+C/mS8BVRFWNnbO4iCF24Lq/nFzAvFPHdmO32chyfOLqs0MI1KauV19DFAy7i3TnvDt4xZMxe1Xnrw+fbeXub4fsOG/G5gpmzgQzVkd9//5mcJJ0fepZw6ZfKmr+jvyCB71Oyex16mDmNQUKU1I1fUiPhVnmjLI9minDpvOH1KZE3aU08nhUqhI1cCWcuq0uMJtNaG+KawvloNz7sj/rDrsqojKsMB5BTXKpYX7rG+kUBbOmA3SS/CufmCBI+0aAqlLF8SGtf8FoLzkKoyrCUUVuDWl6lSGILv3V9J8WKgUsWYr1OVcAvvmgann6o0T+3VD1yVFLO9WIttAk81iLJVRFwT9umoIqjq+6QHcOWoteau0llmbNYlPlfACkYvPh3Q3PXSLFCpeOxWncL0yzDinZM9ko3n7/NkZpfxmKqao7MJnpvTkF0/10963X7xI37hrZpNvKIv7PCpvkPSv3zwg== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_unpublish + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-update.ParamsDetails.json b/docs/api-reference/reference/products-controller-update.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-update.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-update.RequestSchema.json b/docs/api-reference/reference/products-controller-update.RequestSchema.json new file mode 100644 index 0000000000..56f49eb713 --- /dev/null +++ b/docs/api-reference/reference/products-controller-update.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"string"},"status":{"type":"string","enum":["DRAFT","ACTIVE","PUBLISHED","RECALLED","DISCONTINUED","ARCHIVED"]},"publicationState":{"type":"string","enum":["PRIVATE","PARTNER_ONLY","PUBLIC","SCHEDULED"],"description":"Audience dimension, independent of `status` (ADR-024, Deel 7 §68-69). Not yet wired into any cross-org visibility check — see ADR-024 consequences."},"gtin":{"type":"string","description":"GTIN-8/12/13/14 (ADR-005) — checksum-validated, not confirmed against GS1's registry."},"expectedVersion":{"type":"number","description":"Optimistic concurrency (ADR-024, Deel 22 §110-111). Optional — omit for the previous last-write-wins behavior; supply the version you last read to get a real 409 VERSION_CONFLICT if someone else updated the product first."}},"title":"UpdateProductDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-update.StatusCodes.json b/docs/api-reference/reference/products-controller-update.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/products-controller-update.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-update.api.mdx b/docs/api-reference/reference/products-controller-update.api.mdx new file mode 100644 index 0000000000..b8c6aeaef1 --- /dev/null +++ b/docs/api-reference/reference/products-controller-update.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-update +title: "ProductsController_update" +description: "ProductsController_update" +sidebar_label: "ProductsController_update" +hide_title: true +hide_table_of_contents: true +api: eJztWF1uGzkSvkqBL2sDrV9rMrH2SZGUiRYeyyvJXgwMw0OxSxIn3WSHrJatFRrYQ+wdco8cZU+yKHZLcixPZgLMo5/U4k/VV1VfFcnaCpuhk6StGcWiK66cjXNFvm8NOZsk6O7zLJaEIhKZdDJFQudF93YrjExRdIWORSQcfsq1w1h0yeUYCW1EV2SSViISXq0wlaK7FbTJeIcnp81SFMVduRE9vbPxhlc8l6OsITTEUzLLEq0C0sZv3hoeOxJt57+hIsbq2C7S6Hm2hHoEIBIxeuV0xkJfnFeScGndhn3zwrQnSbk/nooEmjwV3VsxmPTez0Qkev3Z6GYoInF1/e5iNP0wHIhITIb93sVF+ByMpv3x5Wx0eR3+9ib9D6Ob4UDcFZHI8vnO8ilxKL6h72oyuunNgqLeZHY5nNyPLy9+2enti0hM+x+Gg2vWevfMftHLY41GIcQ6ReO1NRFoE2OGJkZDYBfwa2nyr3DSG0xqzXYnggFiAj/Cl89v3tbenJ/W4dISbJDggSMJ2pAFaTagnPW+Zt0S1trruU40bUCtUH2E//3nv+ARoZIJyhrPxDAKfZ0dvST9QoCe4/9pNrqsvW202o3WWaPVqTA2fzgNCoIqn6e1tUw0UzqOwFhiZQvtUoxBLqU2nuCnaetvHhwutSe3CQDwMUNFGN+g81+TxeTpHN0RlnFGOtWetGIFKncOjdo8d1u7DV8+t1rNWqvVOq3DOOyWScBrU02wsA5ohZA5XGube0ikp9qD04S1B208zHEl19q6v4PPsyzZhNXrEiVsbB42gEMZA1lYIoHkfwl0mudwM5xMR+PL+/748v3FqD8DvQBvU7QGAROPUOZ+XEEIpQEW2nmqi6KIBGlK2AfXYVlVOwZkRVHwtEOfcSRDhrSbTf752kvs2s5LEzdljNiIhdQJx6ryRFUxYK1tIgk9SJjnXhv0HlyeYF38ZWUDnbPuj5cpG7+ck48yzYJ/3vUG95PhP6+H09kRUaYk5wlCKtVKG6xxpMJAUA4sOxAwRe/l8g/0HHkt8IejaR2k1iEsNCZxmVOVI18qbU9lxq1Oe96JVa29aLZrnbdvmrX5D2fntfNFZ9H+cdFpNedvj4zqW+ewDA+ttK+MedC0Ao9uja7mdYyQ2KUvmXQo/LelPw8WP0V6d+DckEUOkKROSsZ9LaSM3fP1k4qRB452mq1j9v2svddmGUEqk4Xl2hDoh49ZKGnKIddDLRP/yrZXtn0X286O2dbLacV0UuWZNM8J0pKA+4IXaJehC+PWwIl1oInPKG9zpxC8shlG1QF6dvpKy1dafhctO8e0nB0OW4wPTIst+nBvwkftKdRFXQ6Ea12CfM9g3irJz4dXJr4y8buYeP5NJobbeqIV+RJ+ICFXSn6XIJxgfVkHCXFe0gwhN/pTjrCWSY6vZfGVjH+ejPy+kUvudYjq6eN5j0eVO02b0AOZo3ToRPf2rjh6TX+rlZIirWxc9kjUKvRWaCW6oiEz3Vi3GjuFja2OC+6hBMcwlicIpkzVkmY7HBV/2aZqKKo+3luXShJd8Y9/zTji1mf6HnpXI/iIGxHtgrwiyoK/OB8mh+bMcBfzfd/nd97g++GnrZPD6K5jsm+MHDc3nvQwymf/U+Y9e4U3C+41LWygaRXM8fRqBFeJJL65s4XHb3NecTLO0MCUpImli6GKFozCzX5RQToFxZmRVdLq8PPNVXnX4tsYb+Ksh741njTlIbu+fO6cdSs5tIlg7JbS6H8HeT4Cvu1FlTp00Lcx+ggCpOp7R5wIbqTT0vBXv/Sm5vkekdPznPi7n0jv93AjGFiVpxi2cDeHuOKtd94SzXqr3qxqoFRcAznUmfWUSvMktjsEcOAu7Ln7cs+M8JEaWSK14fqRu4TnSlbfCplpxtEqy2OZSpHo6pC0K+uJF223c+nx2iVFwcOfcnSbkvBrdsOcg3u7FbH2/B2L7kImHo/w7Ou7OJlUOX8KB4J/jbMalIZTIJwR3JSIBOdEaG0W3IBboYxDlm+riX6pozbj7YeNR+dJEe129JTCjL659u5JWbjqzfofOHervmgajhHh5AOXPPlQorTB6FAAwthWJNIs83AUiFIox1fmHIV9pJ4VhmDWi37YbssVM/sRTVHs3UL8nz1TFP8HcCKXNw== +sidebar_class_name: "patch api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_update + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-validate.ParamsDetails.json b/docs/api-reference/reference/products-controller-validate.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/products-controller-validate.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-validate.RequestSchema.json b/docs/api-reference/reference/products-controller-validate.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/products-controller-validate.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-validate.StatusCodes.json b/docs/api-reference/reference/products-controller-validate.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/products-controller-validate.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/products-controller-validate.api.mdx b/docs/api-reference/reference/products-controller-validate.api.mdx new file mode 100644 index 0000000000..ea0aeca16c --- /dev/null +++ b/docs/api-reference/reference/products-controller-validate.api.mdx @@ -0,0 +1,69 @@ +--- +id: products-controller-validate +title: "ProductsController_validate" +description: "ProductsController_validate" +sidebar_label: "ProductsController_validate" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIG2fTgxEEtDiyuSuRCjly4xp6nr5Hn6wYSnGceJFt7j6ZJsXRnzO/GXO8Fa5Er8g4e6VFIqbe6SqlMHGWvMtz9A9rlRutCIUUpfKqQEIfRDLfCqsKFIkwWkjh8bEyHrVIyFcohbEiEaWilZAipCsslEi2gjYl7wjkjV2Kur7njaF0NmDg9WF/wB8aQ+pNyapEIkQtxajfP1y4a5QZZyFTJkctwXmgFQKrwUCwNi5XhAEULKpgLIYAvsqxK6RInSW0xGZVWeYmjZZ6XwPb3h6KdouvmBJ7wbPPyDSS0Xvnf/xY6jQeekAKfFJFmfPUr+OLh5vLP75czm6FfHPSGalFjlCodGUsdjwqHSfiy4Ftd9lLBYaglj94z4HXIHMenEV2XuE8QmYw1yFabB3JbLxnUw9Gw8VIp51h1h92Rp9+7ncWP52dd86zUTb8JRsN+otPB4eaOO+xCQ+tTGgP85ehFQT0a/SdYDRC7paspd5nbN748+XE+0rvpSBDUdclm7xAUia/IHdgpInd2+dvWiKbHXWk7ztYfjYhGLuUUKg8c75o8cOnks1D6lGjJaPycKTtSNuHaDs7pG1c0YpxShUxaIuKoGgA3BW8iF2JPs47CyfOg6EAHoOrfIoQUleihPHFTac/PDs9YnnE8kNYjg6xvH35sUX9Qpp2GMA6AnwygWJdNM3E2gTDQSMXuU0V3zGOJB5J/BCJ5++SCKmzWW5SCo38CCFXykCKEE6wu+yCAl01mCFU1jxWCGuVV3gsi0cY/z+MtRSkltwOcUxj68R7AqaVN7SJbdIClUcvkvk99zuvz/l+v1UgrRy3ZaULERvupxLRU6XprQe95zf2tkbXvb19jYtY1Z6WGUPbAPesqCWZT9dOyXbwm/OFIpGI3/+85di7UJoHGE+v4BtuhHwO94qojJ4zNnMRg9ZZ17PpFUxzRXwz5n0HEY5PnFyXaGFGymrlNbTegKt4c87atDuFlMkrW2td+Hw3be4yfNvhTZxVMHE2kKEq0vvvP6OzpLVDGwnXfqms+TvaCxL4NiXb16GHidMYJERJ7fg5MBLulDfK8miiCJfOG14fE3mzqIjHk1yFsJMr4cKlVYFxy7jShriicDyag/e7g26/rTEq5RrDDuQIFypWl7atflYAL2zAXoxfeXOXf4RP1CtzZSxnaOVzXmuwmQtVGlYyaApQA6sUSezfd5bvpVgxbclcbLcLFfCLz+uapx8r9JuGqTX7ZMGRnm+FNoHHWiSZygMeSNsVU3Fy0ybYKbww9FpyO6nsphFV8TchBWMX/2qo72spVqh0TKltuzBOUyxpb8tB2ebc2+XT9DoWUlWxY3bOe5MD0fx39Wy3zRO37hvaut7JI/7OCuv6P3Y/8PI= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +ProductsController_validate + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-assign.ParamsDetails.json b/docs/api-reference/reference/roles-controller-assign.ParamsDetails.json new file mode 100644 index 0000000000..ad009d9545 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-assign.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-assign.RequestSchema.json b/docs/api-reference/reference/roles-controller-assign.RequestSchema.json new file mode 100644 index 0000000000..2bce2400f0 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-assign.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"roleId":{"type":"string"}},"required":["roleId"],"title":"AssignRoleDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-assign.StatusCodes.json b/docs/api-reference/reference/roles-controller-assign.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-assign.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-assign.api.mdx b/docs/api-reference/reference/roles-controller-assign.api.mdx new file mode 100644 index 0000000000..dad2056343 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-assign.api.mdx @@ -0,0 +1,69 @@ +--- +id: roles-controller-assign +title: "RolesController_assign" +description: "RolesController_assign" +sidebar_label: "RolesController_assign" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMCyJ9x241uXicFUmAR18mmByMIaHFsc5ciFXKUjWvoefoefbJiKPkjcbrbAD36FIUihzP/+XGs4Vq4Ar0k7eyVEqmYOINh5Cx5Zwz6BxmCXliRiEJ6mSOhDyKdroWVOYpUlAH9lRKJ8PhYao9KpORLTIS2IhWFpKVIRMiWmEuRrgWtCl4VyGu7EFV1Xy/EQB+dWvGM13YyZwkt8StZFEZn0dXOl+Asjx2YdrMvmBH76zkw0hiiWWeQ4zt0Yd/16WbefSJIk+GJwygAy3JBTlRVvSIUzobadL/b4z8KQ+Z1wd6JVIgqEYNu9/DFnTRaxRhgLrVBlYDzQEuERgh40s5IwgASZmXQFkMAXxpsi/9NDfTe+R9Py5zCQ8kSgc8yL6I4H4cXD5PL3z9f3tyK5FWkNyRnBiGX2VJbbHmUKg7EzYFtt1mlHEOQix/sc6AazJ0HZ5HFy51HmGs0KkSLjZBvpXvfpuoN+rOBylr9ebffGnz4udua/XR23jqfD+b9X+aDXnf24SCokfMe6/TQUocmmG+alhDQP6FvBa0QjFuwL6/ginruIt73dA+4SzZ5gSS1qYl7aaTO3ev5k4bIHaODt7D8pEPQdpFALs3c+bzBD58LNg+ZR4WWtDThSNuRtnfRdnZI27CkJeOUSWLQZiVBXgO4LXgRuwJ9HHcWTpwHTQE8Blf6DCFkrsAEhheTVrd/dnrE8ojlu7AcHGJ5u/uxRbUjTTkMYB0BPutAsS7qeuBJB81JIxe5zSR/GR1JPJL4LhLPv0siZM7Ojc4o1O5HCLlSBpKEcILtRRskqLLGDKG0+rFEeJKmxGNZPML432GsEkFyETbtTuAFAbPSa1rF3m6G0qMX6fSeG7SXQf5rf5gjLR13kIULERfu/VLRkYXuPPU63CiGzrruF6tOvTHvy8KwL3tO3DCqNWYbVxp+OaZmKGkefnU+lyRS8dsft5xxFwr9AMPxFXzFlUg2SV4SFVEvPg+TXc95ucn5rkfc9obcxc5dJKXR8/pmfAVjI4k/nnmTAwjijJPrAi3ckLRKegVj71SZEVzFj+t5czJPIWM4i8ZaGz7djevPHf4g4kV88GDkbCBNZQT8778GZ2ljh1YJXPuFtPrPaC8kwB9cSbMdehg5hSGB6FLz3LgSEriTXkvLTyNJuHBe8/shkdezkvh5ZDi5G3cTuHBZmWNcMiyVJi46nLw68G671+42ZUhmXIZYbYYhl7EANTcGESDYEQRbgl4IuT2dhM/UKYzUlhNSesPvarimQhaaneiJJN5EMFHp7kpiA/eSiUynYr2eyYCfvakqHn4s0a9q8p5YjBmneLoWSgd+ViKdSxPwwLFtoRUnk+bwncKOtJcON4PSMouxWPPtQCIYzu31SXVfJWKJUsVTt25ejup9WrdsYrf4oLhXyWbFMMuwoO/Ovd87qePrWJpnzdVLHku68PIbiye/1Y66GHd9icJja2GkXZSxLIvaJidalpyRbdZeHdIY1ZtSrNf1jFv3FW1VbZUh/p+Fqap/AKPdYwA= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +RolesController_assign + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-create.ParamsDetails.json b/docs/api-reference/reference/roles-controller-create.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-create.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-create.RequestSchema.json b/docs/api-reference/reference/roles-controller-create.RequestSchema.json new file mode 100644 index 0000000000..edc865be68 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-create.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"permissions":{"type":"array","description":"Real, enforced permission codes — see src/auth/permissions.ts. Use ['*'] via the default Owner role, not here, for full access.","items":{"type":"string","enum":["producers:write","products:write","orders:write","offers:write","connections:write","inventory:write","org:manage","dpp:manage","documents:write","attributes:write","classification:manage","sharing:write","roles:manage","webhooks:manage","categories:govern"]}},"resourceType":{"type":"string","enum":["CATEGORY","LOCATION"],"description":"Scopes this role to a single Category or Location (ADR-023) instead of the whole organization. Requires resourceId. Only meaningfully enforced for the one permission each type covers (CATEGORY -> products:write, LOCATION -> inventory:write) — see src/auth/scope.util.ts."},"resourceId":{"type":"string","description":"The Category or Location id this role is scoped to. Required if resourceType is set."}},"required":["name","permissions"],"title":"CreateRoleDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-create.StatusCodes.json b/docs/api-reference/reference/roles-controller-create.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-create.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-create.api.mdx b/docs/api-reference/reference/roles-controller-create.api.mdx new file mode 100644 index 0000000000..a4d1258063 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-create.api.mdx @@ -0,0 +1,69 @@ +--- +id: roles-controller-create +title: "RolesController_create" +description: "RolesController_create" +sidebar_label: "RolesController_create" +hide_title: true +hide_table_of_contents: true +api: eJztmOFu2zYQx1/lwC9NB9pxEm9r/WGA62RDhnbOErfDYBgFLZ4sthSpkpQdzxCwh9g77D32KHuS4Sg5luO2W4F99CdbJMXj3f3uJP03zBboRFDWXEs2YLdWox9ZE5zVGt3bxKEIyDgrhBM5BnSeDaYzzhx+KNGHF1au2WATL5VDyQbBlchZYk1AE2hKFIVWSTRx+s5bQ2M+yTAX9C+sC2QDZufvMAlkx9GBgkJPs0bk2Frlg1NmwSrOCnS58l5Z41vzwjmxZpxJ9IlTBZkkn1BoDmhS6xKUsLsVEivRw9+//wEeEbxLTkUZstPW5t3gu/DaI0yffPVkBkslIGQIElNR6gDjlUEHzmrkYGyADB1ySK2DtNQaRJKg913GmQqY+0NPOENT5mwwJb9lmaDzg5VTdcTjSNgNWCfb8zZN25eJNQYTcnk3pswSTbBu3dpjMciFEQu6kEXRurBJmaNp2RMhODUvA7aMaOG9Spt07m72mSB/HtZRRPxueoXzzNr3rZFEBFxYp9APFnaJzrBZVRFV3pYuwUmM0qejNRpOrn4Y3/7KOHs5Hg0n1+Of2Oxx3u8SW6CHkCkfUwTBggCvzEIjjOoDrME6eGlrf+BkeHnb6Z1fPAVlfEAhwaYx36uM7rduIYz6La7twm2NvIftoa9lF8ZGryFHYZRZEALrHXdEBe1lDbYZRJFkQH5CQoHwcLJ1DjrfwT4EHLbe0tyj7D49BNlTBLplUJo4Zq0AU7Efhnc/fpPsE2FSshVU5SGakRDsQ1AkqBTayYzLMHRZneVts5jWFb5fzzPOggqaTjaK7Yea0mWwrKoaRgprfN0gzntn9LN/cHK03+sdTrwRWsnah1QojZJDk5SmncFSWS0CehAwL70y6D24UmOX/W89DZ2z7t+XUW/6aAnci7yIwXkxvHx7e/Xz66u7yUHu7oKYa4RcJJky2HEoZByIxmPfizjk6D0V5GftHEQtokwYWwe5dQipQi23gMVAfpyv3Z7yrH8+78ukc572zjv9Z9/0OvOvL553nqf99PzbtH/Wmz87cGpkncM6PZG/2pmVChl4dEt0Ha8kgrYLfwhajOfO4/ZJW8Bd0ZaXGITSNXH7m9S5e7z+tiFyx2j/Y1i+IsDNgkMudGpd3uCH90WsmMShRBOU0P5I25G2L6Lt4pC2YRkywometJLDvAyQ1wA+NLyIXetRdGIdqLB7oNWNncP2qXjE8ojlF2HZP8RysnvYotyRJi36+AaN98qH2BdVPbBUXs3rlzfiNhH0XXIk8UjiF5H4/LMkQmJNqlUSfH38CCF1Sh9EQDjB7qILAmRZY4ZQGvWhRFgKXeKxLR5h/O8wVpwFsSARpf5Iphs8JqVTYc0G0w2bo3DoSGSpDr5oP6nO5BgyS/pNYX3ERYSMDdipKNTp8uy0tkSGKBKNgrO1ekds1lxtbTfAkhPNEG/+fG9dLgIbsB9/mVCKrS/UWxjeXMN7JOWlyWoWQhEDRAVwu5OKrrZJ3ko7u/zvKTqHesjssTjQ1gDaX7UtkUiZ1EbUmoSM726u4UaLQG/fdOgDiuKKk3GBBu6CMFI4CTf1Jzhcx7fzrfbxFBKiu2h268KrNzf1+xK9UdFNVLkwssYHFcpYIX/92b8YNPuENYdxS0/wHOiNjTfm0MGIxCkO8UjN/+YonsMb4ZQw9G/0oKRwGD4oNhxGe1INh8utvkOGpArUtQiG2vFe96zba/qYSKiPUfaIplyYVroigbBDEB4Q3AvkQ3kHvA+nhRbKUEJKp2mupnPKRKHoEGdbwYiSnBHAgynbbObC42unq4qGP5To1jW3S3J9TgmdzirOMhQy1suGEYLUCWIr7kRMaLkuozb4uC1XfHvHMEmwCJ9dO2vV2M04NtV5I33msRkzJ1bkh1iRAMGZjZGIVRXHNkwLsyhjQ2X1nhRhkmla4XpUbdGrrbZp1q0Tbjb1iol9j6aqGG9cCXTNqllVVf8AtQyKPg== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +RolesController_create + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list-for-user.ParamsDetails.json b/docs/api-reference/reference/roles-controller-list-for-user.ParamsDetails.json new file mode 100644 index 0000000000..ad009d9545 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list-for-user.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list-for-user.RequestSchema.json b/docs/api-reference/reference/roles-controller-list-for-user.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list-for-user.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list-for-user.StatusCodes.json b/docs/api-reference/reference/roles-controller-list-for-user.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list-for-user.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list-for-user.api.mdx b/docs/api-reference/reference/roles-controller-list-for-user.api.mdx new file mode 100644 index 0000000000..7382e06938 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list-for-user.api.mdx @@ -0,0 +1,69 @@ +--- +id: roles-controller-list-for-user +title: "RolesController_listForUser" +description: "RolesController_listForUser" +sidebar_label: "RolesController_listForUser" +hide_title: true +hide_table_of_contents: true +api: eJztmN1OKzcQx19l5CuQnE/S9rB3aYCKSkeH8tULhJCznk18jtde7FkKjfZ5+h59smq8SwLkiFPucxXHH+O/x7+ZeLISvsKgyHh3qkUmzr3FOPOOgrcWw501kU58uIoYhBSVCqpEwhBFdrMSTpUoMlFHDKdaSBHwvjYBtcgo1CiFcSITlaKlkCLmSyyVyFaCnipeFSkYtxBNc8sLY+VdxMjj4+GQPzTGPJiKlYlMiEaKyfcGrpU1OumHQhmLWoIPQEsEVoOR4MF4qwgjKJjX0TiMEUJtsS+kyL0jdMRmVVVZkydLg6+Rba+2Rfv5V8yJPRHYb2RayRiCDz+elnuN2x6QAh9VWVnu+nV6dHd+/MfV8cWlkG9OekFqbhFKlS+Nw15ApVNH2hzYdp+9VGKMavGDfba8BoUP4B2y80ofEAqDVsdksXMk8/GeTT2ajOcTnffGxXDcm3z6edib/3Rw2DssJsX4l2IyGs4/bR1q5kPA9npoaWJ3mL8MLSFieMDQi0YjWL9gLc1Lxm5af25O/FLprRRkKOk6ZpNHSMrYI/JbRtq7ezv/vCOyXdEk+kbb9H02MRq3kFAqW/hQdvjhY8XmIQ+o0ZFRNu5o29H2IdoOtmmb1rRknHJFDNq8JihbANcJL2FXYUj93sGeD2AoQsDo65AjxNxXKGF6dN4bjg/2d1jusPwQlpNtLC83P7aoN6RpjxGcJ8BHEynlRdN2PJho+NLIJ25zxU+NHYk7Ej9E4uG7JELuXWFNTrGVnyDkTBlJEcIe9hd9UKDrFjOE2pn7GuFB2Rp3aXEH4/+HsZGC1IJLIhG4fOIFEfM6GHpKddIcVcAgsptbLnZeH/L9gqtEWnquyxaYkOFaKhMDVZnBw2jAhVccrNr6qxm0m/Pe7BzW80LIBePaovYsp2OYz9V1ya5x4kOpSGTi9z8v+dZ9rMwdTM9O4Rs+Cfl80UuiKvnMuMInADo3fbk4O4Uzq4jfxLxu627TjL0vFTq4IOW0ChrOgtd1TnCa3sxFF3D7kDNzVWetD5+vz9pXDL9zeBHHE8y8i2SoTtz++8/kIOvs0JOEL2GhnPk72YsS+B0lu+0wwMxrjBKSpK7dSYkSrlUwynFrpggXPhgenxIFM6+J2zOrYlzLlXDk87rEtGRaa0OcS/g+2oMP+6P+sMsuKufswg6sfKRSpbzSFdWJC9iAAQwGnPgAHRqv/LmOPcJHGlRWGcfRWQfLYy02N0JVhrWMhEw1O7OSbYr3Z3SXPhLPXq3mKuJVsE3D3fc1hqeWqQf2yZxv+mYltInc1iIrlI24JWydRsXeeRda+7Bh6LXgrlM5piylYq79pWDs1n80NLeNFEtUOsXUqhuc5jlW9GLZVtLm4FsH1G/HnEVVzZ5Ze+9NGCTr35W0WrUzLv03dE2zVkj8nQU2zX++JfBf +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +RolesController_listForUser + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list-permissions.ParamsDetails.json b/docs/api-reference/reference/roles-controller-list-permissions.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list-permissions.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list-permissions.RequestSchema.json b/docs/api-reference/reference/roles-controller-list-permissions.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list-permissions.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list-permissions.StatusCodes.json b/docs/api-reference/reference/roles-controller-list-permissions.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list-permissions.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list-permissions.api.mdx b/docs/api-reference/reference/roles-controller-list-permissions.api.mdx new file mode 100644 index 0000000000..03bb782184 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list-permissions.api.mdx @@ -0,0 +1,69 @@ +--- +id: roles-controller-list-permissions +title: "RolesController_listPermissions" +description: "RolesController_listPermissions" +sidebar_label: "RolesController_listPermissions" +hide_title: true +hide_table_of_contents: true +api: eJztl9tu4zYQhl9lwKssIDu247Yb3blOWqTAYt0km14ERkBRI4u7FKmQIzeuoefpe/TJiqEU5+Bi09z7yjQPP+fwcURuhavRS9LOXuQiFZfOYJg7S94Zg/7O6EAL9JUOQTsbRCJq6WWFhD6I9HaZCI+hdjZgEOlWTEYj/skxKK9rVhWpEG0ipv81cCONzuPeUEhtME/AeaASweN9g4FgrZ2RhAEkZE3QFkMA3xgcikQoZwktsaysa6NVVDr+Glh7K4IqsZLcok2NIhUu+4qK2APPPpPuTEbvnX97mnI5PpsVyGu7EonAB1nVhrt+np3dXZ7//uX86lokrzy9IpkZhEqqUlsceJR57IibA2sPOUoVhiBXb+yzFzUonAdnkYNXOY9QaDR5iIp9IDm339PMx9NJNs3VYFKMJoPpxx9Hg+yHk9PBaTEtJj8V0/Eo+7jn1Nx5j116qNShd+ZPTSUE9Gv0g6BzBONWbEtvjPaYi/S2i+eTx88tXSaCNEW7zlnyDElqc0ZuT6TL3ev5lz2R3Yo20jfep+8TM21XCVTSFM5XPX74ULM8KI85WtLShANtB9reRdvJPm2zhkrGSUli0LKGoOoA3BW8iF29K7Zw5DxoCuAxuMYrhKBcjQnMzi4Ho8nJhwOWByzfheV0H8vrp48t5k+k5Q4DWEeADzpQrIu661jroDlp5CK3SvI14UDigcR3kXj6XRJBOVsYrSh05kcIuVIGkoRwhMPVECTkTYcZQmP1fYOwlqbBQ1k8wPj/YWwTQXLFTxnh+enDCwKqxmvaiPR2KzKUHj0/ddrlayfffixVSKXjd9UKIzaSSpGKY1nr4/X4uH4xt4tL/6p6tOGKSe0oe7Skx5dd6ruSvvGL85UkkYrf/rjmhLtQ6zuYLS7gG25E8pjjkqiO4dK2cDH3fYQ+Xy0uYGEk8XWY1+2lNc44+lyjhSuSNpc+h4V3eaMILuJ1uejP2gdQjFvdqw3h082iu8DwFYcX8VGCubOBNDUR2X/+np6kvQ5tEvjsV9Lqv6JeSICvUEm/HXqYuxxDAtGkvt2bEhK4kV5Ly625JFw5r3l8RuR11hC350aGsDM3gTOnmgrjklmTa+IywvnoHB8Nx8NRX1ik4sLCAaxdoErGkmJlzEhEAp6YAGYCXkLxIqS7k0f4QMe1kdry2Wy84bEOmFsha83mjJmhZ1rLRJQuEM/YbjMZ8Is3bcvd9w36TYfSmkORcYJvl20iSpR5BHormIpUzJTCmumM5VOk+xWTyd+R/Os5lzDZsGE741+BGNX7IWk3z7S3227GtfuGtm1F0htB/F+0y7Zt/wWjDLBF +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +RolesController_listPermissions + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list.ParamsDetails.json b/docs/api-reference/reference/roles-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list.RequestSchema.json b/docs/api-reference/reference/roles-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list.StatusCodes.json b/docs/api-reference/reference/roles-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-list.api.mdx b/docs/api-reference/reference/roles-controller-list.api.mdx new file mode 100644 index 0000000000..a2301b2131 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: roles-controller-list +title: "RolesController_list" +description: "RolesController_list" +sidebar_label: "RolesController_list" +hide_title: true +hide_table_of_contents: true +api: eJztl9tu4zYQhl9lwKssIDu247Yb3blOWqTAYtMkm14EQUBJI4u7FKkMR25cQ8/T9+iTFUMph8btbnPvqzA8/HP6NCa3yjdImo13Z4VK1YW3GJbeMXlrke6sCawS1WjSNTJSUOnNbaIIQ+NdwKDSrZpNJvKnwJCTaURKpUp1iZr/28K1tqaIBqHUxmKRgCfgCoHwvsXAsDbeasYAGrI2GIchALUWxypRuXeMjkVWN401eVQ6/BxEe6tCXmGtZcSbBlWqfPYZ8xgBSaBsepeRyNO3t+W+wBe7ApNxK5UofNB1Y2Xqx8XJ3cXpr59OL69U8irSS9aZRah1XhmHI0JdxIloHER7LFmqMQS9+oadnaxB6Qm8Q0le7QmhNGiLEBWHREpBv6ZZTOezbF7ko1k5mY3m77+fjLLvjo5Hx+W8nP1QzqeT7P1OUEtPhH15uDJhCOZ3wxUEpDXSKJgCwfqV+DI4YwgLld70+XyO+KWnt4liw9GvU5E8QdbGnrDfEelr93r/xUBkf6KL9E136ftgQjBulUCtbempHvDDh0bkIScs0LHRNuxp29P2JtqOdmlbtFwJTrlmAS1rGeoewKeGF7FrkOK8d3DgCQwHIAy+pRwh5L7BBBYnF6PJ7OjdHss9lm/Ccr6L5dXzjy0Wz6QVHgM4z4APJnDsi6afWJtgpGjsI7e5lrvBnsQ9iW8i8firJELuXWlNzqF3P0IonTKwZoQDHK/GoKFoe8wQWmfuW4S1ti3u2+Iexv8PY5co1it5yiiS944cCJi3ZHij0putylATkjx1utvXQf7HC6lGrry8oFbYP5i4Uqk61I05XE8PezNiRdIwPKIeTV4KmD1Uj4YHWiWCYSoZBj95qjWrVP3y25XU14fG3MHi/Ay+4EYljyWtmJuYHeNKH0s9JOTj5fkZnFvNcvuVcztVjDsOPjbo4JK1KzQVcE6+aHOGs3g7LodP6x3kQlczqI3hw/V5f1+RG40cki8Hlt4FNtxGQv/6c36UDjq8SeAjrbQzf0S9kIDcmJLBHBIsfYEhgejSMB5cCQlcazLayWipGVeejKwvmMlkLct4aXUIT+4mcOLztsZ4ZNEWhqVrSD36wCfj6Xgy9BGdSx+RBDY+cK1jB3E6ViQSAM8IwIDAP9L49HExPvBhY7Vx8vm1ZGWtx+NG6caIC1PB/ZHEygeWte020wE/ke06mb5vkTY9OGsJPJNy3tx2iapQF5HWrRIGUrXIc2zEo9gbVbrbDgXrJ2J/PpX+pFtx6cntV9hF9WFJu80L7e2233Hlv6DrOpUMTrD8r7rbruv+Bj4knSM= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +RolesController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-revoke.ParamsDetails.json b/docs/api-reference/reference/roles-controller-revoke.ParamsDetails.json new file mode 100644 index 0000000000..cd570b2cf1 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-revoke.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"userId","required":true,"in":"path","schema":{"type":"string"}},{"name":"roleId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-revoke.RequestSchema.json b/docs/api-reference/reference/roles-controller-revoke.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/roles-controller-revoke.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-revoke.StatusCodes.json b/docs/api-reference/reference/roles-controller-revoke.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-revoke.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/roles-controller-revoke.api.mdx b/docs/api-reference/reference/roles-controller-revoke.api.mdx new file mode 100644 index 0000000000..ab42212444 --- /dev/null +++ b/docs/api-reference/reference/roles-controller-revoke.api.mdx @@ -0,0 +1,69 @@ +--- +id: roles-controller-revoke +title: "RolesController_revoke" +description: "RolesController_revoke" +sidebar_label: "RolesController_revoke" +hide_title: true +hide_table_of_contents: true +api: eJztmM1uGzcQx19lMCcboD5sq228N9V2ARcN4tqOezAMg1qOJCZcckPOqnaFfZ6+R5+sGO5GdqI0qVGgJ51EkcvhnzM/znJ2jaGmqNkGf26wwMvgKJ0EzzE4R/E+0iq8J1RY66grYooJi9s1el0RFtgkiucGFUb60NhIBguODSm0HgusNS9RYSqXVGks1siPtcxKHK1fYNuqjaEYHP0HQ3cyMdXBJ0oyfjgey4+hVEZby+6wQGwVTr40cKOdNdkHMNfWkVEQIvCSQNRQYljZ4DRTAg2zJllPKUFsHA1RYRk8k2cxq+va2TJbGr1LYnu9LTrM3lHJ4tIovmfbSaYYQ/z2Y2UwtO0BhfSgq9pJ14/T0/vLs1/fnl1do/psp1esZ46g0uXSehpE0iZ35MVBbA/FSxWlpBffWGfLazAPEYIncV4VIsHckjMpW+wdKYx9zaY5mBzOJqYcHM7Hh4PJq+/Hg9l3R8eD4/lkfvjDfHIwnr3a2tRJiJG68PDSpn4zv1teQqK4ojhI1hC4sBAt7XPGbjt/Pu34udI7hWw56zoTk6fE2rpTDltGuth9/vxlT2Q3o830HWzT99qmZP1CQaXdPMSqx48eajEPZSRDnq12aUfbjrYX0Xa0Tdu04aXgVGoW0GYNQ9UBuEl4GbuaYu4PHvZCBMsJIqXQxJIglaEmBdPTy8H48Gh/h+UOyxdhOdnG8vrpZUvmiTQTKIEPDPRgE+e8aLuOlU1WgsYhc1tqua7sSNyR+CISj79KIpTBz50tOXXyM4SSKRNrJtij4WIIGkzTYUbQePuhIVhp19AuLe5g/PcwtgpZL6S2yqVQkgmJyiZafswF14x0pIjF7Z0UO59u8h+Ltop4GaSsM+SIuzKOl1jgSNd2tDoYSf2WRuuujGtHeenRuivGWqm4so9E1jM9V0JtR9xHVT3Ksr2+S/WNn0KsNGOBP/92LcEPqbb3ML04h/f0iOpjvJfMdXad9fOQOei99ebq4hwunGa5Gsu8rRDnJ/be1OThirU3Ohq4iME0JcN5vjrP+3O3D6WgV/fWhvD65qK7zMh1RybJsYKT4BNbbjK+f/05OSp6O/yo4E1caG//yPaSArlOqX45inASDCUFWVLf7qUkBTc6Wu2ldaKZFiFaGZ8yRztrWNonTqe0kavgNJRNRXnKtDGWJaVIPLqNj4cHw3GfZHQpSUYcWIfElc7ppa+tMx7wxAds+PjEkZuzx/TAo9pp6+V0NtHJWAfOLeraiogDVLn4T6iwePoKkNFVWPTl/J3CZUgs89brmU70Nrq2le4PDcXHDquVuGUmwb5do7FJ2gaLuXaJtiRuEiruXfaHbB+eMPpUet+pvYCWk7J8BVAo5G2+XchHiP9x1d4z7V2rcEna5DO97genZUk1P5u29dKQw7851adnv5xdn6FC3UhwNgH87AjmBb6oar3unrgO78m37UYky3/R2LZ/A/6BMh0= +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +RolesController_revoke + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/addorderlinedto.Schema.json b/docs/api-reference/reference/schemas/addorderlinedto.Schema.json new file mode 100644 index 0000000000..8aaf4cdc55 --- /dev/null +++ b/docs/api-reference/reference/schemas/addorderlinedto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"offerId":{"type":"string"},"quantity":{"type":"number","description":"Decimal, not just whole units (ADR-024, Deel 17 §29) — e.g. 4.5 kg, 10.75 m."}},"required":["offerId","quantity"],"title":"AddOrderLineDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/addorderlinedto.schema.mdx b/docs/api-reference/reference/schemas/addorderlinedto.schema.mdx new file mode 100644 index 0000000000..25ae5ef656 --- /dev/null +++ b/docs/api-reference/reference/schemas/addorderlinedto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: addorderlinedto +title: "AddOrderLineDto" +description: "" +sidebar_label: "AddOrderLineDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"offerId":"string","quantity":0} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/assignclassificationdto.Schema.json b/docs/api-reference/reference/schemas/assignclassificationdto.Schema.json new file mode 100644 index 0000000000..6c1ce231fc --- /dev/null +++ b/docs/api-reference/reference/schemas/assignclassificationdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"productId":{"type":"string"},"classificationNodeId":{"type":"string"}},"required":["productId","classificationNodeId"],"title":"AssignClassificationDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/assignclassificationdto.schema.mdx b/docs/api-reference/reference/schemas/assignclassificationdto.schema.mdx new file mode 100644 index 0000000000..5330bbed09 --- /dev/null +++ b/docs/api-reference/reference/schemas/assignclassificationdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: assignclassificationdto +title: "AssignClassificationDto" +description: "" +sidebar_label: "AssignClassificationDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"productId":"string","classificationNodeId":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/assignroledto.Schema.json b/docs/api-reference/reference/schemas/assignroledto.Schema.json new file mode 100644 index 0000000000..bc2c341282 --- /dev/null +++ b/docs/api-reference/reference/schemas/assignroledto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"roleId":{"type":"string"}},"required":["roleId"],"title":"AssignRoleDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/assignroledto.schema.mdx b/docs/api-reference/reference/schemas/assignroledto.schema.mdx new file mode 100644 index 0000000000..f54a7d0b1c --- /dev/null +++ b/docs/api-reference/reference/schemas/assignroledto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: assignroledto +title: "AssignRoleDto" +description: "" +sidebar_label: "AssignRoleDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"roleId":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/bulkcreateproductdto.Schema.json b/docs/api-reference/reference/schemas/bulkcreateproductdto.Schema.json new file mode 100644 index 0000000000..5e1a284d70 --- /dev/null +++ b/docs/api-reference/reference/schemas/bulkcreateproductdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"string"},"gtin":{"type":"string","description":"GTIN-8/12/13/14 (ADR-005) — checksum-validated, not confirmed against GS1's registry."},"identity":{"description":"Segments used to mint the OSPI identity for this product (Deel 4). Not required if you already issued an identity via POST /ospi-identities and pass ospiIdentityId instead.","allOf":[{"type":"object","properties":{"producerCodeId":{"type":"string"},"categoryCode":{"type":"string","example":"123456"},"companyProductId":{"type":"string","description":"Producer-supplied product identifier (Deel 4 §14)","example":"00012345"},"variantCode":{"type":"string","example":"0001"},"serialBatch":{"type":"string","example":"00000001"},"version":{"type":"number","minimum":1,"maximum":9,"default":1},"reserved":{"type":"boolean","description":"Reserve this identity (ADR-024, Deel 4 §37) instead of registering it outright — useful for ERP sync/bulk imports/manufacturing workflows that need to hold a code before the product is fully created. Attaching it to a Product/Variant later still works directly — it does not need a separate \"un-reserve\" step first — and moves it straight to ACTIVE."},"reservedUntil":{"type":"string","description":"Only meaningful with reserved: true — when the reservation lapses."}},"required":["producerCodeId","categoryCode","companyProductId"],"title":"IssueOspiIdentityDto"}]},"ospiIdentityId":{"type":"string","description":"An already-issued, unattached OSPI identity ID"}},"required":["name"],"title":"CreateProductDto"}}},"required":["items"],"title":"BulkCreateProductDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/bulkcreateproductdto.schema.mdx b/docs/api-reference/reference/schemas/bulkcreateproductdto.schema.mdx new file mode 100644 index 0000000000..8c98a1502a --- /dev/null +++ b/docs/api-reference/reference/schemas/bulkcreateproductdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: bulkcreateproductdto +title: "BulkCreateProductDto" +description: "" +sidebar_label: "BulkCreateProductDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"items":[{"name":"string","description":"string","categoryId":"string","gtin":"string","identity":{"producerCodeId":"string","categoryCode":"123456","companyProductId":"00012345","variantCode":"0001","serialBatch":"00000001","version":1,"reserved":true,"reservedUntil":"string"},"ospiIdentityId":"string"}]} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/bulkregisterserializedunitdto.Schema.json b/docs/api-reference/reference/schemas/bulkregisterserializedunitdto.Schema.json new file mode 100644 index 0000000000..c8c71f96bb --- /dev/null +++ b/docs/api-reference/reference/schemas/bulkregisterserializedunitdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"variantId":{"type":"string","description":"Optional — registers the unit under a specific variant rather than the base product."},"serialBatch":{"type":"string","description":"The real per-unit/per-batch value (Deel 4 segment [EEEEEEEE]) — not the \"00000000\" placeholder.","example":"00000001"}},"required":["serialBatch"],"title":"RegisterSerializedUnitDto"}}},"required":["items"],"title":"BulkRegisterSerializedUnitDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/bulkregisterserializedunitdto.schema.mdx b/docs/api-reference/reference/schemas/bulkregisterserializedunitdto.schema.mdx new file mode 100644 index 0000000000..612b056bc8 --- /dev/null +++ b/docs/api-reference/reference/schemas/bulkregisterserializedunitdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: bulkregisterserializedunitdto +title: "BulkRegisterSerializedUnitDto" +description: "" +sidebar_label: "BulkRegisterSerializedUnitDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"items":[{"variantId":"string","serialBatch":"00000001"}]} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createapiclientdto.Schema.json b/docs/api-reference/reference/schemas/createapiclientdto.Schema.json new file mode 100644 index 0000000000..a43d4fa59a --- /dev/null +++ b/docs/api-reference/reference/schemas/createapiclientdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"},"scopes":{"type":"array","example":["products:write"],"description":"Real, enforced permission codes — see src/auth/permissions.ts. '*' grants full org-wide access, same as the Owner role.","items":{"type":"string","enum":["producers:write","products:write","orders:write","offers:write","connections:write","inventory:write","org:manage","dpp:manage","documents:write","attributes:write","classification:manage","sharing:write","roles:manage","webhooks:manage","categories:govern","*"]}}},"required":["name","scopes"],"title":"CreateApiClientDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createapiclientdto.schema.mdx b/docs/api-reference/reference/schemas/createapiclientdto.schema.mdx new file mode 100644 index 0000000000..ced364716f --- /dev/null +++ b/docs/api-reference/reference/schemas/createapiclientdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createapiclientdto +title: "CreateApiClientDto" +description: "" +sidebar_label: "CreateApiClientDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string","scopes":["products:write"]} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createattributedefinitiondto.Schema.json b/docs/api-reference/reference/schemas/createattributedefinitiondto.Schema.json new file mode 100644 index 0000000000..5a407ff3a4 --- /dev/null +++ b/docs/api-reference/reference/schemas/createattributedefinitiondto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"dataType":{"type":"string","enum":["STRING","TEXT","INTEGER","DECIMAL","BOOLEAN","DATE","DATETIME","ENUM","MEASUREMENT","REFERENCE","URL","EMAIL"]},"enumValues":{"description":"Required when dataType = ENUM","type":"array","items":{"type":"string"}},"unitCode":{"type":"string","description":"Default unit code, used when dataType = MEASUREMENT"}},"required":["code","name","dataType"],"title":"CreateAttributeDefinitionDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createattributedefinitiondto.schema.mdx b/docs/api-reference/reference/schemas/createattributedefinitiondto.schema.mdx new file mode 100644 index 0000000000..8f30d3461f --- /dev/null +++ b/docs/api-reference/reference/schemas/createattributedefinitiondto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createattributedefinitiondto +title: "CreateAttributeDefinitionDto" +description: "" +sidebar_label: "CreateAttributeDefinitionDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"code":"string","name":"string","dataType":"STRING","enumValues":["string"],"unitCode":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createcategorydto.Schema.json b/docs/api-reference/reference/schemas/createcategorydto.Schema.json new file mode 100644 index 0000000000..09599f5883 --- /dev/null +++ b/docs/api-reference/reference/schemas/createcategorydto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"scope":{"type":"string","description":"'organization' (default): private to your org, usable immediately, no review. 'global': a PROPOSAL for the shared cross-org registry (ADR-020) — created PENDING, only usable once a `categories:govern` holder approves it via POST /categories/:id/approve.","enum":["organization","global"]}},"required":["code","name"],"title":"CreateCategoryDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createcategorydto.schema.mdx b/docs/api-reference/reference/schemas/createcategorydto.schema.mdx new file mode 100644 index 0000000000..8c6b3bf428 --- /dev/null +++ b/docs/api-reference/reference/schemas/createcategorydto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createcategorydto +title: "CreateCategoryDto" +description: "" +sidebar_label: "CreateCategoryDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"code":"string","name":"string","parentId":"string","scope":"organization"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createclassificationnodedto.Schema.json b/docs/api-reference/reference/schemas/createclassificationnodedto.Schema.json new file mode 100644 index 0000000000..f887fd94f1 --- /dev/null +++ b/docs/api-reference/reference/schemas/createclassificationnodedto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"}},"required":["code","name"],"title":"CreateClassificationNodeDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createclassificationnodedto.schema.mdx b/docs/api-reference/reference/schemas/createclassificationnodedto.schema.mdx new file mode 100644 index 0000000000..e65964263d --- /dev/null +++ b/docs/api-reference/reference/schemas/createclassificationnodedto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createclassificationnodedto +title: "CreateClassificationNodeDto" +description: "" +sidebar_label: "CreateClassificationNodeDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"code":"string","name":"string","parentId":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createclassificationschemedto.Schema.json b/docs/api-reference/reference/schemas/createclassificationschemedto.Schema.json new file mode 100644 index 0000000000..cffcac9f12 --- /dev/null +++ b/docs/api-reference/reference/schemas/createclassificationschemedto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}},"required":["code","name"],"title":"CreateClassificationSchemeDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createclassificationschemedto.schema.mdx b/docs/api-reference/reference/schemas/createclassificationschemedto.schema.mdx new file mode 100644 index 0000000000..561a1ff543 --- /dev/null +++ b/docs/api-reference/reference/schemas/createclassificationschemedto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createclassificationschemedto +title: "CreateClassificationSchemeDto" +description: "" +sidebar_label: "CreateClassificationSchemeDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"code":"string","name":"string","description":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createdocumentdto.Schema.json b/docs/api-reference/reference/schemas/createdocumentdto.Schema.json new file mode 100644 index 0000000000..e713804c2c --- /dev/null +++ b/docs/api-reference/reference/schemas/createdocumentdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"documentType":{"type":"string","enum":["PRIMARY_IMAGE","GALLERY_IMAGE","TECHNICAL_DRAWING","DATASHEET","MANUAL","CERTIFICATE","DECLARATION","SAFETY_DOCUMENT","INSTALLATION_GUIDE","VIDEO","OTHER"],"default":"OTHER"},"validFrom":{"type":"string","description":"Deel 7 §52 — essential for certificates, meaningful for any document type."},"validUntil":{"type":"string"},"sortOrder":{"type":"number"},"certificateMetadata":{"type":"object","description":"Deel 13 §27-28 — {certificateNumber?, issuer?, issuerOrganizationId?, issuedAt?, scope?}. Only meaningful when documentType is CERTIFICATE."},"name":{"type":"string"},"mimeType":{"type":"string"},"storageRef":{"type":"string","description":"Opaque reference to the actual file in object storage."},"productId":{"type":"string"},"visibility":{"type":"string","enum":["PUBLIC","RESTRICTED","PRIVATE"],"default":"PRIVATE"},"checksum":{"type":"string","description":"SHA-256 hex, if known — this endpoint has no bytes to compute one from itself."}},"required":["name","mimeType","storageRef"],"title":"CreateDocumentDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createdocumentdto.schema.mdx b/docs/api-reference/reference/schemas/createdocumentdto.schema.mdx new file mode 100644 index 0000000000..37de5d58de --- /dev/null +++ b/docs/api-reference/reference/schemas/createdocumentdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createdocumentdto +title: "CreateDocumentDto" +description: "" +sidebar_label: "CreateDocumentDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"documentType":"OTHER","validFrom":"string","validUntil":"string","sortOrder":0,"certificateMetadata":{},"name":"string","mimeType":"string","storageRef":"string","productId":"string","visibility":"PRIVATE","checksum":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createdppprofiledto.Schema.json b/docs/api-reference/reference/schemas/createdppprofiledto.Schema.json new file mode 100644 index 0000000000..3507bea3fe --- /dev/null +++ b/docs/api-reference/reference/schemas/createdppprofiledto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"version":{"type":"string","example":"1.0"},"description":{"type":"string"},"requiredAttributeCodes":{"description":"AttributeDefinition codes required for VALID status","type":"array","items":{"type":"string"}}},"required":["code","name","version","requiredAttributeCodes"],"title":"CreateDppProfileDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createdppprofiledto.schema.mdx b/docs/api-reference/reference/schemas/createdppprofiledto.schema.mdx new file mode 100644 index 0000000000..1f907f68db --- /dev/null +++ b/docs/api-reference/reference/schemas/createdppprofiledto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createdppprofiledto +title: "CreateDppProfileDto" +description: "" +sidebar_label: "CreateDppProfileDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"code":"string","name":"string","version":"1.0","description":"string","requiredAttributeCodes":["string"]} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createdpprecorddto.Schema.json b/docs/api-reference/reference/schemas/createdpprecorddto.Schema.json new file mode 100644 index 0000000000..25c8813cd4 --- /dev/null +++ b/docs/api-reference/reference/schemas/createdpprecorddto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"productId":{"type":"string"},"profileId":{"type":"string"}},"required":["productId","profileId"],"title":"CreateDppRecordDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createdpprecorddto.schema.mdx b/docs/api-reference/reference/schemas/createdpprecorddto.schema.mdx new file mode 100644 index 0000000000..b58a6feca0 --- /dev/null +++ b/docs/api-reference/reference/schemas/createdpprecorddto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createdpprecorddto +title: "CreateDppRecordDto" +description: "" +sidebar_label: "CreateDppRecordDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"productId":"string","profileId":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createdraftorderdto.Schema.json b/docs/api-reference/reference/schemas/createdraftorderdto.Schema.json new file mode 100644 index 0000000000..31b530d4a5 --- /dev/null +++ b/docs/api-reference/reference/schemas/createdraftorderdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"shippingAddress":{"type":"object"},"notes":{"type":"string"}},"title":"CreateDraftOrderDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createdraftorderdto.schema.mdx b/docs/api-reference/reference/schemas/createdraftorderdto.schema.mdx new file mode 100644 index 0000000000..824425218e --- /dev/null +++ b/docs/api-reference/reference/schemas/createdraftorderdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createdraftorderdto +title: "CreateDraftOrderDto" +description: "" +sidebar_label: "CreateDraftOrderDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"shippingAddress":{},"notes":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createlegalentitydto.Schema.json b/docs/api-reference/reference/schemas/createlegalentitydto.Schema.json new file mode 100644 index 0000000000..f2264b2503 --- /dev/null +++ b/docs/api-reference/reference/schemas/createlegalentitydto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code"},"vatNumber":{"type":"string"}},"required":["name","country"],"title":"CreateLegalEntityDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createlegalentitydto.schema.mdx b/docs/api-reference/reference/schemas/createlegalentitydto.schema.mdx new file mode 100644 index 0000000000..e2f80de41d --- /dev/null +++ b/docs/api-reference/reference/schemas/createlegalentitydto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createlegalentitydto +title: "CreateLegalEntityDto" +description: "" +sidebar_label: "CreateLegalEntityDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string","country":"string","vatNumber":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createlocationdto.Schema.json b/docs/api-reference/reference/schemas/createlocationdto.Schema.json new file mode 100644 index 0000000000..bf78b3ac0c --- /dev/null +++ b/docs/api-reference/reference/schemas/createlocationdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["WAREHOUSE","STORE","DISTRIBUTION_CENTER","FACTORY","SERVICE_CENTER","PICKUP_POINT","OFFICE"]},"country":{"type":"string"},"region":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"address":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"timezone":{"type":"string"}},"required":["name","type"],"title":"CreateLocationDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createlocationdto.schema.mdx b/docs/api-reference/reference/schemas/createlocationdto.schema.mdx new file mode 100644 index 0000000000..f254dd95ad --- /dev/null +++ b/docs/api-reference/reference/schemas/createlocationdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createlocationdto +title: "CreateLocationDto" +description: "" +sidebar_label: "CreateLocationDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string","type":"WAREHOUSE","country":"string","region":"string","postalCode":"string","city":"string","address":"string","latitude":0,"longitude":0,"timezone":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createofferdto.Schema.json b/docs/api-reference/reference/schemas/createofferdto.Schema.json new file mode 100644 index 0000000000..396e83ad8e --- /dev/null +++ b/docs/api-reference/reference/schemas/createofferdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"productId":{"type":"string"},"variantId":{"type":"string","description":"Prices a specific variant instead of the base product (ADR-015) — e.g. different sizes/colors with different prices. Never a serial/batch: pricing is always at product/variant (SKU) level, never per physical unit."},"price":{"type":"number"},"currency":{"type":"string","example":"EUR"},"minimumQuantity":{"type":"number","default":1,"description":"Decimal, not just whole units (ADR-024, Deel 17 §29) — e.g. 4.5 kg."},"salesUnit":{"type":"string","default":"EA"},"validFrom":{"type":"string"},"validUntil":{"type":"string"},"conditions":{"type":"object"}},"required":["productId","price","currency"],"title":"CreateOfferDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createofferdto.schema.mdx b/docs/api-reference/reference/schemas/createofferdto.schema.mdx new file mode 100644 index 0000000000..ef90685183 --- /dev/null +++ b/docs/api-reference/reference/schemas/createofferdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createofferdto +title: "CreateOfferDto" +description: "" +sidebar_label: "CreateOfferDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"productId":"string","variantId":"string","price":0,"currency":"EUR","minimumQuantity":1,"salesUnit":"EA","validFrom":"string","validUntil":"string","conditions":{}} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createproducerdto.Schema.json b/docs/api-reference/reference/schemas/createproducerdto.Schema.json new file mode 100644 index 0000000000..30a1db9ed6 --- /dev/null +++ b/docs/api-reference/reference/schemas/createproducerdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"],"title":"CreateProducerDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createproducerdto.schema.mdx b/docs/api-reference/reference/schemas/createproducerdto.schema.mdx new file mode 100644 index 0000000000..333011dbfa --- /dev/null +++ b/docs/api-reference/reference/schemas/createproducerdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createproducerdto +title: "CreateProducerDto" +description: "" +sidebar_label: "CreateProducerDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createproductdto.Schema.json b/docs/api-reference/reference/schemas/createproductdto.Schema.json new file mode 100644 index 0000000000..c07a708206 --- /dev/null +++ b/docs/api-reference/reference/schemas/createproductdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"string"},"gtin":{"type":"string","description":"GTIN-8/12/13/14 (ADR-005) — checksum-validated, not confirmed against GS1's registry."},"identity":{"description":"Segments used to mint the OSPI identity for this product (Deel 4). Not required if you already issued an identity via POST /ospi-identities and pass ospiIdentityId instead.","allOf":[{"type":"object","properties":{"producerCodeId":{"type":"string"},"categoryCode":{"type":"string","example":"123456"},"companyProductId":{"type":"string","description":"Producer-supplied product identifier (Deel 4 §14)","example":"00012345"},"variantCode":{"type":"string","example":"0001"},"serialBatch":{"type":"string","example":"00000001"},"version":{"type":"number","minimum":1,"maximum":9,"default":1},"reserved":{"type":"boolean","description":"Reserve this identity (ADR-024, Deel 4 §37) instead of registering it outright — useful for ERP sync/bulk imports/manufacturing workflows that need to hold a code before the product is fully created. Attaching it to a Product/Variant later still works directly — it does not need a separate \"un-reserve\" step first — and moves it straight to ACTIVE."},"reservedUntil":{"type":"string","description":"Only meaningful with reserved: true — when the reservation lapses."}},"required":["producerCodeId","categoryCode","companyProductId"],"title":"IssueOspiIdentityDto"}]},"ospiIdentityId":{"type":"string","description":"An already-issued, unattached OSPI identity ID"}},"required":["name"],"title":"CreateProductDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createproductdto.schema.mdx b/docs/api-reference/reference/schemas/createproductdto.schema.mdx new file mode 100644 index 0000000000..9c32fc8527 --- /dev/null +++ b/docs/api-reference/reference/schemas/createproductdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createproductdto +title: "CreateProductDto" +description: "" +sidebar_label: "CreateProductDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string","description":"string","categoryId":"string","gtin":"string","identity":{"producerCodeId":"string","categoryCode":"123456","companyProductId":"00012345","variantCode":"0001","serialBatch":"00000001","version":1,"reserved":true,"reservedUntil":"string"},"ospiIdentityId":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createproductrelationshipdto.Schema.json b/docs/api-reference/reference/schemas/createproductrelationshipdto.Schema.json new file mode 100644 index 0000000000..f048adfa6f --- /dev/null +++ b/docs/api-reference/reference/schemas/createproductrelationshipdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"targetProductId":{"type":"string"},"relationshipType":{"type":"string","enum":["REPLACEMENT_FOR","ACCESSORY_FOR","COMPATIBLE_WITH","PART_OF","CONTAINS","VARIANT_OF","SUPERSEDES","REQUIRES"]},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"Default PRIVATE (Deel 7 §42) — an internal/ERP relationship is not automatically public."},"metadata":{"type":"object"},"validFrom":{"type":"string"},"validUntil":{"type":"string"}},"required":["targetProductId","relationshipType"],"title":"CreateProductRelationshipDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createproductrelationshipdto.schema.mdx b/docs/api-reference/reference/schemas/createproductrelationshipdto.schema.mdx new file mode 100644 index 0000000000..544b7c0225 --- /dev/null +++ b/docs/api-reference/reference/schemas/createproductrelationshipdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createproductrelationshipdto +title: "CreateProductRelationshipDto" +description: "" +sidebar_label: "CreateProductRelationshipDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"targetProductId":"string","relationshipType":"REPLACEMENT_FOR","visibility":"PRIVATE","metadata":{},"validFrom":"string","validUntil":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createroledto.Schema.json b/docs/api-reference/reference/schemas/createroledto.Schema.json new file mode 100644 index 0000000000..99366e9d10 --- /dev/null +++ b/docs/api-reference/reference/schemas/createroledto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"},"permissions":{"type":"array","description":"Real, enforced permission codes — see src/auth/permissions.ts. Use ['*'] via the default Owner role, not here, for full access.","items":{"type":"string","enum":["producers:write","products:write","orders:write","offers:write","connections:write","inventory:write","org:manage","dpp:manage","documents:write","attributes:write","classification:manage","sharing:write","roles:manage","webhooks:manage","categories:govern"]}},"resourceType":{"type":"string","enum":["CATEGORY","LOCATION"],"description":"Scopes this role to a single Category or Location (ADR-023) instead of the whole organization. Requires resourceId. Only meaningfully enforced for the one permission each type covers (CATEGORY -> products:write, LOCATION -> inventory:write) — see src/auth/scope.util.ts."},"resourceId":{"type":"string","description":"The Category or Location id this role is scoped to. Required if resourceType is set."}},"required":["name","permissions"],"title":"CreateRoleDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createroledto.schema.mdx b/docs/api-reference/reference/schemas/createroledto.schema.mdx new file mode 100644 index 0000000000..bc42c46be1 --- /dev/null +++ b/docs/api-reference/reference/schemas/createroledto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createroledto +title: "CreateRoleDto" +description: "" +sidebar_label: "CreateRoleDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string","permissions":["producers:write"],"resourceType":"CATEGORY","resourceId":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createsharinggrantdto.Schema.json b/docs/api-reference/reference/schemas/createsharinggrantdto.Schema.json new file mode 100644 index 0000000000..733fc165d8 --- /dev/null +++ b/docs/api-reference/reference/schemas/createsharinggrantdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Must be an ACTIVE Connection the caller's organization is part of"},"targetType":{"type":"string","enum":["PRODUCT","PRODUCT_CATEGORY","ALL_PRODUCTS"]},"targetId":{"type":"string","description":"productId or categoryId, depending on targetType. Omit for ALL_PRODUCTS."},"dataCategories":{"type":"array","items":{"type":"string","enum":["PRODUCT_DATA","CONTENT","DPP","INVENTORY","ORDERING"]}},"expiresAt":{"type":"string"},"ruleFilter":{"description":"Rule-based/dynamic scoping (ADR-022), e.g. [{ attributeCode: \"region\", operator: \"eq\", value: \"EU\" }]. ANDed with each other and with targetType — a product must also match every rule to be in scope. Omit for no extra filtering.","type":"array","items":{"type":"object","properties":{"attributeCode":{"type":"string","description":"Code of an AttributeDefinition visible to your organization (global or your own)."},"operator":{"type":"string","enum":["eq","neq","in","contains"]},"value":{"type":"object","description":"Value to compare against. Must be an array when operator is \"in\"."}},"required":["attributeCode","operator","value"],"title":"SharingRuleDto"}}},"required":["connectionId","targetType","dataCategories"],"title":"CreateSharingGrantDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createsharinggrantdto.schema.mdx b/docs/api-reference/reference/schemas/createsharinggrantdto.schema.mdx new file mode 100644 index 0000000000..6038de84dc --- /dev/null +++ b/docs/api-reference/reference/schemas/createsharinggrantdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createsharinggrantdto +title: "CreateSharingGrantDto" +description: "" +sidebar_label: "CreateSharingGrantDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"connectionId":"string","targetType":"PRODUCT","targetId":"string","dataCategories":["PRODUCT_DATA"],"expiresAt":"string","ruleFilter":[{"attributeCode":"string","operator":"eq","value":{}}]} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createvariantdto.Schema.json b/docs/api-reference/reference/schemas/createvariantdto.Schema.json new file mode 100644 index 0000000000..98182ae2d4 --- /dev/null +++ b/docs/api-reference/reference/schemas/createvariantdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"sku":{"type":"string"},"name":{"type":"string"},"identity":{"description":"Segments to mint a distinct OSPI identity (own full code) for this variant. Every variant now requires its own identity (product owner decision, ADR-015 amendment, 2026-08-17) — provide either this or ospiIdentityId, exactly one, not neither.","allOf":[{"type":"object","properties":{"producerCodeId":{"type":"string"},"categoryCode":{"type":"string","example":"123456"},"companyProductId":{"type":"string","description":"Producer-supplied product identifier (Deel 4 §14)","example":"00012345"},"variantCode":{"type":"string","example":"0001"},"serialBatch":{"type":"string","example":"00000001"},"version":{"type":"number","minimum":1,"maximum":9,"default":1},"reserved":{"type":"boolean","description":"Reserve this identity (ADR-024, Deel 4 §37) instead of registering it outright — useful for ERP sync/bulk imports/manufacturing workflows that need to hold a code before the product is fully created. Attaching it to a Product/Variant later still works directly — it does not need a separate \"un-reserve\" step first — and moves it straight to ACTIVE."},"reservedUntil":{"type":"string","description":"Only meaningful with reserved: true — when the reservation lapses."}},"required":["producerCodeId","categoryCode","companyProductId"],"title":"IssueOspiIdentityDto"}]},"ospiIdentityId":{"type":"string","description":"An already-issued, unattached OSPI identity ID for this variant. Provide either this or `identity`, exactly one."}},"required":["sku"],"title":"CreateVariantDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createvariantdto.schema.mdx b/docs/api-reference/reference/schemas/createvariantdto.schema.mdx new file mode 100644 index 0000000000..7ef7bf19cd --- /dev/null +++ b/docs/api-reference/reference/schemas/createvariantdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createvariantdto +title: "CreateVariantDto" +description: "" +sidebar_label: "CreateVariantDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"sku":"string","name":"string","identity":{"producerCodeId":"string","categoryCode":"123456","companyProductId":"00012345","variantCode":"0001","serialBatch":"00000001","version":1,"reserved":true,"reservedUntil":"string"},"ospiIdentityId":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createwebhooksubscriptiondto.Schema.json b/docs/api-reference/reference/schemas/createwebhooksubscriptiondto.Schema.json new file mode 100644 index 0000000000..2ed7880c2b --- /dev/null +++ b/docs/api-reference/reference/schemas/createwebhooksubscriptiondto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"url":{"type":"string","example":"https://example.com/ospi/webhook"},"eventTypes":{"type":"array","items":{"type":"string","enum":["identity.registered","identity.activated","identity.suspended","identity.reactivated","identity.retired","product.created","product.published","product.unpublished","product.recalled","product.archived","order.created","order.updated"]}}},"required":["url","eventTypes"],"title":"CreateWebhookSubscriptionDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/createwebhooksubscriptiondto.schema.mdx b/docs/api-reference/reference/schemas/createwebhooksubscriptiondto.schema.mdx new file mode 100644 index 0000000000..9c19b06340 --- /dev/null +++ b/docs/api-reference/reference/schemas/createwebhooksubscriptiondto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: createwebhooksubscriptiondto +title: "CreateWebhookSubscriptionDto" +description: "" +sidebar_label: "CreateWebhookSubscriptionDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"url":"https://example.com/ospi/webhook","eventTypes":["identity.registered"]} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/errordetaildto.Schema.json b/docs/api-reference/reference/schemas/errordetaildto.Schema.json new file mode 100644 index 0000000000..276d058fd6 --- /dev/null +++ b/docs/api-reference/reference/schemas/errordetaildto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/errordetaildto.schema.mdx b/docs/api-reference/reference/schemas/errordetaildto.schema.mdx new file mode 100644 index 0000000000..d3f22538ab --- /dev/null +++ b/docs/api-reference/reference/schemas/errordetaildto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: errordetaildto +title: "ErrorDetailDto" +description: "" +sidebar_label: "ErrorDetailDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"code":"BAD_REQUEST","message":"Validation failed for one or more fields.","requestId":"d142b4dc-2f02-4860-b539-9f4f27f410b8"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/errorresponsedto.Schema.json b/docs/api-reference/reference/schemas/errorresponsedto.Schema.json new file mode 100644 index 0000000000..446987104f --- /dev/null +++ b/docs/api-reference/reference/schemas/errorresponsedto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/errorresponsedto.schema.mdx b/docs/api-reference/reference/schemas/errorresponsedto.schema.mdx new file mode 100644 index 0000000000..bc647d5d78 --- /dev/null +++ b/docs/api-reference/reference/schemas/errorresponsedto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: errorresponsedto +title: "ErrorResponseDto" +description: "" +sidebar_label: "ErrorResponseDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"error":{"code":"BAD_REQUEST","message":"Validation failed for one or more fields.","requestId":"d142b4dc-2f02-4860-b539-9f4f27f410b8"}} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/inviteuserdto.Schema.json b/docs/api-reference/reference/schemas/inviteuserdto.Schema.json new file mode 100644 index 0000000000..21763fdb56 --- /dev/null +++ b/docs/api-reference/reference/schemas/inviteuserdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"roleIds":{"description":"Role IDs to assign — at least one is required.","type":"array","items":{"type":"string"}}},"required":["email","roleIds"],"title":"InviteUserDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/inviteuserdto.schema.mdx b/docs/api-reference/reference/schemas/inviteuserdto.schema.mdx new file mode 100644 index 0000000000..2dea88cdc2 --- /dev/null +++ b/docs/api-reference/reference/schemas/inviteuserdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: inviteuserdto +title: "InviteUserDto" +description: "" +sidebar_label: "InviteUserDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"email":"string","firstName":"string","lastName":"string","roleIds":["string"]} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/issueospiidentitydto.Schema.json b/docs/api-reference/reference/schemas/issueospiidentitydto.Schema.json new file mode 100644 index 0000000000..1f5c54e744 --- /dev/null +++ b/docs/api-reference/reference/schemas/issueospiidentitydto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"producerCodeId":{"type":"string"},"categoryCode":{"type":"string","example":"123456"},"companyProductId":{"type":"string","description":"Producer-supplied product identifier (Deel 4 §14)","example":"00012345"},"variantCode":{"type":"string","example":"0001"},"serialBatch":{"type":"string","example":"00000001"},"version":{"type":"number","minimum":1,"maximum":9,"default":1},"reserved":{"type":"boolean","description":"Reserve this identity (ADR-024, Deel 4 §37) instead of registering it outright — useful for ERP sync/bulk imports/manufacturing workflows that need to hold a code before the product is fully created. Attaching it to a Product/Variant later still works directly — it does not need a separate \"un-reserve\" step first — and moves it straight to ACTIVE."},"reservedUntil":{"type":"string","description":"Only meaningful with reserved: true — when the reservation lapses."}},"required":["producerCodeId","categoryCode","companyProductId"],"title":"IssueOspiIdentityDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/issueospiidentitydto.schema.mdx b/docs/api-reference/reference/schemas/issueospiidentitydto.schema.mdx new file mode 100644 index 0000000000..43e04caad7 --- /dev/null +++ b/docs/api-reference/reference/schemas/issueospiidentitydto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: issueospiidentitydto +title: "IssueOspiIdentityDto" +description: "" +sidebar_label: "IssueOspiIdentityDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"producerCodeId":"string","categoryCode":"123456","companyProductId":"00012345","variantCode":"0001","serialBatch":"00000001","version":1,"reserved":true,"reservedUntil":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/issueproducercodedto.Schema.json b/docs/api-reference/reference/schemas/issueproducercodedto.Schema.json new file mode 100644 index 0000000000..da4a4b0569 --- /dev/null +++ b/docs/api-reference/reference/schemas/issueproducercodedto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Desired producer code, A-Z0-9, max 12 characters","example":"ACME"}},"required":["code"],"title":"IssueProducerCodeDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/issueproducercodedto.schema.mdx b/docs/api-reference/reference/schemas/issueproducercodedto.schema.mdx new file mode 100644 index 0000000000..3283eb872d --- /dev/null +++ b/docs/api-reference/reference/schemas/issueproducercodedto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: issueproducercodedto +title: "IssueProducerCodeDto" +description: "" +sidebar_label: "IssueProducerCodeDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"code":"ACME"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/logindto.Schema.json b/docs/api-reference/reference/schemas/logindto.Schema.json new file mode 100644 index 0000000000..fac95b4276 --- /dev/null +++ b/docs/api-reference/reference/schemas/logindto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"],"title":"LoginDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/logindto.schema.mdx b/docs/api-reference/reference/schemas/logindto.schema.mdx new file mode 100644 index 0000000000..ca78ac61b0 --- /dev/null +++ b/docs/api-reference/reference/schemas/logindto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: logindto +title: "LoginDto" +description: "" +sidebar_label: "LoginDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"email":"string","password":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/refreshdto.Schema.json b/docs/api-reference/reference/schemas/refreshdto.Schema.json new file mode 100644 index 0000000000..6df10a0038 --- /dev/null +++ b/docs/api-reference/reference/schemas/refreshdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"],"title":"RefreshDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/refreshdto.schema.mdx b/docs/api-reference/reference/schemas/refreshdto.schema.mdx new file mode 100644 index 0000000000..c5dbcff252 --- /dev/null +++ b/docs/api-reference/reference/schemas/refreshdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: refreshdto +title: "RefreshDto" +description: "" +sidebar_label: "RefreshDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"refreshToken":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/registerdto.Schema.json b/docs/api-reference/reference/schemas/registerdto.Schema.json new file mode 100644 index 0000000000..3ab8bd565c --- /dev/null +++ b/docs/api-reference/reference/schemas/registerdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"organizationName":{"type":"string","description":"Name of the new organization"},"email":{"type":"string"},"password":{"type":"string","minLength":8},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["organizationName","email","password"],"title":"RegisterDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/registerdto.schema.mdx b/docs/api-reference/reference/schemas/registerdto.schema.mdx new file mode 100644 index 0000000000..28d17ab83a --- /dev/null +++ b/docs/api-reference/reference/schemas/registerdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: registerdto +title: "RegisterDto" +description: "" +sidebar_label: "RegisterDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"organizationName":"string","email":"string","password":"string","firstName":"string","lastName":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/registerserializedunitdto.Schema.json b/docs/api-reference/reference/schemas/registerserializedunitdto.Schema.json new file mode 100644 index 0000000000..7deb6c6ba3 --- /dev/null +++ b/docs/api-reference/reference/schemas/registerserializedunitdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"variantId":{"type":"string","description":"Optional — registers the unit under a specific variant rather than the base product."},"serialBatch":{"type":"string","description":"The real per-unit/per-batch value (Deel 4 segment [EEEEEEEE]) — not the \"00000000\" placeholder.","example":"00000001"}},"required":["serialBatch"],"title":"RegisterSerializedUnitDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/registerserializedunitdto.schema.mdx b/docs/api-reference/reference/schemas/registerserializedunitdto.schema.mdx new file mode 100644 index 0000000000..f9a8fa6282 --- /dev/null +++ b/docs/api-reference/reference/schemas/registerserializedunitdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: registerserializedunitdto +title: "RegisterSerializedUnitDto" +description: "" +sidebar_label: "RegisterSerializedUnitDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"variantId":"string","serialBatch":"00000001"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/rejectcategorydto.Schema.json b/docs/api-reference/reference/schemas/rejectcategorydto.Schema.json new file mode 100644 index 0000000000..43f0dd8946 --- /dev/null +++ b/docs/api-reference/reference/schemas/rejectcategorydto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"reason":{"type":"string"}},"title":"RejectCategoryDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/rejectcategorydto.schema.mdx b/docs/api-reference/reference/schemas/rejectcategorydto.schema.mdx new file mode 100644 index 0000000000..fb196cee36 --- /dev/null +++ b/docs/api-reference/reference/schemas/rejectcategorydto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: rejectcategorydto +title: "RejectCategoryDto" +description: "" +sidebar_label: "RejectCategoryDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"reason":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/requestconnectiondto.Schema.json b/docs/api-reference/reference/schemas/requestconnectiondto.Schema.json new file mode 100644 index 0000000000..2869a792ea --- /dev/null +++ b/docs/api-reference/reference/schemas/requestconnectiondto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"targetOrganizationId":{"type":"string","description":"Organization ID to connect with"},"type":{"type":"string","enum":["BUSINESS","DATA","API","SUPPLY","DISTRIBUTION","SERVICE","ORDERING","INTEGRATION"]},"capabilities":{"example":["product.read","inventory.read","order.create"],"description":"Capabilities requested (Deel 15 §10). Each side authorizes independently.","type":"array","items":{"type":"string"}}},"required":["targetOrganizationId","type"],"title":"RequestConnectionDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/requestconnectiondto.schema.mdx b/docs/api-reference/reference/schemas/requestconnectiondto.schema.mdx new file mode 100644 index 0000000000..47019cdecc --- /dev/null +++ b/docs/api-reference/reference/schemas/requestconnectiondto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: requestconnectiondto +title: "RequestConnectionDto" +description: "" +sidebar_label: "RequestConnectionDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"targetOrganizationId":"string","type":"BUSINESS","capabilities":["product.read","inventory.read","order.create"]} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/setattributevaluedto.Schema.json b/docs/api-reference/reference/schemas/setattributevaluedto.Schema.json new file mode 100644 index 0000000000..de2c0a697b --- /dev/null +++ b/docs/api-reference/reference/schemas/setattributevaluedto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"attributeDefinitionId":{"type":"string"},"value":{"type":"object","description":"Value shape depends on the attribute's dataType"},"source":{"type":"string","enum":["MANUFACTURER","SUPPLIER","IMPORT","USER","API","CALCULATED","INFERRED"]},"sourceOrganizationId":{"type":"string","description":"Which organization supplied this value (field-level federation, Deel 11 §75). Defaults to the caller's own organization."},"sourceReference":{"type":"string","description":"A document id/URL/system name to look up more detail — e.g. a certificate or ERP record."},"confidence":{"type":"number","description":"0..1"},"forceOverride":{"type":"boolean"}},"required":["attributeDefinitionId","value"],"title":"SetAttributeValueDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/setattributevaluedto.schema.mdx b/docs/api-reference/reference/schemas/setattributevaluedto.schema.mdx new file mode 100644 index 0000000000..ac929376d9 --- /dev/null +++ b/docs/api-reference/reference/schemas/setattributevaluedto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: setattributevaluedto +title: "SetAttributeValueDto" +description: "" +sidebar_label: "SetAttributeValueDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"attributeDefinitionId":"string","value":{},"source":"MANUFACTURER","sourceOrganizationId":"string","sourceReference":"string","confidence":0,"forceOverride":true} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/setcategoryattributeschemadto.Schema.json b/docs/api-reference/reference/schemas/setcategoryattributeschemadto.Schema.json new file mode 100644 index 0000000000..42202ce270 --- /dev/null +++ b/docs/api-reference/reference/schemas/setcategoryattributeschemadto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"attributeDefinitionId":{"type":"string"},"requirement":{"type":"string","enum":["REQUIRED","RECOMMENDED","OPTIONAL","FORBIDDEN"]},"conditionOnAttributeDefinitionId":{"type":"string","description":"Deel 11 §32: this rule only applies when the product's value for this OTHER attribute equals conditionOnValue."},"conditionOnValue":{"type":"object","description":"Required together with conditionOnAttributeDefinitionId."}},"required":["attributeDefinitionId","requirement"],"title":"SetCategoryAttributeSchemaDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/setcategoryattributeschemadto.schema.mdx b/docs/api-reference/reference/schemas/setcategoryattributeschemadto.schema.mdx new file mode 100644 index 0000000000..7def959d33 --- /dev/null +++ b/docs/api-reference/reference/schemas/setcategoryattributeschemadto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: setcategoryattributeschemadto +title: "SetCategoryAttributeSchemaDto" +description: "" +sidebar_label: "SetCategoryAttributeSchemaDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"attributeDefinitionId":"string","requirement":"REQUIRED","conditionOnAttributeDefinitionId":"string","conditionOnValue":{}} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/setofferbuyerminimumdto.Schema.json b/docs/api-reference/reference/schemas/setofferbuyerminimumdto.Schema.json new file mode 100644 index 0000000000..d28debfd90 --- /dev/null +++ b/docs/api-reference/reference/schemas/setofferbuyerminimumdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"buyerOrganizationId":{"type":"string"},"minimumQuantity":{"type":"number","description":"Overrides Offer.minimumQuantity for this buyer only. Decimal (ADR-024, Deel 17 §29)."}},"required":["buyerOrganizationId","minimumQuantity"],"title":"SetOfferBuyerMinimumDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/setofferbuyerminimumdto.schema.mdx b/docs/api-reference/reference/schemas/setofferbuyerminimumdto.schema.mdx new file mode 100644 index 0000000000..8850e685d5 --- /dev/null +++ b/docs/api-reference/reference/schemas/setofferbuyerminimumdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: setofferbuyerminimumdto +title: "SetOfferBuyerMinimumDto" +description: "" +sidebar_label: "SetOfferBuyerMinimumDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"buyerOrganizationId":"string","minimumQuantity":0} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/setproducttranslationdto.Schema.json b/docs/api-reference/reference/schemas/setproducttranslationdto.Schema.json new file mode 100644 index 0000000000..b5118d5b57 --- /dev/null +++ b/docs/api-reference/reference/schemas/setproducttranslationdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"title":"SetProductTranslationDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/setproducttranslationdto.schema.mdx b/docs/api-reference/reference/schemas/setproducttranslationdto.schema.mdx new file mode 100644 index 0000000000..3628029ad8 --- /dev/null +++ b/docs/api-reference/reference/schemas/setproducttranslationdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: setproducttranslationdto +title: "SetProductTranslationDto" +description: "" +sidebar_label: "SetProductTranslationDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string","description":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/sharingruledto.Schema.json b/docs/api-reference/reference/schemas/sharingruledto.Schema.json new file mode 100644 index 0000000000..368dc76a5b --- /dev/null +++ b/docs/api-reference/reference/schemas/sharingruledto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"attributeCode":{"type":"string","description":"Code of an AttributeDefinition visible to your organization (global or your own)."},"operator":{"type":"string","enum":["eq","neq","in","contains"]},"value":{"type":"object","description":"Value to compare against. Must be an array when operator is \"in\"."}},"required":["attributeCode","operator","value"],"title":"SharingRuleDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/sharingruledto.schema.mdx b/docs/api-reference/reference/schemas/sharingruledto.schema.mdx new file mode 100644 index 0000000000..ca7bd8b8ed --- /dev/null +++ b/docs/api-reference/reference/schemas/sharingruledto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: sharingruledto +title: "SharingRuleDto" +description: "" +sidebar_label: "SharingRuleDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"attributeCode":"string","operator":"eq","value":{}} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/updatedocumentmetadatadto.Schema.json b/docs/api-reference/reference/schemas/updatedocumentmetadatadto.Schema.json new file mode 100644 index 0000000000..df108911c9 --- /dev/null +++ b/docs/api-reference/reference/schemas/updatedocumentmetadatadto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"documentType":{"type":"string","enum":["PRIMARY_IMAGE","GALLERY_IMAGE","TECHNICAL_DRAWING","DATASHEET","MANUAL","CERTIFICATE","DECLARATION","SAFETY_DOCUMENT","INSTALLATION_GUIDE","VIDEO","OTHER"],"default":"OTHER"},"validFrom":{"type":"string","description":"Deel 7 §52 — essential for certificates, meaningful for any document type."},"validUntil":{"type":"string"},"sortOrder":{"type":"number"},"certificateMetadata":{"type":"object","description":"Deel 13 §27-28 — {certificateNumber?, issuer?, issuerOrganizationId?, issuedAt?, scope?}. Only meaningful when documentType is CERTIFICATE."},"lifecycleStatus":{"type":"string","enum":["ACTIVE","SUPERSEDED","ARCHIVED"]}},"title":"UpdateDocumentMetadataDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/updatedocumentmetadatadto.schema.mdx b/docs/api-reference/reference/schemas/updatedocumentmetadatadto.schema.mdx new file mode 100644 index 0000000000..4998b545eb --- /dev/null +++ b/docs/api-reference/reference/schemas/updatedocumentmetadatadto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: updatedocumentmetadatadto +title: "UpdateDocumentMetadataDto" +description: "" +sidebar_label: "UpdateDocumentMetadataDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"documentType":"OTHER","validFrom":"string","validUntil":"string","sortOrder":0,"certificateMetadata":{},"lifecycleStatus":"ACTIVE"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/updateordergroupstatusdto.Schema.json b/docs/api-reference/reference/schemas/updateordergroupstatusdto.Schema.json new file mode 100644 index 0000000000..36b2f643ba --- /dev/null +++ b/docs/api-reference/reference/schemas/updateordergroupstatusdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["PROCESSING","FULFILLED","PARTIALLY_FULFILLED","COMPLETED","CANCELLED"]}},"required":["status"],"title":"UpdateOrderGroupStatusDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/updateordergroupstatusdto.schema.mdx b/docs/api-reference/reference/schemas/updateordergroupstatusdto.schema.mdx new file mode 100644 index 0000000000..742099014d --- /dev/null +++ b/docs/api-reference/reference/schemas/updateordergroupstatusdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: updateordergroupstatusdto +title: "UpdateOrderGroupStatusDto" +description: "" +sidebar_label: "UpdateOrderGroupStatusDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"status":"PROCESSING"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/updateorganizationdto.Schema.json b/docs/api-reference/reference/schemas/updateorganizationdto.Schema.json new file mode 100644 index 0000000000..c035199a87 --- /dev/null +++ b/docs/api-reference/reference/schemas/updateorganizationdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","enum":["PENDING","ACTIVE","SUSPENDED","ARCHIVED","DELETED"]}},"title":"UpdateOrganizationDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/updateorganizationdto.schema.mdx b/docs/api-reference/reference/schemas/updateorganizationdto.schema.mdx new file mode 100644 index 0000000000..f6c9f6b59e --- /dev/null +++ b/docs/api-reference/reference/schemas/updateorganizationdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: updateorganizationdto +title: "UpdateOrganizationDto" +description: "" +sidebar_label: "UpdateOrganizationDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string","status":"PENDING"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/updateproductdto.Schema.json b/docs/api-reference/reference/schemas/updateproductdto.Schema.json new file mode 100644 index 0000000000..a14a146a75 --- /dev/null +++ b/docs/api-reference/reference/schemas/updateproductdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"categoryId":{"type":"string"},"status":{"type":"string","enum":["DRAFT","ACTIVE","PUBLISHED","RECALLED","DISCONTINUED","ARCHIVED"]},"publicationState":{"type":"string","enum":["PRIVATE","PARTNER_ONLY","PUBLIC","SCHEDULED"],"description":"Audience dimension, independent of `status` (ADR-024, Deel 7 §68-69). Not yet wired into any cross-org visibility check — see ADR-024 consequences."},"gtin":{"type":"string","description":"GTIN-8/12/13/14 (ADR-005) — checksum-validated, not confirmed against GS1's registry."},"expectedVersion":{"type":"number","description":"Optimistic concurrency (ADR-024, Deel 22 §110-111). Optional — omit for the previous last-write-wins behavior; supply the version you last read to get a real 409 VERSION_CONFLICT if someone else updated the product first."}},"title":"UpdateProductDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/updateproductdto.schema.mdx b/docs/api-reference/reference/schemas/updateproductdto.schema.mdx new file mode 100644 index 0000000000..5c7ccffec6 --- /dev/null +++ b/docs/api-reference/reference/schemas/updateproductdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: updateproductdto +title: "UpdateProductDto" +description: "" +sidebar_label: "UpdateProductDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"name":"string","description":"string","categoryId":"string","status":"DRAFT","publicationState":"PRIVATE","gtin":"string","expectedVersion":0} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/uploaddocumentdto.Schema.json b/docs/api-reference/reference/schemas/uploaddocumentdto.Schema.json new file mode 100644 index 0000000000..ae3833ffda --- /dev/null +++ b/docs/api-reference/reference/schemas/uploaddocumentdto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"documentType":{"type":"string","enum":["PRIMARY_IMAGE","GALLERY_IMAGE","TECHNICAL_DRAWING","DATASHEET","MANUAL","CERTIFICATE","DECLARATION","SAFETY_DOCUMENT","INSTALLATION_GUIDE","VIDEO","OTHER"],"default":"OTHER"},"validFrom":{"type":"string","description":"Deel 7 §52 — essential for certificates, meaningful for any document type."},"validUntil":{"type":"string"},"sortOrder":{"type":"number"},"certificateMetadata":{"type":"object","description":"Deel 13 §27-28 — {certificateNumber?, issuer?, issuerOrganizationId?, issuedAt?, scope?}. Only meaningful when documentType is CERTIFICATE."},"name":{"type":"string"},"filename":{"type":"string","description":"Original filename — used only to derive a file extension; never used as the on-disk name."},"mimeType":{"type":"string"},"contentBase64":{"type":"string","description":"File content, base64-encoded."},"productId":{"type":"string"},"visibility":{"type":"string","enum":["PUBLIC","RESTRICTED","PRIVATE"],"default":"PRIVATE"}},"required":["name","filename","mimeType","contentBase64"],"title":"UploadDocumentDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/uploaddocumentdto.schema.mdx b/docs/api-reference/reference/schemas/uploaddocumentdto.schema.mdx new file mode 100644 index 0000000000..3e1146d198 --- /dev/null +++ b/docs/api-reference/reference/schemas/uploaddocumentdto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: uploaddocumentdto +title: "UploadDocumentDto" +description: "" +sidebar_label: "UploadDocumentDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"documentType":"OTHER","validFrom":"string","validUntil":"string","sortOrder":0,"certificateMetadata":{},"name":"string","filename":"string","mimeType":"string","contentBase64":"string","productId":"string","visibility":"PRIVATE"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/upsertinventorydto.Schema.json b/docs/api-reference/reference/schemas/upsertinventorydto.Schema.json new file mode 100644 index 0000000000..c2418477ec --- /dev/null +++ b/docs/api-reference/reference/schemas/upsertinventorydto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"locationId":{"type":"string"},"onHand":{"type":"number","default":0},"reserved":{"type":"number","default":0},"allocated":{"type":"number","default":0},"quarantined":{"type":"number","default":0},"damaged":{"type":"number","default":0},"inTransit":{"type":"number","default":0},"unit":{"type":"string","default":"EA"},"lowStockThreshold":{"type":"number"},"manualOverride":{"type":"string","enum":["PRE_ORDER","BACKORDER","DISCONTINUED"]},"visibility":{"type":"string","enum":["PUBLIC","PARTNER_ONLY","PRIVATE"],"default":"PRIVATE"},"quantityDisplayMode":{"type":"string","enum":["EXACT","RANGE","BOOLEAN","HIDDEN"],"default":"EXACT"}},"required":["locationId"],"title":"UpsertInventoryDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/upsertinventorydto.schema.mdx b/docs/api-reference/reference/schemas/upsertinventorydto.schema.mdx new file mode 100644 index 0000000000..0d5f5d29a0 --- /dev/null +++ b/docs/api-reference/reference/schemas/upsertinventorydto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: upsertinventorydto +title: "UpsertInventoryDto" +description: "" +sidebar_label: "UpsertInventoryDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"locationId":"string","onHand":0,"reserved":0,"allocated":0,"quarantined":0,"damaged":0,"inTransit":0,"unit":"EA","lowStockThreshold":0,"manualOverride":"PRE_ORDER","visibility":"PRIVATE","quantityDisplayMode":"EXACT"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/validatecodedto.Schema.json b/docs/api-reference/reference/schemas/validatecodedto.Schema.json new file mode 100644 index 0000000000..aa21c8b903 --- /dev/null +++ b/docs/api-reference/reference/schemas/validatecodedto.Schema.json @@ -0,0 +1 @@ +{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"],"title":"ValidateCodeDto"},"schemaType":"response"} \ No newline at end of file diff --git a/docs/api-reference/reference/schemas/validatecodedto.schema.mdx b/docs/api-reference/reference/schemas/validatecodedto.schema.mdx new file mode 100644 index 0000000000..5d7d5f2af4 --- /dev/null +++ b/docs/api-reference/reference/schemas/validatecodedto.schema.mdx @@ -0,0 +1,32 @@ +--- +id: validatecodedto +title: "ValidateCodeDto" +description: "" +sidebar_label: "ValidateCodeDto" +hide_title: true +hide_table_of_contents: true +schema: true +sample: {"code":"string"} +custom_edit_url: null +--- + +import Schema from "@theme/Schema"; +import Heading from "@theme/Heading"; + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-related.ParamsDetails.json b/docs/api-reference/reference/search-controller-related.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/search-controller-related.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-related.RequestSchema.json b/docs/api-reference/reference/search-controller-related.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/search-controller-related.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-related.StatusCodes.json b/docs/api-reference/reference/search-controller-related.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/search-controller-related.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-related.api.mdx b/docs/api-reference/reference/search-controller-related.api.mdx new file mode 100644 index 0000000000..f6346f9c4a --- /dev/null +++ b/docs/api-reference/reference/search-controller-related.api.mdx @@ -0,0 +1,69 @@ +--- +id: search-controller-related +title: "SearchController_related" +description: "SearchController_related" +sidebar_label: "SearchController_related" +hide_title: true +hide_table_of_contents: true +api: eJztmM1OJDcQx1+l5BNIni+YJEvfJgOJiLSCMCw5IIQ8dvW0d7vtxq5mIaN+nrxHniwqd+8MyyS74T4njN1V/lfVz4XNWvgagyLr3bkRmVigCrqYe0fBlyWG+4ClIjRCiloFVSFhiCK7XQunKhSZsLwU8KGxAY3IKDQohXUiE7WiQkgRdYGVEtla0HPNFpGCdSvRtndsGGvvIkZen47H/MNg1MHWLElk4kaV1iR9kCtbopHgA1CBwJtiJHi0niVGULBsonUYI4SmxKGQQntH6IjdqrourU6eRh8j+17vavPLj6iJgw2cF7KdMgzBh+9/pr3B3UClwCdV1SVP/Tw7vb86+/3D2eJayFeRLkgtS4RK6cI6HARUJk2kzYF9D0UrRYUxqtV39tnJGuQ+gHfIyat8QMgtliYmj30iuf7f8mkm06Pl1OjBUT4+Gkzf/TgeLH84Phmc5NP86Kd8Ohkv3+0ENfehIygCFTb2wXy2VEDE8IhhEK1BKP2KtbQvUbrt8rmN+KXSOynIUtJ1xi5PkZQtT8nvOOlq9/r7qx68zoJtpuPJLn3vbYzWrSRUqsx9qHr88Klm96ADGnRkVRn3tO1pexNtx7u0zRoqGCfNHVfCsiGoOgA3DS9hV2NI897BgQ9gKULA6JugEaL2NUqYnV4NxkfHh3ss91i+CcvpLpbX2z+2aLakGY8RnCfAJxsp9UXbTTzaaLlo5BO3WvFNYk/insQ3kXjyTRJBe5eXVlPs5CcIuVNGUoRwgMPVEBSYpsMMoXH2oUF4VGWD+7a4h/H/w9hKQWrFrx4R0/OILSLqJlh6Tm+hJaqAQWS3d/yoeVW6/35RVUiF51fXChMw/GDKxEjVdvQ4GXV7jergTaMpjtbWtKOtcZciVvVCzYKh7YD7oqknmaPrp2Q/+MWHSpHIxG9/XHPtfaztPcwuz+ETPgv5pdwFUZ0yZ13uEwZ9si4Wl+dwWSrimzHb7VQ4fXFwUaODBSlnVDBw2cUD5+nmnPfH7hA0k1f33obw/uayu8vwbYeN+FTB3LtIlppE799/TY+z3g89S7gIK+Xsn8lflMC3KdlvhwHm3mCUkCT1415KlHCjglWOR3NFuPLB8vqMKNhlQzyelyrGjVwJp143FSaTWWMscUfhenSBj4eT4bjvMUpzj+EE1j5SpVJ36V/PHRywpQO2Bf4qlZvDR/hEo7pU1vHxbELJax05t0LVlmVMEh6J1NSGUpBCiqx/rHc73ElR+Ehst14vVcQPoWxbnn5oMDx3YD1yYpZc7tu1MDby2IgsV2XEHYmbjioOrvpTdghbkL6W3k8qx6ilriwyIaRg9tK/Fdq7VooClUkna90vzLTGml6Y7PRuPoKbk/XrGTdT1XB+Njl8dQ6S93+Vs153X1z7T+jadqOO+HcW2Lb/AAFv5/E= +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +SearchController_related + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-resolve.ParamsDetails.json b/docs/api-reference/reference/search-controller-resolve.ParamsDetails.json new file mode 100644 index 0000000000..4002096c30 --- /dev/null +++ b/docs/api-reference/reference/search-controller-resolve.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-resolve.RequestSchema.json b/docs/api-reference/reference/search-controller-resolve.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/search-controller-resolve.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-resolve.StatusCodes.json b/docs/api-reference/reference/search-controller-resolve.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/search-controller-resolve.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-resolve.api.mdx b/docs/api-reference/reference/search-controller-resolve.api.mdx new file mode 100644 index 0000000000..73ceef1102 --- /dev/null +++ b/docs/api-reference/reference/search-controller-resolve.api.mdx @@ -0,0 +1,69 @@ +--- +id: search-controller-resolve +title: "SearchController_resolve" +description: "SearchController_resolve" +sidebar_label: "SearchController_resolve" +hide_title: true +hide_table_of_contents: true +api: eJztmM1OJDcQx1+l5BNIni+YJEvfJgOJiLRawrDkgBDyuKunveu2G7t6FjLq58l75MmicjcDyyS74T4nGn+U/676VeFiI3yNQZHx7jwXmVigCrqce0fBW4vhLmD0do1CiloFVSFhiCK72QinKhSZ0D7nyYD3jQmYi4xCg1IYJzJRKyqFFFGXWCmRbQQ91rwnUjBuJdr2ljfG2ruIkeen4zH/yDHqYGoWJTJxrazJk0IolLGYS/ABqETgQzESrI23ijCCgmUTjcMYITQWh0IK7R2hIzar6toanSyNPkW2vdnV5pefUBNfN7BnyHTKMAQfvr8seWPnolLgg6pqy0M/z07vLs9+/3i2uBLy1U0XpJYWoVK6NA4HAVWeBtLhwLaHopWiwhjV6jvn7HgNCh/AO2TnVT4gFAZtHpPF3pFMwLds5pPp0XKa68FRMT4aTN/9OB4sfzg+GZwU0+Lop2I6GS/f7Vxq7kPALjxUmthf5ouhEiKGNYZBNDmC9SvW0r5E6eaJrqcbv1R6KwUZSrrO2OQpkjL2lPyOkS52r9df9uB1O3jPdDzZpe+9idG4lYRK2cKHqscPH2o2Dzpgjo6MsnFP2562N9F2vEvbrKGScdKKGLRlQ1B1AG4LXsKuxpDGvYMDH8BQBC7UTdAIUfsaJcxOLwfjo+PDPZZ7LN+E5XQXy6vnP7aYP5OWe4zgPAE+mEipLppuYG2i4aCRT9xqxW+JPYl7Et9E4sk3SQTtXWGNptjJTxBypYykCOEAh6shKMibDjOExpn7BmGtbIP7sriH8f/D2EpBasV9j4ipQeIdEXUTDD2mbmiJKmAQ2c0tNzWvQvffPVWFVHruu1aYgOGGKRMjVZvRejLqzhr1y0cbvnHLDVXyDct5IWPBtHakPYnpEeZr9UOy//jFh0qRyMRvf1xx0H2szR3MLs7hMz4K+RTnkqhOLjOu8Cn+vZc+LC7O4cIq4icx79sJbVpx8KFGBwtSLlchh4vg80YTnKcnc9Hn2yFoRq7urQ3h/fVF94jhZw5v4nSCuXeRDDUJ27//mh5nvR16lPAhrJQzfyZ7UQI/o2R/HAaY+xyjhCSp/+6lRAnXKhjl+GuuCFc+GJ6fEQWzbIi/51bFuJUr4dTrpsK0ZdbkhriUcDy6i4+Hk+G4Ly5Kc3FhB9Y+UqVSWekb544KeMYCnrH4ypXbrCN8oFFtlXGcl02wPNchcyNUbVjGJOGREE29dW8wS8lyK0XpI/HyzWapIn4Mtm15+L7B8NjxtGZ/LDnKNxuRm8jfucgKZSPuKNtWUHFw2WfVITzz87XiflA5JixVYZEJIQUj1/8job1tpShR5SmXNv3UTGus6cWmnWrNSbfNpV/PuHyqhh2zdd6rBEjW/1XQZtOtuPKf0bXtVh/x7yywbf8B8SrkPQ== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +SearchController_resolve + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-search-products.ParamsDetails.json b/docs/api-reference/reference/search-controller-search-products.ParamsDetails.json new file mode 100644 index 0000000000..d3829d7e49 --- /dev/null +++ b/docs/api-reference/reference/search-controller-search-products.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"pageSize","required":false,"in":"query","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"type":"string"}},{"name":"sortDir","required":false,"in":"query","schema":{"default":"asc","enum":["asc","desc"],"type":"string"}},{"name":"q","required":false,"in":"query","description":"Free-text search over product name + description","schema":{"type":"string"}},{"name":"categoryId","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["DRAFT","ACTIVE","DISCONTINUED","ARCHIVED"],"type":"string"}},{"name":"scope","required":false,"in":"query","description":"own (default): only the caller's own organization's products. network: also includes products from organizations that granted the caller an active PRODUCT_DATA sharing grant scoped ALL_PRODUCTS or PRODUCT_CATEGORY (ADR-012 follow-up). Individual PRODUCT-targeted grants are NOT included here — see SearchService.searchProducts.","schema":{"default":"own","enum":["own","network"],"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-search-products.RequestSchema.json b/docs/api-reference/reference/search-controller-search-products.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/search-controller-search-products.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-search-products.StatusCodes.json b/docs/api-reference/reference/search-controller-search-products.StatusCodes.json new file mode 100644 index 0000000000..bc8bee351e --- /dev/null +++ b/docs/api-reference/reference/search-controller-search-products.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/search-controller-search-products.api.mdx b/docs/api-reference/reference/search-controller-search-products.api.mdx new file mode 100644 index 0000000000..5f7828e6f1 --- /dev/null +++ b/docs/api-reference/reference/search-controller-search-products.api.mdx @@ -0,0 +1,69 @@ +--- +id: search-controller-search-products +title: "SearchController_searchProducts" +description: "SearchController_searchProducts" +sidebar_label: "SearchController_searchProducts" +hide_title: true +hide_table_of_contents: true +api: eJztWF1uGzcQvsqAL7XRlSzZapvoTZGUVEUSu5bsojAMg1rOaplwyTXJle0IAnqI3qH36FF6kmK4qx9bqWwFfdQblzv/882QnBkzOVrupdEDwdpsiNzGaddob41SaG9c2DizRhSxdyxiObc8Q4/WsfbVjGmeIWuznE+QRczibSEtCtZOuHIYMalZm90WaB9YxFycYsZZe8YyqWVWZKzdjJjAhBfKh7V/yEmaLrIxWjafR48UDOWXb1WS8ftq3WisqTxubNPpjPVvHp7VKNDFVuYUQ9ZmbyUqAd4AccP4sUmVLuet1JMNXT1pd3Bv6QTjLmYRQ03+XVVfZBS7jrZovN3VMYtY83jvocQEmClayEtkAAmF72Gd5WWOx9zjxNiHgdjB9y1x9NwXbgdRi7D1zjtvRyxine5ocNlnEesNht3Tj6PBx4t+j/bPuz8PLvu97UF1scmfx+jjwJo7DQdVNg/bYLR6AJ8ixJwq8DsHRGDshGv5JVTqd24RdlcHjf7O2M9t4MoZkDpWhcAVASTWZI+4HfiUe5hYrj2KNU3ANfDYyynC2flp76I7uul1Rh1wKSc/Sw4IHgrovH9/U1ENwdglR7cz6r87Pf8dDjq981qjeQyJUcrc1Yr8sA4DLeRUioKrBUPNcztBMiSId8AtwsfT0cITASlahH/++BMcIpT9aYh2KmOsP25O9f8oD3On18qj/Kqi9rVkXlP2XG60Q0eCWo1GKW89Z5dcSRHCCQmXCkVEQaBYUubReZhKo7hHBxzGhZManQNbKCQrY6M9ak9ieZ4rGQdJR58cyZ5t4tyMP2HsqflaatdelpahtcY+TxYbgZtFEzG851muaOtNp3dz3v/1oj8cbaBz6PlYIWQ8TqXGmkUuwkZQDiS7zuYRy9A5OgO26tmIGiTGgtFIwcuMRUioe7ogsQokHUvbZIpm63jcEnHtOGkc11qvfmzUxj+cvK69TlrJ8U9Jq9kYv9pwqmusxTI9PpWucuZO+hQc2inampMCQZkJ2TJfr+erMp4rj9ctJThJH+zqk8geei5Vz5sNIWXuntKfV8ArOYin1Whuou+DdE7qSQQZV4mxWQU/vM9JPMQWBWovuXJ7tO3RthPaTjbR1il8SnCik1pEMC48ZCUAlw0vwC5HG/aNhgNjQXoHFp0pbIzlqRFBOBOOTw73sNzDcidYtjZhOVodtihWSBMGHWjjAe+l86EvynJjKp2kpHmzdunZI3GPxJ2Q+HorEiE2OlGSLt7B/ABC6pT0LkE4wPqkDhxEUcIModDytkCYclXgvi3uwfhyMM4j5vmEpjCsfAcRh8O4sNI/hNnMGLlFy9pX1/SoeZK6Zwc9GfrU0ExoggE33KeszY54Lo+mzaOS/Chf0ZfBIXvW7BgSXEuoLaypMEx+VVtRtXhrbMbpxfbLbyPKunG5vIHO2QA+Iz2bq0Sn3uchZlInJgCgCtPp8GwAZ4p7uhMT30ZuA8XBaY4ahp5rwa2AymUYhDtzUhXcIcSEubySVocPl2flLYbuOcRE9QRdo52Xvgi4/fuv1km7kuMfIjhdf3VHQPeoqFKHFrpGoIsgmFStF9GP4JJbSc/hCLrlfETS/473Vo4LT+uu4s4tzY2gZ+Iiw8DSKYT01EsoH6XjjXqz3qi6C4+pu1AAc+N8xkNfqeYXJSxghYvFsGcNGI9Cuiw/mgwd5YpLTQVaWEX/StBcMZ5LMqcZYBKwGhpRKfE6YqlxnuhmszF3eGHVfE7b5byEoCyko86ymqcQIpZjx9A9WZsxmsRsIa0GiNvJn7i37Mdfm+x91fdS33J4+BLjVtO/b7Vt9+HcFttvX2j2o9ndi/xcTOe+0c39qOz/G5Vtw241xVxl6Zo+rKQ0hfMkYilyEQ6XWcXUiWPM/RrXxvWFpCxPlXd9uk/wghrEsok8ORCC9OoX1+vFNJuVFCPzGfV8zhaWe/pm8+v5fP4vhiN/aA== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +SearchController_searchProducts + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-create.ParamsDetails.json b/docs/api-reference/reference/sharing-controller-create.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-create.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-create.RequestSchema.json b/docs/api-reference/reference/sharing-controller-create.RequestSchema.json new file mode 100644 index 0000000000..373a5ef65e --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-create.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","description":"Must be an ACTIVE Connection the caller's organization is part of"},"targetType":{"type":"string","enum":["PRODUCT","PRODUCT_CATEGORY","ALL_PRODUCTS"]},"targetId":{"type":"string","description":"productId or categoryId, depending on targetType. Omit for ALL_PRODUCTS."},"dataCategories":{"type":"array","items":{"type":"string","enum":["PRODUCT_DATA","CONTENT","DPP","INVENTORY","ORDERING"]}},"expiresAt":{"type":"string"},"ruleFilter":{"description":"Rule-based/dynamic scoping (ADR-022), e.g. [{ attributeCode: \"region\", operator: \"eq\", value: \"EU\" }]. ANDed with each other and with targetType — a product must also match every rule to be in scope. Omit for no extra filtering.","type":"array","items":{"type":"object","properties":{"attributeCode":{"type":"string","description":"Code of an AttributeDefinition visible to your organization (global or your own)."},"operator":{"type":"string","enum":["eq","neq","in","contains"]},"value":{"type":"object","description":"Value to compare against. Must be an array when operator is \"in\"."}},"required":["attributeCode","operator","value"],"title":"SharingRuleDto"}}},"required":["connectionId","targetType","dataCategories"],"title":"CreateSharingGrantDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-create.StatusCodes.json b/docs/api-reference/reference/sharing-controller-create.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-create.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-create.api.mdx b/docs/api-reference/reference/sharing-controller-create.api.mdx new file mode 100644 index 0000000000..2f1b49b520 --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-create.api.mdx @@ -0,0 +1,69 @@ +--- +id: sharing-controller-create +title: "SharingController_create" +description: "SharingController_create" +sidebar_label: "SharingController_create" +hide_title: true +hide_table_of_contents: true +api: eJztmO9uIjkSwF+l5C87IxlCMuzeDt9YYEacdgJLmJxOBEWmuwDPdtsduzoJh1rah9h3uPe4R9knWZW7oSFk/kn3MV9Q47bL9edX1XZthc3QKdLWDGPREVdr5bRZ9awhZ5ME3W3kUBEKKTLlVIqEzovObC6Fw7scPf1i443obMNf7TAWHXI5ShFZQ2iIX6ksS3QUNjn75K3hMR+tMVX8RJsMRUfYxSeMiPdxrBJp9Pw2ssZgtNNvP9sTqymkiNFHTmc8QXTEh9wTLBCUgW5vOrweQG+/HmiNECk26gcP1q2U0f8JSoH2kClHYJeikIKUWyFNw0anG6LJU9GZifFk1P/Ymwq5e7rtdaeD96PJv4UU3V9/va2Gr8R8L/NbTMicjfOIhjFYB5EiXFm3GcYSYszQxNqsgG3Z69iEUaoJltbB4a5NtiRWpHqliMqd1d7KObURUmjC1H+Dlbf97rQrpOiNLqeDSza6Px4LKYaX14PLaWnzaNIfTIaX78W8KKTAx0w79F06lV5I4fIE3+mE0PHrYwdM8gQbC+UxPos3RqU6Ah/ZjA1/1e1PGq2Li9cSsLlqwmwLisjpRU7YszF24EY4XGlrboSEkmzreBTveOReJXmYNPh4I6CYN6F72ccYHjStAVW0BktrdKBMNVa7Gf76409QUEUHUgZNJd5CqihaA96j2wCbBWSZQG2C1ofhMRbwkZyCZbBcm1VTyK9F5DNpcWT216HiWWCXIS92K/u41EYH/u+114tS9Y3N3XFyvFoldqESxrF8+WBeB7p2/v0SP3gnpDDhVxtRVgWljQ9JEcLxnK3Hyl/zNNYtsmmmHIJasQhqwkG6B//BwxrNPu6c1jdCmxvRFIxkXaFmT/x3YMtOq7kUpCnBuiYyl32yongq66hEHZWPkww8kNoLdbWS/d4pQ5XwIN1n1vgy1Bet89MkYf+3W63TF9cq0XEZuKXSCcaSA8elr6rXcK9togg9KFjkXhv0PoDbFP+3oo3OHWHx2dr+PLv4qNIsOOmXbv92Mvjt4+BqeoLFFSlmNlXRWhtsOFRxGAibA8sOlKbovVp9ZZ8Tr4WEtQbZeal1CEuNSeyDxMqRzxfzWmZ83r5YtOOocbFsXTTaP//Uaix+fPO28XbZXl78Y9k+by1+fiZRncMyPLTWvjIm1CKP7h5dw+sYIbErfwp1VLK8s/hQ0wPwBiyyj6R0UhJ3LKSM3dP5k4rImtH2c1h+0N5rs5KQqmRpXVrhV34MYogcxmhIq8S/0PZC23fR9uaUtm5Oa8aJT0mxhEVOkJYA7gtewC5DF8b5Y8afBfLg0NvcRVh+pCWUB4s3r1+wfMHyu7Bsn2I5rT+2GNekxRY9GEuAj9pTqIu6HDg4ftV3lBcSX0j8LhLffpFEiKxZJjoiX912GEKulJ4UIbwK9ykFcV5ihpAbfZdjeWV6KYsvMH47jKHdseIukfDl9YaXeIxyp2kjOrOtWKByfPefzYv5Sew+34JKkdaW21SZ9QEZRWvREWcq02f352fVbo0V36a84D3ZLVW/aqfAFYNaQrZTo6KXLaqGZPXwzrpUkeiIf/5ryvG2PtO30B0P4Xfc1Lf3NVEWvMXZMKkbY4NdxJ82smooDrtNB02lumF0cKd/0s550p6ZH3Vd6mWHzZbZSeugnlff58tr++56XhR8WddmaQPUVehHV+MhjBNFfM5nj5zwGma8GmVo4IqUiZWLYVz1T4bhHrCsishriDiPskpaEz5cj8uTGZ/deBHXCO7ledKUh1z833/bbzqVHNpIGB30LLwEPhvKajt0wLZ6CUGl6rlSxUu4Vk4zMRJq78q6UcLjifJ+r66Evo3yFMOSbh5r4vrIpJWGt5rnzdau2RFRcKEMzKYq1Eqj0oPGAtSowx71I1fuSwnhI51lidKGi03uEn5XZsFMqEyzGucM/nEmzKVYc8Z0ZmK75dbaR5cUBQ/f5eg2ZX7csxcWHNsZx3uNKq6IYdS5/IT636g6GxUdp9+CQu5WdKMIM/ri3PlBUo9HoZIvqoZyWuLp1AMzrB6468GQhgCHjjOPbUWizCoPVVyUMtnZKmef7P32JKuDVbvGm9kcaLjdljOm9nc0RSFkZQrxf1HMi6L4GyuA8wU= +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +SharingController_create + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-list.ParamsDetails.json b/docs/api-reference/reference/sharing-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-list.RequestSchema.json b/docs/api-reference/reference/sharing-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-list.StatusCodes.json b/docs/api-reference/reference/sharing-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-list.api.mdx b/docs/api-reference/reference/sharing-controller-list.api.mdx new file mode 100644 index 0000000000..9ab0d10927 --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: sharing-controller-list +title: "SharingController_list" +description: "SharingController_list" +sidebar_label: "SharingController_list" +hide_title: true +hide_table_of_contents: true +api: eJztl9tu4zYQhl9lwKssQDu247Yb3blOWqTAImmcTS8MI6CkkcVdilTIkTeuoefpe/TJiqGUw8btbnPvK9M8/JzDxxG5E65Gr0g7e5GLRCxK5bVdz50l74xBf2d0ICFFrbyqkNAHkSxXUngMtbMBg0h2YjIa8U+OIfO6ZjGRCNFKMf23gVtldB63hEJpg7kE54FKBI/3DQaCjXZGEQZQkDZBWwwBfGNwKKTInCW0xLKqro3OotLxp8DaOxGyEivFLdrWKBLh0k+YRQ88u0q6Mxm9d/770zKX44tZgTg6Qgp8UFVtuOvn2dnd9fnvH88XN0K+8nRBKjUIlcpKbXHgUeWxI24OrD3kKFUYglp/Z5+9qEHhPDiLHLzKeYRCo8lDVOwDySn9lmY+nk7SaZ4NJsVoMpi+/3E0SH84OR2cFtNi8lMxHY/S93tOzZ332KWHSh16Z75oKiGg36AfBJ0jGLdmW3pjtMdcJMsuns8ev7R0JQVpinads+QZktLmjNyeSJe71/OveyK7FW2kb7xP3wcdgrZrCZUyhfNVjx8+1CwPmcccLWllwoG2A21vou1kn7ZZQyXjlCli0NKGoOoAfCp4Ebsafex3Fo6cB00BPAbX+AwhZK5GCbOz68FocvLugOUByzdhOd3H8ub5Y4v5M2m5wwDWEeCDDhTrou46NjpoThq5yG2m+G5wIPFA4ptIPP0miZA5WxidUejMjxBypQykCOEIh+shKMibDjOExur7BmGjTIOHsniA8f/D2EpBas1PGRG6Fw8vCZg1XtNWJMudSFF59PzYaVd7ufuvV1KFVDp+R62xezRRKRJxrGp9vBkf91sN1l5ZCoI35Jj0L6rH3RdMaUfYow09uuxO3yX7xi/OV4pEIn7744aT7UKt72B2dQGfcSvkY35LojqGStvCxbz30blcXF3AlVHEV2Fet5fSOOPoskYLC1I2Vz6HK+/yJiO4iFfloj9n7yBj1OpebQgfbq+6ywtfb3gRHyOYOxtIUxNx/fuv6UnS69BWwqVfK6v/jHpBAl+fZL8depi7HIOEaFLf7k0JEm6V1xxXCXNFuHZe8/iMyOu0IW7PjQrhyVwJZy5rKoxLZk2uiUsI56NzfDQcD0d9UVEZFxUOYO0CVSqWE6tiRnoY4JkG6Gn4KpBPZ43wgY5ro7Tl09h4w2MdKUuhas1GjBmOr2lZSVG6QDxpt0tVwI/etC133zfotx1DG45BypldrlopSlR5ZHgnGIdEzLIMazYt1kyR7JdJhv2J4l/PuW6phm17sv8VgVG9H1J2+0J7t+tm3LjPaNtWyN4I4v+iXbVt+w+1vKdF +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +SharingController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-revoke.ParamsDetails.json b/docs/api-reference/reference/sharing-controller-revoke.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-revoke.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-revoke.RequestSchema.json b/docs/api-reference/reference/sharing-controller-revoke.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-revoke.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-revoke.StatusCodes.json b/docs/api-reference/reference/sharing-controller-revoke.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-revoke.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/sharing-controller-revoke.api.mdx b/docs/api-reference/reference/sharing-controller-revoke.api.mdx new file mode 100644 index 0000000000..fe257ad0dd --- /dev/null +++ b/docs/api-reference/reference/sharing-controller-revoke.api.mdx @@ -0,0 +1,69 @@ +--- +id: sharing-controller-revoke +title: "SharingController_revoke" +description: "SharingController_revoke" +sidebar_label: "SharingController_revoke" +hide_title: true +hide_table_of_contents: true +api: eJztmNtu4zYQhl9lwKsEoI9x243uXNsFUnSRNM6mF0EQ0OLI4kYiFXLkJjX0PH2PPlkxlNY5eLvb3PsqCg/DnzPfTDjZClehV2ScPdMiEctceWPXM2fJu6JAf+dx4+5RSFEpr0ok9EEkN1thVYkiEUYLKTw+1MajFgn5GqUwViSiUpQLKUKaY6lEshX0VPGOQHyCaJpb3hgqZwMGnh8Ph/xDY0i9qViSSIRopJh8beJaFUZH4ZApU6CW4DxQjsBqMBBsjCsUYQAFqzoYiyGArwvsCylSZwktsVlVVYVJo6XB58C2t/ui3eozpsRe8OwwMq1k9N757y9LncZ9D0iBj6qsCh76eTq/u1z8/mmxvBLyzU2XpFYFQqnS3FjseVQ6DsTDgW332UslhqDW3zlnz2uQOQ/OIjuvdB4hM1joEC12jmQwvmVTjybj1USnvXE2HPcmH34c9lY/nJz2TrNJNv4pm4yGqw97l5o577END+UmdJf501AOAf0GfS8YjVC4NWtpXjJ20/rz+cYvld5KQYairgWbnCMpU8zJ7RlpY/d2/WVHZLujifSN9un7aEIwdi2hVEXmfNnhh48Vm4fUo0ZLRhXhQNuBtnfRdrJP27SmnHFKFTFoq5qgbAHcFbyIXYU+jjsLR86DoQAeg6t9ihBSV6GE6fyyNxyfHB+wPGD5Liwn+1hePf+xRf1MmnYYwDoCfDSBYl007cDGBMNBIxe5TRW/MA4kHkh8F4mn3yQRUmezwqQUWvkRQq6UgRQhHGF/3QcFum4xQ6iteagRNqqo8VAWDzD+fxgbKUituR0Soe2beEvAtPaGnmKXtELl0Yvk5pbbnTex++9eq0TKHfdjGguktvuiXCRioCoz2IwG3Xm9tVeWwmBrdMO9VvQOC3qhY8m8tqx9UdNBzBfrhmT38YvzpSKRiF//uOKwu1CZO5henME9Pgn5JdI5URWdZmzmIgGdn86XF2dwUSjiRzHv2wtuXHF0XqGFJSmrlddw4Z2uU4Kz+GjOuow7hpShqzprffh4fdE+Y/ihw5s4oWDmbCBDdQT3n78nJ0lnh54knPu1suavaC9I4IeU7I5DDzOnMUiIkrrvTkqQcK28YedKmCnCtfOG56dE3qxq4u9ZoULYyZUwd2ldYtwyrbUhLiYcj/biw/6oP+zKi0q5vLADKxeoVLGwdB11hwU8cwE7Ll65cpd3hI80qAplLGdm7Quea4G5EaoyLGPEeLyCRkiRmJgUuQvES7fblQr4yRdNw8MPNfqnlqUN+2LFEb7ZCm0Cf2uRZKoIuKdqVz/F0WWXU8fwzM5rtd2gskxXrMHc9EvBuMX/LjS3jRQ5Kh3TaNtNTNMUK3qxZa9Sc77t0mi++G1xtRBSqJq9svPcG/rjAV9VtN22K67cPdqm2Qkk/p01Ns2/I6Tq5g== +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +SharingController_revoke + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/sidebar.ts b/docs/api-reference/reference/sidebar.ts new file mode 100644 index 0000000000..3ee1353414 --- /dev/null +++ b/docs/api-reference/reference/sidebar.ts @@ -0,0 +1,1176 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebar: SidebarsConfig = { + apisidebar: [ + { + type: "doc", + id: "reference/ospi-platform-api", + }, + { + type: "category", + label: "health", + items: [ + { + type: "doc", + id: "reference/health-controller-check", + label: "HealthController_check", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "auth", + items: [ + { + type: "doc", + id: "reference/auth-controller-register", + label: "AuthController_register", + className: "api-method post", + }, + { + type: "doc", + id: "reference/auth-controller-login", + label: "AuthController_login", + className: "api-method post", + }, + { + type: "doc", + id: "reference/auth-controller-refresh", + label: "AuthController_refresh", + className: "api-method post", + }, + { + type: "doc", + id: "reference/auth-controller-logout", + label: "AuthController_logout", + className: "api-method post", + }, + { + type: "doc", + id: "reference/auth-controller-logout-all", + label: "AuthController_logoutAll", + className: "api-method post", + }, + { + type: "doc", + id: "reference/auth-controller-list-sessions", + label: "AuthController_listSessions", + className: "api-method get", + }, + { + type: "doc", + id: "reference/auth-controller-revoke-session", + label: "AuthController_revokeSession", + className: "api-method delete", + }, + { + type: "doc", + id: "reference/auth-controller-create-api-client", + label: "AuthController_createApiClient", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "roles", + items: [ + { + type: "doc", + id: "reference/roles-controller-list-permissions", + label: "RolesController_listPermissions", + className: "api-method get", + }, + { + type: "doc", + id: "reference/roles-controller-create", + label: "RolesController_create", + className: "api-method post", + }, + { + type: "doc", + id: "reference/roles-controller-list", + label: "RolesController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/roles-controller-list-for-user", + label: "RolesController_listForUser", + className: "api-method get", + }, + { + type: "doc", + id: "reference/roles-controller-assign", + label: "RolesController_assign", + className: "api-method post", + }, + { + type: "doc", + id: "reference/roles-controller-revoke", + label: "RolesController_revoke", + className: "api-method delete", + }, + ], + }, + { + type: "category", + label: "organizations", + items: [ + { + type: "doc", + id: "reference/organizations-controller-get-own", + label: "OrganizationsController_getOwn", + className: "api-method get", + }, + { + type: "doc", + id: "reference/organizations-controller-update", + label: "OrganizationsController_update", + className: "api-method patch", + }, + { + type: "doc", + id: "reference/organizations-controller-list-legal-entities", + label: "OrganizationsController_listLegalEntities", + className: "api-method get", + }, + { + type: "doc", + id: "reference/organizations-controller-add-legal-entity", + label: "OrganizationsController_addLegalEntity", + className: "api-method post", + }, + { + type: "doc", + id: "reference/organizations-controller-list-users", + label: "OrganizationsController_listUsers", + className: "api-method get", + }, + { + type: "doc", + id: "reference/organizations-controller-invite-user", + label: "OrganizationsController_inviteUser", + className: "api-method post", + }, + { + type: "doc", + id: "reference/organizations-controller-list-roles", + label: "OrganizationsController_listRoles", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "identity", + items: [ + { + type: "doc", + id: "reference/identity-controller-create-producer", + label: "IdentityController_createProducer", + className: "api-method post", + }, + { + type: "doc", + id: "reference/identity-controller-list-producers", + label: "IdentityController_listProducers", + className: "api-method get", + }, + { + type: "doc", + id: "reference/identity-controller-issue-producer-code", + label: "IdentityController_issueProducerCode", + className: "api-method post", + }, + { + type: "doc", + id: "reference/identity-controller-issue-ospi-identity", + label: "IdentityController_issueOspiIdentity", + className: "api-method post", + }, + { + type: "doc", + id: "reference/identity-controller-validate", + label: "IdentityController_validate", + className: "api-method post", + }, + { + type: "doc", + id: "reference/identity-controller-lookup", + label: "IdentityController_lookup", + className: "api-method get", + }, + { + type: "doc", + id: "reference/identity-controller-retire", + label: "IdentityController_retire", + className: "api-method post", + }, + { + type: "doc", + id: "reference/identity-controller-suspend", + label: "IdentityController_suspend", + className: "api-method post", + }, + { + type: "doc", + id: "reference/identity-controller-reactivate", + label: "IdentityController_reactivate", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "products", + items: [ + { + type: "doc", + id: "reference/products-controller-create", + label: "ProductsController_create", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-list", + label: "ProductsController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/products-controller-create-bulk", + label: "ProductsController_createBulk", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-find-one", + label: "ProductsController_findOne", + className: "api-method get", + }, + { + type: "doc", + id: "reference/products-controller-update", + label: "ProductsController_update", + className: "api-method patch", + }, + { + type: "doc", + id: "reference/products-controller-validate", + label: "ProductsController_validate", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-publish", + label: "ProductsController_publish", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-unpublish", + label: "ProductsController_unpublish", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-retire", + label: "ProductsController_retire", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-recall", + label: "ProductsController_recall", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-add-variant", + label: "ProductsController_addVariant", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-list-variants", + label: "ProductsController_listVariants", + className: "api-method get", + }, + { + type: "doc", + id: "reference/products-controller-register-serialized-unit", + label: "ProductsController_registerSerializedUnit", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-list-serialized-units", + label: "ProductsController_listSerializedUnits", + className: "api-method get", + }, + { + type: "doc", + id: "reference/products-controller-register-serialized-units-bulk", + label: "ProductsController_registerSerializedUnitsBulk", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-set-translation", + label: "ProductsController_setTranslation", + className: "api-method put", + }, + { + type: "doc", + id: "reference/products-controller-remove-translation", + label: "ProductsController_removeTranslation", + className: "api-method delete", + }, + { + type: "doc", + id: "reference/products-controller-list-translations", + label: "ProductsController_listTranslations", + className: "api-method get", + }, + { + type: "doc", + id: "reference/products-controller-create-relationship", + label: "ProductsController_createRelationship", + className: "api-method post", + }, + { + type: "doc", + id: "reference/products-controller-list-relationships", + label: "ProductsController_listRelationships", + className: "api-method get", + }, + { + type: "doc", + id: "reference/products-controller-remove-relationship", + label: "ProductsController_removeRelationship", + className: "api-method delete", + }, + ], + }, + { + type: "category", + label: "categories", + items: [ + { + type: "doc", + id: "reference/categories-controller-create", + label: "CategoriesController_create", + className: "api-method post", + }, + { + type: "doc", + id: "reference/categories-controller-list", + label: "CategoriesController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/categories-controller-list-pending", + label: "CategoriesController_listPending", + className: "api-method get", + }, + { + type: "doc", + id: "reference/categories-controller-approve", + label: "CategoriesController_approve", + className: "api-method post", + }, + { + type: "doc", + id: "reference/categories-controller-reject", + label: "CategoriesController_reject", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "classification", + items: [ + { + type: "doc", + id: "reference/classification-controller-create-attribute-definition", + label: "ClassificationController_createAttributeDefinition", + className: "api-method post", + }, + { + type: "doc", + id: "reference/classification-controller-list-attribute-definitions", + label: "ClassificationController_listAttributeDefinitions", + className: "api-method get", + }, + { + type: "doc", + id: "reference/classification-controller-set-product-attribute-value", + label: "ClassificationController_setProductAttributeValue", + className: "api-method post", + }, + { + type: "doc", + id: "reference/classification-controller-set-variant-attribute-value", + label: "ClassificationController_setVariantAttributeValue", + className: "api-method post", + }, + { + type: "doc", + id: "reference/classification-controller-verify-attribute-value", + label: "ClassificationController_verifyAttributeValue", + className: "api-method post", + }, + { + type: "doc", + id: "reference/classification-controller-create-scheme", + label: "ClassificationController_createScheme", + className: "api-method post", + }, + { + type: "doc", + id: "reference/classification-controller-list-schemes", + label: "ClassificationController_listSchemes", + className: "api-method get", + }, + { + type: "doc", + id: "reference/classification-controller-add-node", + label: "ClassificationController_addNode", + className: "api-method post", + }, + { + type: "doc", + id: "reference/classification-controller-list-nodes", + label: "ClassificationController_listNodes", + className: "api-method get", + }, + { + type: "doc", + id: "reference/classification-controller-assign", + label: "ClassificationController_assign", + className: "api-method post", + }, + { + type: "doc", + id: "reference/classification-controller-set-category-attribute-schema", + label: "ClassificationController_setCategoryAttributeSchema", + className: "api-method post", + }, + { + type: "doc", + id: "reference/classification-controller-remove-category-attribute-schema", + label: "ClassificationController_removeCategoryAttributeSchema", + className: "api-method delete", + }, + { + type: "doc", + id: "reference/classification-controller-get-effective-attribute-schema", + label: "ClassificationController_getEffectiveAttributeSchema", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "documents", + items: [ + { + type: "doc", + id: "reference/documents-controller-create", + label: "DocumentsController_create", + className: "api-method post", + }, + { + type: "doc", + id: "reference/documents-controller-list", + label: "DocumentsController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/documents-controller-upload", + label: "DocumentsController_upload", + className: "api-method post", + }, + { + type: "doc", + id: "reference/documents-controller-find-one", + label: "DocumentsController_findOne", + className: "api-method get", + }, + { + type: "doc", + id: "reference/documents-controller-update-metadata", + label: "DocumentsController_updateMetadata", + className: "api-method patch", + }, + { + type: "doc", + id: "reference/documents-controller-get-download-url", + label: "DocumentsController_getDownloadUrl", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "locations", + items: [ + { + type: "doc", + id: "reference/locations-controller-create", + label: "LocationsController_create", + className: "api-method post", + }, + { + type: "doc", + id: "reference/locations-controller-list", + label: "LocationsController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/locations-controller-list-inventory", + label: "LocationsController_listInventory", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "inventory", + items: [ + { + type: "doc", + id: "reference/inventory-controller-upsert", + label: "InventoryController_upsert", + className: "api-method put", + }, + { + type: "doc", + id: "reference/inventory-controller-list", + label: "InventoryController_list", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "connections", + items: [ + { + type: "doc", + id: "reference/connections-controller-request", + label: "ConnectionsController_request", + className: "api-method post", + }, + { + type: "doc", + id: "reference/connections-controller-list", + label: "ConnectionsController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/connections-controller-accept", + label: "ConnectionsController_accept", + className: "api-method post", + }, + { + type: "doc", + id: "reference/connections-controller-reject", + label: "ConnectionsController_reject", + className: "api-method post", + }, + { + type: "doc", + id: "reference/connections-controller-suspend", + label: "ConnectionsController_suspend", + className: "api-method post", + }, + { + type: "doc", + id: "reference/connections-controller-terminate", + label: "ConnectionsController_terminate", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "sharing", + items: [ + { + type: "doc", + id: "reference/sharing-controller-create", + label: "SharingController_create", + className: "api-method post", + }, + { + type: "doc", + id: "reference/sharing-controller-list", + label: "SharingController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/sharing-controller-revoke", + label: "SharingController_revoke", + className: "api-method delete", + }, + ], + }, + { + type: "category", + label: "partner", + items: [ + { + type: "doc", + id: "reference/partner-controller-list-products", + label: "PartnerController_listProducts", + className: "api-method get", + }, + { + type: "doc", + id: "reference/partner-controller-get-product", + label: "PartnerController_getProduct", + className: "api-method get", + }, + { + type: "doc", + id: "reference/partner-controller-get-inventory", + label: "PartnerController_getInventory", + className: "api-method get", + }, + { + type: "doc", + id: "reference/partner-controller-list-documents", + label: "PartnerController_listDocuments", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "search", + items: [ + { + type: "doc", + id: "reference/search-controller-search-products", + label: "SearchController_searchProducts", + className: "api-method get", + }, + { + type: "doc", + id: "reference/search-controller-related", + label: "SearchController_related", + className: "api-method get", + }, + { + type: "doc", + id: "reference/search-controller-resolve", + label: "SearchController_resolve", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "offers", + items: [ + { + type: "doc", + id: "reference/offers-controller-create", + label: "OffersController_create", + className: "api-method post", + }, + { + type: "doc", + id: "reference/offers-controller-list-mine", + label: "OffersController_listMine", + className: "api-method get", + }, + { + type: "doc", + id: "reference/offers-controller-list-for-product", + label: "OffersController_listForProduct", + className: "api-method get", + }, + { + type: "doc", + id: "reference/offers-controller-withdraw", + label: "OffersController_withdraw", + className: "api-method delete", + }, + { + type: "doc", + id: "reference/offers-controller-set-buyer-minimum", + label: "OffersController_setBuyerMinimum", + className: "api-method post", + }, + { + type: "doc", + id: "reference/offers-controller-list-buyer-minimums", + label: "OffersController_listBuyerMinimums", + className: "api-method get", + }, + { + type: "doc", + id: "reference/offers-controller-remove-buyer-minimum", + label: "OffersController_removeBuyerMinimum", + className: "api-method delete", + }, + ], + }, + { + type: "category", + label: "orders", + items: [ + { + type: "doc", + id: "reference/orders-controller-create-draft", + label: "OrdersController_createDraft", + className: "api-method post", + }, + { + type: "doc", + id: "reference/orders-controller-list", + label: "OrdersController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/orders-controller-get", + label: "OrdersController_get", + className: "api-method get", + }, + { + type: "doc", + id: "reference/orders-controller-add-line", + label: "OrdersController_addLine", + className: "api-method post", + }, + { + type: "doc", + id: "reference/orders-controller-remove-line", + label: "OrdersController_removeLine", + className: "api-method delete", + }, + { + type: "doc", + id: "reference/orders-controller-submit", + label: "OrdersController_submit", + className: "api-method post", + }, + { + type: "doc", + id: "reference/orders-controller-accept", + label: "OrdersController_accept", + className: "api-method post", + }, + { + type: "doc", + id: "reference/orders-controller-reject", + label: "OrdersController_reject", + className: "api-method post", + }, + { + type: "doc", + id: "reference/orders-controller-update-status", + label: "OrdersController_updateStatus", + className: "api-method put", + }, + ], + }, + { + type: "category", + label: "dpp", + items: [ + { + type: "doc", + id: "reference/dpp-controller-create-profile", + label: "DppController_createProfile", + className: "api-method post", + }, + { + type: "doc", + id: "reference/dpp-controller-list-profiles", + label: "DppController_listProfiles", + className: "api-method get", + }, + { + type: "doc", + id: "reference/dpp-controller-create-record", + label: "DppController_createRecord", + className: "api-method post", + }, + { + type: "doc", + id: "reference/dpp-controller-validate", + label: "DppController_validate", + className: "api-method post", + }, + { + type: "doc", + id: "reference/dpp-controller-publish", + label: "DppController_publish", + className: "api-method post", + }, + { + type: "doc", + id: "reference/dpp-controller-suspend", + label: "DppController_suspend", + className: "api-method post", + }, + { + type: "doc", + id: "reference/dpp-controller-rotate-token", + label: "DppController_rotateToken", + className: "api-method post", + }, + { + type: "doc", + id: "reference/dpp-controller-get-owner", + label: "DppController_getOwner", + className: "api-method get", + }, + { + type: "doc", + id: "reference/dpp-controller-get-public", + label: "DppController_getPublic", + className: "api-method get", + }, + ], + }, + { + type: "category", + label: "webhooks", + items: [ + { + type: "doc", + id: "reference/webhooks-controller-create", + label: "WebhooksController_create", + className: "api-method post", + }, + { + type: "doc", + id: "reference/webhooks-controller-list", + label: "WebhooksController_list", + className: "api-method get", + }, + { + type: "doc", + id: "reference/webhooks-controller-remove", + label: "WebhooksController_remove", + className: "api-method delete", + }, + { + type: "doc", + id: "reference/webhooks-controller-deliveries", + label: "WebhooksController_deliveries", + className: "api-method get", + }, + { + type: "doc", + id: "reference/webhooks-controller-retry", + label: "WebhooksController_retry", + className: "api-method post", + }, + ], + }, + { + type: "category", + label: "Schemas", + items: [ + { + type: "doc", + id: "reference/schemas/registerdto", + label: "RegisterDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/errordetaildto", + label: "ErrorDetailDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/errorresponsedto", + label: "ErrorResponseDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/logindto", + label: "LoginDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/refreshdto", + label: "RefreshDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createapiclientdto", + label: "CreateApiClientDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createroledto", + label: "CreateRoleDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/assignroledto", + label: "AssignRoleDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/updateorganizationdto", + label: "UpdateOrganizationDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createlegalentitydto", + label: "CreateLegalEntityDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/inviteuserdto", + label: "InviteUserDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createproducerdto", + label: "CreateProducerDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/issueproducercodedto", + label: "IssueProducerCodeDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/issueospiidentitydto", + label: "IssueOspiIdentityDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/validatecodedto", + label: "ValidateCodeDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createproductdto", + label: "CreateProductDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/bulkcreateproductdto", + label: "BulkCreateProductDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/updateproductdto", + label: "UpdateProductDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createvariantdto", + label: "CreateVariantDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/registerserializedunitdto", + label: "RegisterSerializedUnitDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/bulkregisterserializedunitdto", + label: "BulkRegisterSerializedUnitDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/setproducttranslationdto", + label: "SetProductTranslationDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createproductrelationshipdto", + label: "CreateProductRelationshipDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createcategorydto", + label: "CreateCategoryDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/rejectcategorydto", + label: "RejectCategoryDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createattributedefinitiondto", + label: "CreateAttributeDefinitionDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/setattributevaluedto", + label: "SetAttributeValueDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createclassificationschemedto", + label: "CreateClassificationSchemeDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createclassificationnodedto", + label: "CreateClassificationNodeDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/assignclassificationdto", + label: "AssignClassificationDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/setcategoryattributeschemadto", + label: "SetCategoryAttributeSchemaDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createdocumentdto", + label: "CreateDocumentDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/uploaddocumentdto", + label: "UploadDocumentDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/updatedocumentmetadatadto", + label: "UpdateDocumentMetadataDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createlocationdto", + label: "CreateLocationDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/upsertinventorydto", + label: "UpsertInventoryDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/requestconnectiondto", + label: "RequestConnectionDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/sharingruledto", + label: "SharingRuleDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createsharinggrantdto", + label: "CreateSharingGrantDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createofferdto", + label: "CreateOfferDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/setofferbuyerminimumdto", + label: "SetOfferBuyerMinimumDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createdraftorderdto", + label: "CreateDraftOrderDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/addorderlinedto", + label: "AddOrderLineDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/updateordergroupstatusdto", + label: "UpdateOrderGroupStatusDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createdppprofiledto", + label: "CreateDppProfileDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createdpprecorddto", + label: "CreateDppRecordDto", + className: "schema", + }, + { + type: "doc", + id: "reference/schemas/createwebhooksubscriptiondto", + label: "CreateWebhookSubscriptionDto", + className: "schema", + }, + ], + }, + ], +}; + +export default sidebar.apisidebar; diff --git a/docs/api-reference/reference/webhooks-controller-create.ParamsDetails.json b/docs/api-reference/reference/webhooks-controller-create.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-create.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-create.RequestSchema.json b/docs/api-reference/reference/webhooks-controller-create.RequestSchema.json new file mode 100644 index 0000000000..c5d4bd71ea --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-create.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body","body":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","example":"https://example.com/ospi/webhook"},"eventTypes":{"type":"array","items":{"type":"string","enum":["identity.registered","identity.activated","identity.suspended","identity.reactivated","identity.retired","product.created","product.published","product.unpublished","product.recalled","product.archived","order.created","order.updated"]}}},"required":["url","eventTypes"],"title":"CreateWebhookSubscriptionDto"}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-create.StatusCodes.json b/docs/api-reference/reference/webhooks-controller-create.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-create.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-create.api.mdx b/docs/api-reference/reference/webhooks-controller-create.api.mdx new file mode 100644 index 0000000000..410d12c214 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-create.api.mdx @@ -0,0 +1,69 @@ +--- +id: webhooks-controller-create +title: "WebhooksController_create" +description: "WebhooksController_create" +sidebar_label: "WebhooksController_create" +hide_title: true +hide_table_of_contents: true +api: eJztmF9v2zgMwL+KoKcNUP60zd1tecvSHtADhvbarnsIikG2mVibLXkUlTYX+PPc97hPdqCs5k9bdDfgHvMUm5ZJivyRMbWWrgHUZJw9L+RYfoasdO6bnzpL6KoK8EuOoAmkko1GXQMBejme3SmJ8D2Apw+uWMnxOt4ahEKOCQMomTtLYIkf6aapTB6tDL56Z1nm8xJqzVe0akCOpcu+Qk5sB9knMuD5acBqZ5EnNHYhlYQHXTcVi0qixo8HgyTp564eON+YwX23F9kqCUuwdLNqOpVJl0bUK6mkIaj9izZsqOV4Jk0Blgyt+ggL4wl4k2or1TmZpaZ9oQ++AVvsCxFeXItAptPZoCtCTv0u5ruSJmSV8eWeLNiXpAi5rqo9kca8NMsoclgA7ujv7kNTxPu7tm3VTiZnMfx78btTkgzFyE+jloTMdch8jqbhJJ+Sk21S5RtnfRf34+ER/xSwWSjHktMzGg6fP7jVlSkiM2KuTQWFEg4FlSASeGJpXKUJvNAiC95Y8F5gqKAv/zf6ANHhj5flroDXKf0wOf1ydfbnp7PrG6me7PSadFaBqHVeGgs9BF1EQTQuWHefo1SD93rxAzvPoibmDoWzwMGrHYKYG6gKHzWmQHLlv6azOBodZ6Mi7x3Ph8e90btfh73sl5P3vffz0fz4t/noaJi9e7apqUOELj1UGp82c2+oFB5wCdjzpgBRuQX78oS6GM/tjnc93eHvjFWeAmlTdcTtK+ly93T9VSJyy+joJSw/Gu+NXShR62rusE74wUPD6kWOEKtXV/5A24G2n6Lt5Dltk0Al45RzF1YiCyTqDsBNw4vYNYBR7qx441AY8gLBu4A5CJ+7BpSYnF71hscnbw9YHrD8KSxHz7G82f7ZQrElrXDghXUk4MF4in3RdIKl8YaTRi5yGz9E8EDigcSfIvH9qySK3Nl5ZXLynfsRQu6UnjSBeAP9RV9oUYQOMxDBmu8BxFJXAQ5t8QDjf4exVZL0gsddmYbJOP94yAMaWsnxbC0z0AjIE3F793Sfr03TNVDpeORunI/QaCrlWA50YwbLo8HGHpvjkKSh+9H2NUPaAfboQSKXd5NEKl387rDWJMfyj883nGsej7+IyeW5+AY8Aaf08iQdI8WVcLWd7s8es52m8R+P3PsT98sT9F2rpLFzF/lKWbi4vjwXl5Um/uRmB5+hE1e8uWjAimvSttBYiMtuzBXn0co81fNbkTPSTdLWFx9vL7uPJP6M4pe4XMXUWU+GQiyLf/4enYyTHlopcYELbc1fUZ9Xgj/TVDIHKKauAK9EdCldJ1e8ErcajbZ8NdUEC4eGn0+I0GSB+Hpaae837ipx6vJQQ3xlEgpD3Ko48d3Gh/2j/jA1L51z8+JMMTy1jm3L6pj6R+bEFjqxgW4vlpuyJnigQVNpY7nw04FLx+NM6sawH0dS7dVAydSOZ3K9zrSHT1i1LYu/B8BVR+qSA5BxWmec6hJ0EetkLRk6bgKxC/cYErbA7ZlPZZ525FY9vjHJc2jo1bV3O4V1eRH7aZbOp+rYhyXqe+4Z+p7PHpR0MRixjqJsLSttFyH2Utnp5DjrwNHYROxJfcVdPZ4q2dWOh+t1t+LGfQPbtlKlrRDfy5bPW/4Fx8u7JQ== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +WebhooksController_create + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-deliveries.ParamsDetails.json b/docs/api-reference/reference/webhooks-controller-deliveries.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-deliveries.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-deliveries.RequestSchema.json b/docs/api-reference/reference/webhooks-controller-deliveries.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-deliveries.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-deliveries.StatusCodes.json b/docs/api-reference/reference/webhooks-controller-deliveries.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-deliveries.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-deliveries.api.mdx b/docs/api-reference/reference/webhooks-controller-deliveries.api.mdx new file mode 100644 index 0000000000..88ce29f565 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-deliveries.api.mdx @@ -0,0 +1,69 @@ +--- +id: webhooks-controller-deliveries +title: "WebhooksController_deliveries" +description: "WebhooksController_deliveries" +sidebar_label: "WebhooksController_deliveries" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMWKbDYbJLNHoIgoMSRxY1EKuTIm9TQ8/Q9+mTFUIrz4cWmuftkmtIM/5z5cczxWrgavSLj7IkWifiKaeHcbVg4S96VJfobjaVZoTcYhBS18qpCQh9EcrUWVlUoEmG0kMLjXWM8apGQb1AKY0UiakWFkCJkBVZKJGtBDzVbBPLGLkXbXrNhqJ0NGPj5dDzmD40h86ZmXSIRopVi9qMHl6o0OqqHXJkStQTngQoEVoOBYGVcqQgDKEibYCyGAL4pcSikyJwltMRuVV2XJoueRt8C+15vi3bpN8yIo+A5amQ6yei982+/ljmN2xGQAu9VVZc89fv86Obs+POX4/MLIV/t9JxUWiJUKiuMxYFHpeNEXBzY95CjVGEIavnGOltRg9x5cBY5eJXzCLnBUofosQ8k0/Ezn3oym6YznQ2m+Xg6mH34dTxIfzk4HBzms3z6Wz6bjNMPW5taOO+xSw8VJvSb+W6ogIB+hX4QjEYo3ZK1tM8Zu+ri+bTj50qvpSBDUdcxuzxCUqY8IrflpMvd6/fPeiI7izbSN9mm76MJwdilhEqVufNVjx/e1+weMo8aLRlVhh1tO9reRdvBNm3zhgrGKVPEoKUNQdUBuCl4EbsafZx3FvacB0MBPAbX+AwhZK5GCfOjs8F4erC/w3KH5buwnG1jefH0Y4v6iTTtMIB1BHhvAsW6aLqJlQmGk0YucpspvmXsSNyR+C4SD39KImTO5qXJKHTyI4RcKQMpQtjD4XIICnTTYYbQWHPXIKxU2eCuLO5g/P8wtlKQWnI7JL73zRPbBMwab+ghtkkpKo9eJFfX3O+83OdbHVeFVDhuzZYYueGGKhEjVZvRajJ6XHK0NrodvTDsosTCnsk5Z2475h5F9TDzBvsp2Q/+cL5SJBLx19cLTr8LtbmB+ekJ3OKDkI8ZL4jqGDxjcxdJ6OP16fz0BE5LRXw5ZrutJMc39j7VaOGclNXKazj1TjcZwUm8POf9yduHjOGre29D+Hh52l1n+MLDRnywYOFsIENNBPjff2YHSe+HHiR88ktlzd/RX5DAFyrZL4ceFk5jkBAl9eNeSpBwqbxRlkcLRbh0HGMJcyJv0oZ4vChVCBu5Eo5c1lQYTeaNNsRFhfPRbXw8nAzHfZlRGZcZDmDtAlUqFpi+s36kA57wgBdZfhHPzSEkvKdRXSpj+Zg2vuRnHTpXQtWGtUyEfCJWiiQ28c98X0tRuEBssV6nKuAXX7YtT9816B86rlYcl5SzfbUW2gQea5Hkqgy4JW5TU8XeWX/O9uGJo5ei+0llmbRYl/mPACkYvfiPQ3vdSlGg0vFkrfsH8yzDmp6ZbFVvPoKbQ/XnMZdT1XBkNtF7dQyi9x/KWa+7Ny7cLdq23agj/s4C2/Y/kID0Aw== +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +WebhooksController_deliveries + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-list.ParamsDetails.json b/docs/api-reference/reference/webhooks-controller-list.ParamsDetails.json new file mode 100644 index 0000000000..9154effd26 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-list.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[]} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-list.RequestSchema.json b/docs/api-reference/reference/webhooks-controller-list.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-list.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-list.StatusCodes.json b/docs/api-reference/reference/webhooks-controller-list.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-list.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-list.api.mdx b/docs/api-reference/reference/webhooks-controller-list.api.mdx new file mode 100644 index 0000000000..1f1311285f --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-list.api.mdx @@ -0,0 +1,69 @@ +--- +id: webhooks-controller-list +title: "WebhooksController_list" +description: "WebhooksController_list" +sidebar_label: "WebhooksController_list" +hide_title: true +hide_table_of_contents: true +api: eJztl91S4zYUx1/ljK7YGSckIW0X36WBdujMDixh2QuGYWT5ONYiS0Y6zpJm/Dx9jz5Z58gmsKTdLfe5Qujjf75+PpE2wtXoJWlnz3KRis+Ylc7dh7mz5J0x6O+MDiQSUUsvKyT0QaQ3t4nwGGpnAwaRbsRkNOI/OQbldc1qIhWiTcT03xaupdF5tAmF1AbzBJwHKhE8PjQYCFbaGUkYQELWBG0xBPCNwaFIhHKW0BLLyro2WkWlwy+BtTciqBIrySNa1yhS4bIvqGIEnmMl3bmM3jv/423K5fhiVyCv7VIkAh9lVRue+nV2cnd5+vHT6eJKJK8iXZDMDEIlVaktDjzKPE5E48DaQ85ShSHI5Q/s7GQNCufBWeTkVc4jFBpNHqJin0iu6fc08/F0kk1zNZgUo8lg+v7n0SD76eh4cFxMi8kvxXQ8yt7vBDV33mNXHip16IP5qqmEgH6FfhB0jmDckn3pndEec5HedPl8jvilp7eJIE3Rr1OWPEGS2pyQ2xHpavd6/2VPZHeijfSNd+n7oEPQdplAJU3hfNXjh481y4PymKMlLU3Y07an7U20He3SNmuoZJyUJAYtawiqDsBtw4vY1ejjvLNw4DxoCuAxuMYrhKBcjQnMTi4Ho8nRuz2WeyzfhOV0F8ur5x9bzJ9Jyx0GsI4AH3Wg2Bd1N7HSQXPRyEVuleS7wZ7EPYlvIvH4uySCcrYwWlHo3I8QcqcMJAnhAIfLIUjImw4zhMbqhwZhJU2D+7a4h/H/w9gmguSSnzLia//k4TMBVeM1rUV6sxEZSo+eXzvt7es4//udVCGVjp9SS+yeTVSKVBzKWh+uxodbY2yL89G/pp4ML5jQjq4n8z22HEo/lfSD35yvJIlU/PH5igvtQq3vYHZxBve4FslTbUuiOqZJ28LFmveZOV9cnMGFkcTXYD63U8644+C8RgsLkjaXPocL7/JGEZzFa3LRf2PvQDFmda82hA/XF93Fha82fIg/IZg7G0hTE1H9+6/pUdrr0DqBc7+UVv8Z9UICfHVKenPoYe5yDAlEl/px70pI4Fp6LS2P5pJw6bzm9RmR11lDPJ4bGcLW3QROnGoqjEdmTa6J2wfXowt8NBwPR31DkYobCiewdoEqGVuJlbEiTxzAMwjQg/BNJrcfGuEjHdZGasufYuMNr3WQ3AhZa/ZiLJJvqCxdIF7ebDIZ8JM3bcvTDw36dYfPisPPuKg3t20iSpR5JHcjmIRUzJTCmp2KrVKku92REd+i+/sptyvZsFdbz1/BF9X7JWnXL7Q3m27HlbtH27Yi6Z0g/l+0t23b/gOFcKSR +sidebar_class_name: "get api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +WebhooksController_list + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-remove.ParamsDetails.json b/docs/api-reference/reference/webhooks-controller-remove.ParamsDetails.json new file mode 100644 index 0000000000..915d752e58 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-remove.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-remove.RequestSchema.json b/docs/api-reference/reference/webhooks-controller-remove.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-remove.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-remove.StatusCodes.json b/docs/api-reference/reference/webhooks-controller-remove.StatusCodes.json new file mode 100644 index 0000000000..6a5dfc9b82 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-remove.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"200":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-remove.api.mdx b/docs/api-reference/reference/webhooks-controller-remove.api.mdx new file mode 100644 index 0000000000..d8d8c57530 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-remove.api.mdx @@ -0,0 +1,69 @@ +--- +id: webhooks-controller-remove +title: "WebhooksController_remove" +description: "WebhooksController_remove" +sidebar_label: "WebhooksController_remove" +hide_title: true +hide_table_of_contents: true +api: eJztmNtu4zYQhl9lwKsEoI9x243uXNsFUnSx2SSbvQiCgBLHFjcSqZAjb1JDz9P36JMVQynOwYtsc+8r0zwMf858HHO8Ea5Cr8g4e6JFIr5imjt3G2bOkndFgf7GY+nWKKSolFclEvogkquNsKpEkQijhRQe72rjUYuEfI1SGCsSUSnKhRQhy7FUItkIeqh4RSBv7Eo0zTUvDJWzAQOPj4dD/tAYMm8q1iQSIRopJj8auFSF0VE5LJUpUEtwHihHYDUYCNbGFYowgIK0DsZiCODrAvtCisxZQktsVlVVYbJoafAtsO3NrmiXfsOM2AuePUamlYzeO//zaZnTuOsBKfBelVXBXb9P5zdni89fFucXQr466TmptEAoVZYbiz2PSseOuDmw7T57qcQQ1Oon++x4DZbOg7PIziudR1gaLHSIFjtHMhlv2dSjyTid6Kw3Xg7HvcmHX4e99Jej497xcrIc/7acjIbph51DzZz32IaHchO6w3w3lENAv0bfC0YjFG7FWprnjF21/nw68XOl11KQoahrwSbnSMoUc3I7RtrYvZ5/1hHZrmgifaNd+j6aEIxdSShVsXS+7PDD+4rNQ+ZRoyWjirCnbU/bu2g72qVtWlPOOGWKGLS0JihbALcJL2JXoY/9zsKB82AogMfgap8hhMxVKGE6P+sNx0eHeyz3WL4Ly8kulhdPP7aon0jTDgNYR4D3JlDMi6btWJtgOGjkIreZ4hfGnsQ9ie8i8fhNEiFzdlmYjEIrP0LImTKQIoQD7K/6oEDXLWYItTV3NcJaFTXu0+Iexv8PYyMFqRWXQ+J7VzjxmoBZ7Q09xDIpReXRi+Tqmuudl+d8q9oqkXLHJZnGAqmtvygXiRioygzWo8HjjoON0Q3XWdEzLOaZhHNmteXsUUgHMB+q65Jd4w/nS0UiEX9+veCQu1CZG5iensAtPgj5GOWcqIoOM3bpYvQ7H306Pz2B00IRP4h53U5g44yDTxVaOCdltfIaTr3TdUZwEh/My+62HULGwFWdtT58vDxtnzD8yOFFfJlg5mwgQ3WE9t9/JkdJZ4ceJHzyK2XN39FekMCPKNlthx5mTmOQECV17U5KkHCpvFGWWzNFuHLe8PiUyJu0Jm7PChXCVq6EucvqEuOSaa0NcSLheLQHH/ZH/WGXWlTGqYUdWLlApYpJpaumH4mAJyRgi8QLX24vHeE9DapCGcvXsvYFj7WsXAlVGdYxEvKJUCkSE+9C7gLxpM0mVQG/+KJpuPuuRv/QYrRmN6Qc3KuN0CZwW4tkqYqAO3q2aVMcnHVX6RCesHmps+tUlsGKqZdrfSmYtPinQnPdSJGj0vHybLqBaZZhRc+W7CRovmXbuzNf/LW4WAgpVM3+2PrsFfhxgx8q2mzaGRfuFm3TbAUSf2eNTfMfAKToOA== +sidebar_class_name: "delete api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +WebhooksController_remove + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-retry.ParamsDetails.json b/docs/api-reference/reference/webhooks-controller-retry.ParamsDetails.json new file mode 100644 index 0000000000..1b3479e9ef --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-retry.ParamsDetails.json @@ -0,0 +1 @@ +{"parameters":[{"name":"deliveryId","required":true,"in":"path","schema":{"type":"string"}}]} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-retry.RequestSchema.json b/docs/api-reference/reference/webhooks-controller-retry.RequestSchema.json new file mode 100644 index 0000000000..c96bcede2f --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-retry.RequestSchema.json @@ -0,0 +1 @@ +{"title":"Body"} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-retry.StatusCodes.json b/docs/api-reference/reference/webhooks-controller-retry.StatusCodes.json new file mode 100644 index 0000000000..6708b73ac0 --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-retry.StatusCodes.json @@ -0,0 +1 @@ +{"responses":{"201":{"description":""},"400":{"description":"Validation failed, or the request violates a business rule.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"401":{"description":"Missing, malformed, or expired credentials.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"403":{"description":"Authenticated, but missing the required permission (or its resource scope, ADR-023).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"404":{"description":"The requested resource does not exist, or is not visible to the caller.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}},"409":{"description":"The request conflicts with existing state (e.g. a duplicate unique value).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"BAD_REQUEST","description":"Stable machine-readable error code."},"message":{"type":"string","example":"Validation failed for one or more fields."},"requestId":{"type":"string","example":"d142b4dc-2f02-4860-b539-9f4f27f410b8","description":"Correlates this error with server-side logs."}},"required":["code","message","requestId"],"title":"ErrorDetailDto"}},"required":["error"],"title":"ErrorResponseDto"}}}}}} \ No newline at end of file diff --git a/docs/api-reference/reference/webhooks-controller-retry.api.mdx b/docs/api-reference/reference/webhooks-controller-retry.api.mdx new file mode 100644 index 0000000000..f5116eaedb --- /dev/null +++ b/docs/api-reference/reference/webhooks-controller-retry.api.mdx @@ -0,0 +1,69 @@ +--- +id: webhooks-controller-retry +title: "WebhooksController_retry" +description: "WebhooksController_retry" +sidebar_label: "WebhooksController_retry" +hide_title: true +hide_table_of_contents: true +api: eJztmM1u4zYQx19lwFMC0J9x241urpMCKbCIm2SzByMIKHFscyORCjnyxjX0PH2PPlkxlGIn8SLb3H0yTYnD/8z8OOZ4I1yJXpFx9kKLRHzFdOncQ5g4S97lOfp7j+TXQopSeVUgoQ8imW2EVQWKRGjMzQr9+kILKTw+VsajFgn5CqUwViSiVLQUUoRsiYUSyUbQuuSVgbyxC1HXd7wwlM4GDPx82B/wh8aQeVOyNJEIUUsx6vf3H9yq3OjoAMyVyVFLcB5oicBqMBCsjMsVYQAFaRWMxRDAVzl2hRSZs4SW2Kwqy9xk0VLvW2Dbm33RLv2GGXE0PAeOTCMZvXf+569lTuN+BKTAJ1WUOU/9Pj67vzr/68v59Y2Qbzy9JpXmCIXKlsZix6PScSJuDmy7y1EqMAS1+Mk+e1GDufPgLHLwCucR5gZzHaLFNpAMyHs29WA0TEc66wzn/WFn9OnXfif95eS0czofzYe/zUeDfvppz6mJ8x6b9NDShNaZ74aWENCv0HeC0Qi5W7CW+iVjsyaeO49fKr2TggxFXeds8gxJmfyM3J6RJndv379qiWxW1JG+H2D52YRg7EJCofK580WLHz6VbB4yjxotGZWHA20H2j5E28k+beOKloxTpohBSyuCogFwW/AidiX6OO8sHDkPhgJ4DK7yGULIXIkSxmdXnf7w5PiA5QHLD2E52sfyZvdji3pHmnYYwDoCfDKBYl00zcTKBMNJIxe5zRRfNA4kHkj8EImn75IImbPz3GQUGvkRQq6UgRQhHGF30QUFumowQ6iseawQViqv8FAWDzD+fxhrKUgtuC0S39v+idcEzCpvaB3bpRSVRy+S2R33O6/9fKfpKpCWjhuz0oXIDDdTieip0vRWg97zdr22DTMYeptdS1b3nu008WKJL4RdM8ENfc/yWqzZ1XZKtoM/nC8UiUT8+fWGQXChNPcwnl7AA/IObe6XRGUMo7FzF5loI3d5Pb2Aaa6Ir8m8bi/d8Y2jyxItXJOyWnkNU+90lRFcxGv0vD2Dx5AxhmVrrQufb6fNxYavPryIjxhMnA1kqIoo//vP6CRp7dBawqVfKGv+jvaCBL5ayXY79DBxGoOEKKkdt1KChFvljbI8mijCheOwSxgTeZNWxONJrkLYypVw5rKqwLhkXGlDXF44H43j/e6g228Ljsq44HAAOeOFiqWm7bWfOYEdKPCc4Feh3J5Ewifqlbkyls9q5XN+1jA0E6o0LGMg5A5bKXYkCSmSN+0973UnxZJhTGZis0lVwC8+r2uefqzQrxvEVhyilBM/2whtAo+1SOYqD7gndltoxdFVe/iOYYfUayfaSWXZ61is+d8BKZjCV39H1He1FEtUOh67TfvCOMuwpBdL90o7n8/tsZtexmKrKg7ZNqxvjkY0/0Ndm03zxo17QFvXW5nE31lhXf8HSdMBOA== +sidebar_class_name: "post api-method" +info_path: api-reference/reference/ospi-platform-api +custom_edit_url: null +--- + +import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint"; +import ParamsDetails from "@theme/ParamsDetails"; +import RequestSchema from "@theme/RequestSchema"; +import StatusCodes from "@theme/StatusCodes"; +import OperationTabs from "@theme/OperationTabs"; +import TabItem from "@theme/TabItem"; +import Heading from "@theme/Heading"; +import Translate from "@docusaurus/Translate"; + + + + + + + + + + +WebhooksController_retry + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api-reference/search.md b/docs/api-reference/search.md new file mode 100644 index 0000000000..a4f763a181 --- /dev/null +++ b/docs/api-reference/search.md @@ -0,0 +1,33 @@ +--- +title: Search & Discovery +sidebar_position: 10 +--- + +# Search & Discovery + +## Endpoints + +| Method | Path | Description | Auth | +| --- | --- | --- | --- | +| `GET` | `/search/products` | Full-text product search | Bearer | +| `GET` | `/search/products/:id/related` | Related products via shared category/classification | Bearer | +| `GET` | `/search/resolve/:code` | OSPI Code Resolver | none (optional) | + +## Product search + +```http +GET /api/v1/search/products?q=stainless+bottle&scope=network +Authorization: Bearer +``` + +`GET /search/products` runs directly against PostgreSQL full-text search — there is no dedicated search engine behind it ([ADR-012](/architecture/adr/adr-012-search-postgres-fts)). Default `scope` is the caller's own organization. `?scope=network` additionally includes products from organizations that granted the caller an active `PRODUCT_DATA` sharing grant scoped `ALL_PRODUCTS` or `PRODUCT_CATEGORY` — individual `PRODUCT`-targeted grants are deliberately excluded from this general listing (folding those in would be an unbounded per-candidate-grant cost without a real search index); they're still reachable via the [Partner endpoints](/api-reference/connections-and-sharing#partner-facing-reads). + +## Resolver + +```http +GET /api/v1/search/resolve/OSPI-ACME-123456-00012345-0001-00000001-1-K3F +``` + +Reachable **without login** — matches the "scan a code, no login" use case (Deel 4 §26-27). An OSPI code and its basic identity (name, category, manufacturer) are treated as public registry data. Returns the full chain: code → product → manufacturer → variants → documents. + +What *is* access-controlled is each attached document's `visibility` — `PUBLIC` documents always come back, `RESTRICTED` ones only once the caller (if authenticated) holds an active `CONTENT` grant, `PRIVATE` ones never come back through this endpoint. This endpoint is rate-limited (see [API conventions](/api-reference#rate-limiting)). diff --git a/docs/api-reference/webhooks.md b/docs/api-reference/webhooks.md new file mode 100644 index 0000000000..f3f991a475 --- /dev/null +++ b/docs/api-reference/webhooks.md @@ -0,0 +1,40 @@ +--- +title: Webhooks +sidebar_position: 13 +--- + +# Webhooks + +An organization registers its own HTTPS endpoint and event types, and gets HMAC-signed, thin-payload notifications with exponential-backoff retries and dead-lettering after 8 attempts ([ADR-026](/architecture/adr/adr-026-webhooks)). + +## Endpoints + +| Method | Path | Description | Permission | +| --- | --- | --- | --- | +| `POST` | `/webhooks` | Register a subscription | `webhooks:manage` | +| `GET` | `/webhooks` | List subscriptions | — | +| `DELETE` | `/webhooks/:id` | Remove a subscription | — | +| `GET` | `/webhooks/:id/deliveries` | Delivery log | — | +| `POST` | `/webhooks/deliveries/:deliveryId/retry` | Manually retry one delivery | — | + +## Register a subscription + +```http +POST /api/v1/webhooks +Authorization: Bearer +Content-Type: application/json + +{ + "url": "https://erp.acme.example/hooks/ospi", + "eventTypes": ["product.published", "order.submitted"], + "secret": "whsec_..." +} +``` + +Event types follow an `.` pattern: `identity.*`, `product.*`, `order.*`. + +## Delivery + +Deliveries are queued durably in Postgres and dispatched from a periodic sweep — **never inline** in the request that triggered the event, so an unreachable partner endpoint can't slow down or fail an OSPI write. Each payload is signed with HMAC using the subscription's secret; verify the signature before trusting a delivery. After 8 failed attempts a delivery is dead-lettered and must be retried manually via `POST /webhooks/deliveries/:deliveryId/retry`. + +This covers an organization's own outbound channel only (Deel 5/8). The separate category/brand-scoped partner-distribution subscription model (Deel 14) is not built yet. diff --git a/docs/architecture/adr/_category_.json b/docs/architecture/adr/_category_.json new file mode 100644 index 0000000000..14dd3784d1 --- /dev/null +++ b/docs/architecture/adr/_category_.json @@ -0,0 +1,9 @@ +{ + "label": "Architecture Decision Records", + "position": 2, + "link": { + "type": "generated-index", + "title": "Architecture Decision Records", + "description": "34 ADRs recording every place the OSPI source specification (Deel 1–26) was ambiguous, conflicting, or silent, and the concrete decision the platform build made instead." + } +} diff --git a/docs/architecture/adr/adr-001-technology-stack.md b/docs/architecture/adr/adr-001-technology-stack.md new file mode 100644 index 0000000000..146f21e36f --- /dev/null +++ b/docs/architecture/adr/adr-001-technology-stack.md @@ -0,0 +1,42 @@ +--- +title: "ADR-001: Technology Stack" +sidebar_label: "ADR-001" +sidebar_position: 1 +--- + +**Status:** Accepted +**Date:** 2026-08-16 +**Deciders:** Product owner + Claude (build agent), per explicit request to make pragmatic decisions and document them for later review. + +## Context + +The Project Constitution (Deel 1, §7) mandates technology neutrality until requirements are settled, and explicitly defers the stack decision ("Nog niet vastgelegd"). The High-Level Architecture doc likewise leaves this open, only noting PostgreSQL as a likely candidate. To begin implementation, a concrete choice is required. + +Target scale per Constitution §6.3: from 10 companies / 100,000 products to an architectural guideline of 100,000+ companies / 100,000,000+ products, without a full architectural rewrite. + +## Decision + +- **Language/runtime:** TypeScript on Node.js +- **API framework:** NestJS (modular, opinionated, DI-based — maps directly onto the "modular monolith first" principle in Constitution §37 and High-Level Architecture's logical module boundaries) +- **ORM/schema:** Prisma, backed by **PostgreSQL** +- **API style:** REST + OpenAPI (via `@nestjs/swagger`), matching Constitution §13 (OpenAPI is mandatory for public APIs) +- **Async/background processing:** BullMQ + Redis (deferred to when the first async job — bulk import — is implemented; not required for the initial skeleton) +- **Deployment:** container-based (Docker), stateless API processes behind a load balancer, per Constitution §8.2/§8.3 + +## Rationale + +At this platform's scale, the dominant bottleneck is the **data layer** (indexing, partitioning, read replicas, caching, search), not the API language. That layer's design is identical in shape regardless of language choice. NestJS enforces domain-bounded modules (Organizations, Identity, Products, Classification, ...) that can later be extracted into independent services when justified (Constitution §37/§38) without a rewrite of the rest of the system. CPU-heavy or bulk work (imports, search indexing, checksum computation at scale) is pushed to asynchronous background workers per Constitution §27 — those workers can be reimplemented in a faster language later without touching the API contract. + +TypeScript/NestJS was chosen over Go and Java/Spring primarily for team-scaling reasons: broad hiring pool, native OpenAPI tooling, and Prisma's type-safe handling of the extensible/dynamic attribute model (JSONB + validation layer) fits the domain model described in Deel 11/24 well. + +## Alternatives considered + +- **Go:** Better raw concurrency/performance, but slower to iterate on a large, evolving domain model (26 chapters worth of entities) and a smaller pool of business-logic-focused developers. +- **Java/Kotlin (Spring Boot):** Proven at this scale (comparable to SAP/Salesforce-class backends), but materially slower development velocity for an MVP-stage product. +- **Python (FastAPI/Django):** Fast to prototype, but weaker performance ceiling for the core API hot path at target scale; better suited to auxiliary data/ML tooling than the core platform. + +## Consequences + +- The team hired later should be TypeScript/Node-proficient for the core platform; polyglot workers are acceptable for extracted services. +- Prisma migrations become the source of truth for schema evolution; must stay disciplined about migration review given multi-tenant data. +- This ADR does not lock in the *database topology* (single instance vs. sharded vs. multi-region) — see ADR-007. diff --git a/docs/architecture/adr/adr-002-organization-lifecycle-status.md b/docs/architecture/adr/adr-002-organization-lifecycle-status.md new file mode 100644 index 0000000000..4f929de4bc --- /dev/null +++ b/docs/architecture/adr/adr-002-organization-lifecycle-status.md @@ -0,0 +1,38 @@ +--- +title: "ADR-002: Organization Lifecycle Status Enum" +sidebar_label: "ADR-002" +sidebar_position: 2 +--- + +**Status:** Accepted +**Date:** 2026-08-16 + +## Context + +Three source chapters define conflicting status enums for the `Organization` entity: + +- Deel 6 (Core Data Model, §6): `ACTIVE / SUSPENDED / INACTIVE` +- Deel 9 (Organizations, Multi-Tenancy..., §8): `ACTIVE / SUSPENDED / CLOSED` +- Deel 25 (Organization, Entity, Identity..., §83): `ACTIVE / SUSPENDED / ARCHIVED / DELETED` + +This is a real schema conflict, not a wording difference — a builder must pick one before writing a migration. + +## Decision + +Adopt a single canonical lifecycle, a superset that preserves the distinct intents found across all three sources: + +``` +PENDING -- created, not yet verified/activated (new state; needed for onboarding flow, not explicit in any source but implied by "organization creation" flows in Deel 7/9) +ACTIVE -- normal operating state +SUSPENDED -- temporarily disabled (billing issue, policy violation, admin action) — reversible +ARCHIVED -- soft-closed, read-only, data retained (e.g. organization stopped using the platform) — reversible with admin action +DELETED -- soft-deleted, data retained per retention policy, not reversible via normal API (matches Constitution §18 auditability + §6.4 data durability — hard deletes of tenant data are not permitted without an explicit, audited, admin-level process) +``` + +`INACTIVE` (Deel 6) and `CLOSED` (Deel 9) are treated as synonyms folded into `ARCHIVED`. + +## Consequences + +- Deel 6, Deel 9, and Deel 25 should be marked superseded-by-this-ADR for this specific field in any future documentation consolidation pass. +- All authorization checks must treat `SUSPENDED`, `ARCHIVED`, and `DELETED` organizations as non-writable; `ARCHIVED`/`DELETED` also non-readable via normal tenant-scoped endpoints (admin-only access). +- This does not resolve the broader duplication problem across Deel 6/9/25 (see the earlier documentation-conflict report) — only this one field, which was required to write the Prisma schema. diff --git a/docs/architecture/adr/adr-003-attribute-datatype-system.md b/docs/architecture/adr/adr-003-attribute-datatype-system.md new file mode 100644 index 0000000000..96c8d6efae --- /dev/null +++ b/docs/architecture/adr/adr-003-attribute-datatype-system.md @@ -0,0 +1,32 @@ +--- +title: "ADR-003: Attribute Datatype System" +sidebar_label: "ADR-003" +sidebar_position: 3 +--- + +**Status:** Accepted +**Date:** 2026-08-16 + +## Context + +- Deel 11 (Classification, Taxonomy & Attribute Engine, §21): `TEXT, INTEGER, DECIMAL, BOOLEAN, DATE, DATETIME, ENUM, MEASUREMENT, REFERENCE` +- Deel 24 (Attribute System, Units, Classification..., §7): `STRING, TEXT, INTEGER, DECIMAL, BOOLEAN, DATE, DATETIME, ENUM, MEASUREMENT, REFERENCE, URL, EMAIL` + +Deel 24 splits `STRING` from `TEXT` and adds `URL`/`EMAIL`, which Deel 11 does not have. + +## Decision + +Adopt Deel 24's superset, with an explicit distinction: + +- `STRING` — short text, single line, indexable/filterable (e.g. model number) +- `TEXT` — long-form text, not typically used for filtering (e.g. description) +- `INTEGER`, `DECIMAL`, `BOOLEAN`, `DATE`, `DATETIME` — standard scalars +- `ENUM` — closed set of allowed values, defined per `AttributeDefinition` +- `MEASUREMENT` — numeric value + unit reference (needs a `Unit` reference table — not fully specified in either source; modeled here as `{ value: Decimal, unitCode: String }`) +- `REFERENCE` — reference to another entity (e.g. another product, a classification node) +- `URL`, `EMAIL` — validated string subtypes + +## Consequences + +- `AttributeValue` storage uses a single JSONB `value` column with the `dataType` on `AttributeDefinition` driving validation at the application layer, rather than a wide sparse table — this keeps the schema extensible per Constitution §19 without per-category migrations. +- Unit handling (`MEASUREMENT`) is intentionally minimal in this MVP: a `unitCode` string with no unit-conversion engine yet. Flagged in the roadmap as a follow-up (unit conversion/normalization is described only in prose in Deel 24, with no concrete algorithm). diff --git a/docs/architecture/adr/adr-004-ospi-code-checksum.md b/docs/architecture/adr/adr-004-ospi-code-checksum.md new file mode 100644 index 0000000000..4b90f25f9d --- /dev/null +++ b/docs/architecture/adr/adr-004-ospi-code-checksum.md @@ -0,0 +1,33 @@ +--- +title: "ADR-004: OSPI Code Checksum Algorithm" +sidebar_label: "ADR-004" +sidebar_position: 4 +--- + +**Status:** Accepted — explicitly ratified by product owner (2026-08-17), including the decision not to seek external validation before real codes are issued. +**Date:** 2026-08-16 + +## Context + +Deel 4, Deel 10, and Deel 23 consistently describe the OSPI code format as: + +``` +OSPI-[AAAA]-[BBBBBB]-[CCCCCCCC]-[DDDD]-[EEEEEEEE]-[V]-[FFF] +``` + +...and all three claim the checksum segment `FFF` (3 alphanumeric characters) is computed via the **Luhn algorithm**. This is internally inconsistent: Luhn is defined over numeric digit streams and produces a single check digit, not a 3-character alphanumeric checksum. All three source documents repeat the same error, so this is not resolvable by picking a "more authoritative" chapter — the underlying algorithm was never actually specified. + +## Decision + +Replace the checksum with a **base32 (Crockford alphabet) encoded CRC-16/CCITT-FALSE checksum** of the preceding segments (`AAAA-BBBBBB-CCCCCCCC-DDDD-EEEEEEEE-V`, ASCII bytes, no hyphens): + +1. Compute CRC-16/CCITT-FALSE over the concatenated identifier body. +2. Encode the resulting 16-bit value using Crockford's Base32 alphabet (excludes ambiguous characters I, L, O, U), left-padded, truncated/mapped to exactly 3 characters (32^3 = 32,768 ≥ 65,536 range requires the top bits to be dropped intentionally — accepted as a detection-only, not cryptographic, checksum, consistent with the original intent of catching transcription errors, not fraud). +3. This is implemented once in `libs/ospi-code/checksum.ts` and is the single source of truth — no other part of the system reimplements it. + +This is a pragmatic, unambiguous, implementable replacement for the broken Luhn reference. It is explicitly flagged as a **build-time decision requiring formal sign-off** before OSPI codes are issued to any real external party, since the checksum algorithm is effectively part of the public identifier standard and changing it later breaks previously-issued codes. + +## Consequences + +- Every previously-drafted example OSPI code in the documentation that shows a Luhn-derived checksum is now invalid and must be regenerated. +- This is the single highest-risk ADR in the initial build: it defines part of a public, supposedly permanent identifier format. Flagged in the README roadmap as **requires human/team ratification before any production code issuance**. diff --git a/docs/architecture/adr/adr-005-gs1-relationship.md b/docs/architecture/adr/adr-005-gs1-relationship.md new file mode 100644 index 0000000000..ab144d757a --- /dev/null +++ b/docs/architecture/adr/adr-005-gs1-relationship.md @@ -0,0 +1,54 @@ +--- +title: "ADR-005: Relationship to GS1/GTIN (MVP stance)" +sidebar_label: "ADR-005" +sidebar_position: 5 +--- + +**Status:** Accepted — strategic positioning decided by product owner (2026-08-17); legal/standards-body execution still outstanding, see below. +**Date:** 2026-08-16 + +## Context + +The documentation treats GTIN only as "an additional identifier" without addressing overlap, licensing, or the rationale for a new global scheme alongside the incumbent GS1 standard. + +## Decision (MVP scope only) + +For the MVP, OSPI does **not** claim to replace or compete with GS1/GTIN. `Product` and `ProductVariant` records have an **optional** `gtin` field stored alongside the OSPI code. OSPI codes are additive, internal-platform identifiers; no claim is made about global registry status, standards-body governance, or legal interoperability with GS1. + +**Strategic decision (2026-08-17, product owner):** the question this ADR originally deferred — +complement GS1, integrate with it, or position as an independent standard — is now answered: +**OSPI is positioned as its own, independent identification standard**, not merely an internal +platform feature or a layer on top of GS1. This changes the framing but not, on its own, much +of the engineering: OSPI codes were already independently generated and resolved end-to-end +(`ospi-code.util.ts`, the Identity/Search modules) without any dependency on GS1 infrastructure +— that part of the build already matched "independent standard" before this decision existed. +What the decision actually changes: +- Documentation/positioning language should stop hedging with "does not claim to replace or + compete with GS1" — that sentence above is now superseded by this update, kept only for + history. +- `gtin` stays as an **optional, supplementary** field, not removed: most real products will + carry both identifiers for the foreseeable future (retail channels built on GS1 don't + disappear because OSPI exists), and an independent standard is not weakened by also + interoperating with an established one. This is a "both/and," not "either/or." +- Actually *operating* as an independent standard — trademark/naming clearance, a real + standards-body or governance structure (Constitution's still-open "who owns/governs OSPI" + question), external communications, and any claims made to producers/regulators — is + business/legal work outside what this build session can do. The engineering stance is + decided; the institutional work to back that stance publicly is not. + +**Update (2026-08-17):** the follow-up flagged below is now done — `gtin` is checksum-validated +against GS1's published check-digit algorithm (`src/products/gtin.util.ts`, wired into +`CreateProductDto`/`UpdateProductDto` via a custom `@IsGtin()` class-validator decorator). +Supports GTIN-8/12/13/14. This only confirms the value is a *structurally valid* GTIN (correct +length, correct check digit) — it does **not** confirm the number was actually issued/registered +to anyone via GS1's real registry, since this build has no connectivity or business relationship +with GS1. That distinction matters: a syntactically valid but never-issued GTIN will still pass. + +## Consequences + +- This defers, rather than answers, the strategic question ("standard body vs. platform feature") raised in the earlier documentation review. That question is a business/governance decision, not an engineering one, and is out of scope for this build session. +- The README roadmap explicitly calls this out as **unresolved and requiring a decision from the product owner before any external-facing "standard" claims are made**. +- Checksum validation closes the narrower, purely technical gap this ADR originally flagged + ("no validation against GS1's actual check-digit algorithm implemented yet") without touching + the strategic question at all — those are independent, and only the technical one was ever an + engineering task Claude could resolve unilaterally. diff --git a/docs/architecture/adr/adr-006-dpp-espr-stance.md b/docs/architecture/adr/adr-006-dpp-espr-stance.md new file mode 100644 index 0000000000..9e40e5839d --- /dev/null +++ b/docs/architecture/adr/adr-006-dpp-espr-stance.md @@ -0,0 +1,34 @@ +--- +title: "ADR-006: DPP / EU ESPR Compliance Stance (MVP scope)" +sidebar_label: "ADR-006" +sidebar_position: 6 +--- + +**Status:** Accepted for MVP — legal/ESPR review explicitly deferred until post-MVP validation (product owner decision, 2026-08-17). Superseded in part by the DPP scaffold actually built (`src/dpp/`, ADR-013) — see note below. +**Date:** 2026-08-16 + +## Context + +Deel 12/18 describe "DPP profiles" as a self-defined concept, with no mapping to the actual EU Ecodesign for Sustainable Products Regulation (ESPR), which is the real regulatory driver for Digital Product Passports and defines category-specific delegated acts (batteries first, textiles/electronics following) with legally binding data requirements. + +## Decision (MVP scope only) + +**Correction (2026-08-17):** this ADR originally said DPP was "out of scope for this initial +build." That became stale once the build actually proceeded further (per the product owner's +"Maak de rest ook" instruction) and a generic DPP scaffold was built (`src/dpp/`, `DppProfile` → +`DppRecord` → live composition from existing Attributes/Documents — see ADR-013 for its access +model). What's still true, and is the actual substance of this ADR, is the compliance stance: +**no ESPR compliance claim is made or implied by that scaffold.** It's a generic +"profile defines required attributes → compose from existing product data" mechanism (Deel 12 +§2/§5), with zero mapping to ESPR's actual category-specific delegated acts. The data model's +extensibility (the same dynamic Attribute/Classification engine used for products generally) +is what made adding the scaffold possible without core schema changes — that part of the +original reasoning held up correctly. + +**Product owner decision (2026-08-17):** legal/ESPR review of this scaffold happens later, +after MVP validation — not before. The scaffold stays exactly as generic as it is today until +that review determines what, if anything, needs to change for a real compliance claim. + +## Consequences + +- This is explicitly flagged in the README roadmap as **not legally reviewed** — before OSPI is marketed as supporting DPP/ESPR compliance, a legal review against the actual regulation (and its category-specific delegated acts) is required. That review is now explicitly scheduled for post-MVP, not blocking current work. diff --git a/docs/architecture/adr/adr-007-multi-tenancy-isolation.md b/docs/architecture/adr/adr-007-multi-tenancy-isolation.md new file mode 100644 index 0000000000..8b73a3d0d0 --- /dev/null +++ b/docs/architecture/adr/adr-007-multi-tenancy-isolation.md @@ -0,0 +1,26 @@ +--- +title: "ADR-007: Multi-Tenancy Isolation Strategy (MVP)" +sidebar_label: "ADR-007" +sidebar_position: 7 +--- + +**Status:** Accepted for MVP; revisit before onboarding tenants with strict regulatory isolation requirements +**Date:** 2026-08-16 + +## Context + +Deel 6, 9, and 25 all describe tenant isolation as an open decision ("shared schema now, sharding/dedicated DB later, depends on scale"), consistently but without a concrete MVP-level implementation. Constitution §14 mandates isolation must never depend solely on frontend filtering, and must be enforced at application/domain level, with infrastructure-level enforcement "where possible." + +## Decision + +**Shared database, shared schema, row-level tenant scoping** for MVP: + +- Every tenant-owned table has a non-nullable `organizationId` column. +- All Prisma queries go through a repository layer that injects `organizationId` from the authenticated request context — application code never issues a raw query without this scope (enforced via a NestJS guard + a lint rule / code review checklist, documented in the README). +- PostgreSQL Row-Level Security (RLS) policies are additionally enabled on tenant-owned tables as defense-in-depth (Constitution §24 "defense in depth"), using a session-scoped `app.current_org_id` setting checked by RLS policy — so even a bug in application-layer scoping cannot leak cross-tenant data. +- Dedicated schema-per-tenant or database-per-tenant is deferred until a concrete driver emerges (e.g. a large enterprise tenant with contractual data-isolation requirements, or scale where a single Postgres instance's row counts become the bottleneck) — consistent with Constitution §37/§38 (no premature complexity). + +## Consequences + +- RLS policies must be included in every migration touching a tenant-owned table — this is a hard rule, not optional, given Constitution §6.4 (security by design) and the fact productdata is explicitly flagged as commercially sensitive. +- This is a stronger MVP starting point than the docs describe (they only mention shared-schema informally) — RLS as defense-in-depth was added here because "production-grade architecture" (Constitution §42) was explicitly required even for the MVP. diff --git a/docs/architecture/adr/adr-008-ospi-code-segment-widths.md b/docs/architecture/adr/adr-008-ospi-code-segment-widths.md new file mode 100644 index 0000000000..168861f729 --- /dev/null +++ b/docs/architecture/adr/adr-008-ospi-code-segment-widths.md @@ -0,0 +1,29 @@ +--- +title: "ADR-008: OSPI Code Segment Widths Are Variable, Not Fixed" +sidebar_label: "ADR-008" +sidebar_position: 8 +--- + +**Status:** Accepted — explicitly ratified by product owner (2026-08-17), including the decision not to seek external validation before real codes are issued. +**Date:** 2026-08-16 + +## Context + +Deel 4 §3 shows the format template `OSPI-[AAAA]-[BBBBBB]-[CCCCCCCC]-[DDDD]-[EEEEEEEE]-[V]-[FFF]`, which reads as fixed-width segments (4/6/8/4/8/1/3 characters). But Deel 4 §8 separately states the Producer Code (`AAAA` in the template) allows **up to 12 characters**, which contradicts a literal 4-character fixed width. Deel 4 §21 also requires "one fixed canonical serialization" for optional segments (variant code, serial/batch) without specifying what that is. + +## Decision + +Treat the bracketed placeholders (`AAAA`, `BBBBBB`, etc.) in the template as **illustrative, not literal fixed widths**. Segments are variable-length, uppercase `A-Z0-9` only (Deel 4 §9), with these MVP-implemented maximum lengths: + +- Producer Code: 1–12 characters (per §8, explicit) +- Product Category: 1–6 characters (as a working default; the "OSPI category registry" itself does not exist yet — see README roadmap) +- Company Product ID: 1–8 characters +- Variant Code: 1–4 characters, **omitted segment canonically represented as `0000`** when the product has no variant (resolves the §21 "one fixed standard" requirement, which the source docs leave unspecified) +- Serial/Batch Number: 1–8 characters, **omitted segment canonically represented as `00000000`** +- Version: single digit, starts at `1` +- Checksum: exactly 3 characters (see ADR-004) + +## Consequences + +- This is a genuine gap-fill, not a neutral transcription of the docs — flagged in the README as **requires ratification** before OSPI codes are issued externally, same as ADR-004. +- The "OSPI category registry" referenced in Deel 4 §12 does not exist as a governed, versioned list anywhere in the current build; Category codes are currently free-form per-organization strings. This is called out explicitly as a roadmap item, not silently implemented as if it were solved. diff --git a/docs/architecture/adr/adr-009-inventory-record-shape.md b/docs/architecture/adr/adr-009-inventory-record-shape.md new file mode 100644 index 0000000000..2bae10989d --- /dev/null +++ b/docs/architecture/adr/adr-009-inventory-record-shape.md @@ -0,0 +1,47 @@ +--- +title: "ADR-009: Inventory Record Shape & Scope" +sidebar_label: "ADR-009" +sidebar_position: 9 +--- + +**Status:** Accepted for MVP +**Date:** 2026-08-16 + +## Context + +Deel 16 §5 lists a conceptual `Inventory` record with a single `quantity` and `status` field, +but §6-8 requires computing an `available` quantity from several distinct buckets (on hand, +reserved, allocated, quarantined, damaged, in transit) that must be tracked separately — these +two descriptions are not literally reconcilable as one flat record with one quantity. + +Deel 16 §11-12 also describes inventory visibility (`PUBLIC` / `PARTNER_ONLY` / `PRIVATE`) and +quantity display modes (exact / range / boolean / hidden) intended for **external** viewers — +but the actual cross-organization exposure mechanism depends on the Sharing/Connections domain +(Deel 14/15), which is not built yet. + +## Decision + +1. **One `InventoryRecord` per `(organizationId, productId, locationId)`**, with explicit + quantity columns per bucket (`onHand`, `reserved`, `allocated`, `quarantined`, `damaged`, + `inTransit`) rather than one row per bucket. This makes "what's available right now for + this product at this location" a single-row read instead of an aggregation query — the + dominant access pattern for "Where to Find" (Deel 16 §1). +2. `availableQuantity` is **always derived**, never stored: `onHand - reserved - allocated - + quarantined - damaged` (in-transit stock is excluded, since it is explicitly not yet on + hand — Deel 16 §6 lists it as a distinct bucket from the ones summed in the §8 example). +3. `visibility` and `quantityDisplayMode` fields are stored on the model now (so the schema + doesn't need to change later), but **enforcement is out of scope for this addition** — every + endpoint built in this pass is owner-only (`organizationId` = caller's own org, full exact + detail). Exposing inventory to partners or the public requires the Sharing/Connections + domain to exist first, so that "who is a partner" is even a resolvable question. Until then, + `PARTNER_ONLY`/`PUBLIC` values can be set but have no externally-visible effect — flagged in + the README so this isn't mistaken for a working feature. + +## Consequences + +- `availabilityStatus` (`AVAILABLE`/`LOW_STOCK`/`OUT_OF_STOCK`/`PRE_ORDER`/`BACKORDER`/ + `DISCONTINUED`/`UNKNOWN`) is derived from the quantities plus an optional manual override + (`manualStatus`) for states that aren't inferable from stock numbers alone (`PRE_ORDER`, + `BACKORDER`, `DISCONTINUED`). +- A future Sharing/Connections module must add the actual partner-relationship check before + `visibility`/`quantityDisplayMode` do anything real. diff --git a/docs/architecture/adr/adr-010-sharing-scope-model.md b/docs/architecture/adr/adr-010-sharing-scope-model.md new file mode 100644 index 0000000000..ed321607a9 --- /dev/null +++ b/docs/architecture/adr/adr-010-sharing-scope-model.md @@ -0,0 +1,49 @@ +--- +title: "ADR-010: Sharing Scope Model" +sidebar_label: "ADR-010" +sidebar_position: 10 +--- + +**Status:** Accepted for MVP +**Date:** 2026-08-16 + +## Context + +Deel 14 §10 lists "Scope types" as a single enum: `PRODUCT, PRODUCT_CATEGORY, +PRODUCT_COLLECTION, PRODUCT_FAMILY, ORGANIZATION, CONTENT, DPP, INVENTORY, ORDERING`. This +conflates two different dimensions: **what is being shared** (a specific product, a category +of products, "everything") and **what kind of data about it** (product data, content/documents, +DPP, inventory, ordering capability). As written it's not a single coherent enum. + +`PRODUCT_COLLECTION` and `PRODUCT_FAMILY` also refer to entities that don't exist in this +schema (no `Collection` or `ProductFamily` model was built — `Product` + `ProductVariant` +covers what Deel 22/26 call a product family in this build). + +## Decision + +Split into two orthogonal fields on `SharingGrant`: + +- `targetType`: `PRODUCT | PRODUCT_CATEGORY | ALL_PRODUCTS` (what is being shared — a single + product via `targetId`, every product in a category via `targetId`, or the owner's entire + product catalogue). `PRODUCT_COLLECTION`/`PRODUCT_FAMILY` are omitted — no such entities + exist yet; add them here when/if those models are built. +- `dataCategories`: `String[]`, subset of `PRODUCT_DATA | CONTENT | DPP | INVENTORY | + ORDERING` (what kind of data is included for the target). + +A grant is attached to a `Connection` (Deel 15 §2's diagram: Connection is the umbrella +relationship, Sharing Scope determines what's accessible within it) — `SharingGrant` requires +an `ACTIVE` `Connection` between the owner and grantee organizations. + +**Not implemented:** rule-based/dynamic scoping (Deel 14 §12-13, e.g. "share everything in +category X with status=published, tagged region=EU"). Only explicit target selection +(`PRODUCT`/`PRODUCT_CATEGORY`/`ALL_PRODUCTS`) is built. A rule engine is a follow-up — see +README roadmap. + +## Consequences + +- `SharingService.hasAccess(ownerOrgId, viewerOrgId, dataCategory, product)` is the single + enforcement point used by every cross-organization read endpoint (products, inventory, + documents). No controller checks sharing grants directly. +- This finally makes `InventoryRecord.visibility = PARTNER_ONLY` (ADR-009) mean something: a + "partner" is now precisely "an organization with an ACTIVE Connection and an ACTIVE + SharingGrant covering `INVENTORY` for this product." diff --git a/docs/architecture/adr/adr-011-ordering-mvp-simplifications.md b/docs/architecture/adr/adr-011-ordering-mvp-simplifications.md new file mode 100644 index 0000000000..9ab5ce5c2d --- /dev/null +++ b/docs/architecture/adr/adr-011-ordering-mvp-simplifications.md @@ -0,0 +1,63 @@ +--- +title: "ADR-011: Ordering & Commerce MVP Simplifications" +sidebar_label: "ADR-011" +sidebar_position: 11 +--- + +**Status:** Accepted for MVP +**Date:** 2026-08-16 + +## Context + +Deel 17 describes a full B2B commerce layer: Offers, multi-seller Master Orders decomposed +into per-seller `OrderGroup` fulfilment groups, a long lifecycle per group (`DRAFT -> +SUBMITTED -> PENDING_ACCEPTANCE -> ACCEPTED -> PROCESSING -> FULFILLED -> COMPLETED`, plus +`REJECTED`/`CANCELLED`/`EXPIRED`/`PARTIALLY_FULFILLED`), seller-side checks against stock, +credit limits, contracts and MOQ (§14), and payment is explicitly noted elsewhere in the +Constitution as a possible future addition, not required now. + +## Decision + +Implement the structural model faithfully (`Offer`, `Order` as the master record, `OrderGroup` +per seller, `OrderLine` per offer within a group) but with these MVP simplifications, each +flagged rather than silently assumed: + +1. **No payments.** No payment/invoicing entity or integration exists. An order reaching + `COMPLETED` says nothing about whether or how it was paid. +2. **No seller-side business-rule validation.** Accepting an `OrderGroup` does not check + inventory availability, credit limits, or contract terms against the `Offer`/ + `InventoryRecord` — that's a manual seller decision via the accept/reject endpoint. Wiring + automatic stock/credit checks is a follow-up. +3. **Master `Order.status` is a simplified rollup**, not itself authoritative: `DRAFT` until + submitted, `SUBMITTED` once submitted, then `OPEN` while any `OrderGroup` is not in a + terminal state, `COMPLETED` once every group is `COMPLETED`/`REJECTED`/`CANCELLED`, and + `PARTIALLY_FULFILLED` if groups ended in a mix of `COMPLETED` and + `REJECTED`/`CANCELLED`/`PARTIALLY_FULFILLED`. The `OrderGroup.status` per seller is the + real, authoritative lifecycle (Deel 17 §8-10 — fulfilment responsibility is per seller). +4. **`unitPrice` and `currency` are snapshotted onto `OrderLine`** at order-creation time from + the `Offer` — later `Offer` price changes never retroactively change an existing order + (implied by "wat heeft deze klant daadwerkelijk besteld" in Deel 17 §2, but not stated + explicitly; a reasonable commerce-domain default). + +## Consequences + +- This is enough to place, split by seller, accept/reject, and progress an order end to end, + but is **not** a production commerce engine — no payment, no automatic stock reservation on + order acceptance (a follow-up would tie `OrderGroup` acceptance into + `InventoryRecord.reserved`, which is not wired up in this pass), no credit/contract checks. + +**Amendment (2026-08-19, product owner decision — asked directly via AskUserQuestion):** +per-buyer MOQ is done (ADR-021) and closes one part of §14's checks. For the remaining two +(credit limits, contract-term enforcement), three concrete options were put to the user, +grounded in the actual schema: (a) build both on top of "outstanding order value" as a stand-in +for real credit exposure (a new `SellerBuyerCreditLimit` model mirroring `OfferBuyerMinimum`, +plus one enforceable field on `Offer.conditions`); (b) build credit limits only; (c) explicitly +defer both until the payments decision (already tracked in `BACKLOG.md`'s "Explicitly NOT +queued" section) is made, since a "credit limit" without any real payment/invoice ledger can +only ever be a proxy metric (unpaid vs. paid orders look identical today — `Order.status` +reaching `COMPLETED` says nothing about payment, per point 1 above), and "contract term +enforcement" has no defined shape to enforce beyond the one field either option would invent +ad hoc. The user chose (c): both remain explicitly deferred, not built, until a real +payments/invoicing layer exists to hang "credit" and "contract terms" on. Building a proxy +metric now would mean re-deriving it later once real payment data exists, rather than deriving +it once, correctly, against the real thing. diff --git a/docs/architecture/adr/adr-012-search-postgres-fts.md b/docs/architecture/adr/adr-012-search-postgres-fts.md new file mode 100644 index 0000000000..0fe1648050 --- /dev/null +++ b/docs/architecture/adr/adr-012-search-postgres-fts.md @@ -0,0 +1,68 @@ +--- +title: "ADR-012: Search Uses PostgreSQL Full-Text Search for MVP" +sidebar_label: "ADR-012" +sidebar_position: 12 +--- + +**Status:** Accepted for MVP; revisit when scale/query complexity requires it +**Date:** 2026-08-16 + +## Context + +Deel 19 describes a full CQRS-style discovery layer: core DB as source of truth, an event/ +change-log feeding a dedicated Search Index (Elasticsearch/OpenSearch/Solr) and a Graph, +behind a separate eventually-consistent Discovery API. Constitution §29 explicitly permits +starting with PostgreSQL and adding a dedicated search engine only when the use case requires +it (§38 — no premature complexity/optimization). + +## Decision + +For this build pass, product search is implemented as a **synchronous PostgreSQL full-text +search** directly against the `products` table (a generated `tsvector` column over name + +description, combined with `ILIKE`/exact filters for category, status, attributes) — no +separate index, no change-log/event pipeline, no eventual consistency, no Elasticsearch/ +OpenSearch dependency. + +The **OSPI Code Resolver** (`OSPI Code -> Product -> Manufacturer -> ...`, Deel 19 §1) is +implemented as a straightforward endpoint that reuses `IdentityService.lookupCode` plus +eager-loaded relations — not a separate "Graph" system. + +"Related products" (a tiny slice of what Deel 19 calls the OSPI Graph) is implemented as a +simple query — other products sharing the same classification node or category — not a graph +database or recommendation engine. + +## Consequences + +- Search is only as fast/relevant as PostgreSQL FTS allows. This is expected to need + replacing with a dedicated engine once catalogue size or query complexity (geo search, + faceting, "compatible with product Y" relationship queries from Deel 19 §3) exceeds what FTS + handles well — the README roadmap flags this explicitly so it isn't mistaken for "search is + done." +- Because search reads directly from the transactional tables, there is no eventual-consistency + lag (a change is searchable immediately) — this is *stricter* than the target architecture, + not equivalent to it; don't assume the eventual-consistency behavior described in Deel 19 §6-7 + once a real index is introduced later. + +## Amendment (2026-08-17): bounded network-wide search + +Product owner priority pick, among four follow-ups selected together with ADR-017 (document +storage), ADR-018 (RBAC), and ADR-019 (bulk endpoints). `GET /search/products` previously only +ever searched the caller's own organization; the original ADR text above flagged network-wide +search as unimplemented because a full `SharingGrant` intersection per candidate row is +expensive without a real index. + +`?scope=network` now exists as a deliberately **bounded** version of that: `SearchService` +additionally includes products from any organization that granted the caller an ACTIVE, +unexpired `PRODUCT_DATA` sharing grant (ADR-010) with `targetType` `ALL_PRODUCTS` or +`PRODUCT_CATEGORY`. It resolves those grants with two ordinary (non-raw) Prisma queries first, +then folds the resulting organization/category set into the existing raw-SQL query as a bounded +`IN (...)` / row-constructor `IN (...)` condition — cheap, because the grant lookup is itself +indexed and small (a caller has at most a handful of active grants), not because full-text +search itself got any faster. + +**Individual `PRODUCT`-targeted grants are deliberately excluded** from `scope=network` — folding +potentially thousands of single-product grants into this query would mean an unbounded `OR +productId = ...` list per search, which is exactly the per-candidate-grant cost this ADR +originally flagged as too expensive without a real index. Those grants remain reachable via the +existing Partner endpoints (`sharing/partner.controller.ts`) and `resolveCode`, just not via this +general listing query. `?scope=own` (still the default) is unaffected. diff --git a/docs/architecture/adr/adr-013-dpp-public-access-token.md b/docs/architecture/adr/adr-013-dpp-public-access-token.md new file mode 100644 index 0000000000..58a4234357 --- /dev/null +++ b/docs/architecture/adr/adr-013-dpp-public-access-token.md @@ -0,0 +1,57 @@ +--- +title: "ADR-013: DPP Public Access Uses a Dedicated High-Entropy Token, Not the Checksum" +sidebar_label: "ADR-013" +sidebar_position: 13 +--- + +**Status:** Accepted — explicitly ratified by product owner (2026-08-17): the 256-bit token + rotation approach is sufficient as-is; no additional layer (temporary/expiring tokens, IP/geolocation restriction) requested. +**Date:** 2026-08-17 +**Raised by:** product owner — a published DPP page must not be reachable by guessing/enumeration, +without requiring a password (Deel 12's "scan a QR code" use case has no login step). + +## Context + +`GET /dpp/:id` (added when the DPP scaffold was built) exposes a PUBLISHED `DppRecord` +without authentication. It was originally keyed by the record's own database ID (a random +UUID). The product owner correctly flagged that the OSPI code checksum (ADR-004) must not be +repurposed as the access barrier here: the checksum is only 3 characters — 32,768 possible +values — and is explicitly documented (Deel 4 §25, and ADR-004 itself) as an error-detection +mechanism, not a security mechanism. An attacker could enumerate every checksum value against +a known code body in well under a second. Weakening the checksum's design to also serve as an +access barrier would make it both a worse checksum and a worse access barrier. + +Using the database primary key (a v4 UUID, ~122 bits of entropy) as the sole public identifier +was already reasonably resistant to brute-force guessing, but it conflates two different +things: an internal row identifier, and a "possession of this link grants access" capability. +That conflation makes it impossible to revoke a leaked link without deleting the underlying +record, and ties a security property to a value (the primary key) that was never designed to +carry one. + +## Decision + +Every `DppRecord` gets a dedicated `accessToken`: 256 bits of randomness +(`crypto.randomBytes(32)`, base64url-encoded — same generation pattern already used for M2M +API keys in `AuthService.createApiClient`), generated at record creation and stored in a +unique, indexed column, **separate from both the database `id` and the OSPI code**. + +- The public endpoint moves from `GET /dpp/:id` to `GET /dpp/:accessToken` — the database `id` + is never exposed in the public/QR-code URL at all. +- The token is the sole credential: no password, no login, matching the "scan and view" DPP + use case. Its entropy (2^256 possibilities) makes online enumeration infeasible regardless + of rate limiting, though rate limiting remains recommended defense-in-depth (still not + implemented anywhere in this build — see README known limitations). +- A dedicated owner-only endpoint, `POST /dpp-records/:id/rotate-token`, regenerates the + token. This immediately invalidates every previously-issued QR code/link for that record — + the intended response to a suspected leak, without deleting the DPP record or its history. +- Only `PUBLISHED` records are reachable this way at all (unchanged from the original design) + — `DRAFT`/`VALIDATING`/`VALID`/`SUSPENDED` records return 404 regardless of token. + +## Consequences + +- The checksum (ADR-004) is untouched and keeps its original, narrower job. +- Owners must distribute the *token-bearing* URL (returned on record creation and on + rotation), not a URL built from the record's `id`. This is a breaking change to the DPP + controller's route shape — acceptable since nothing has been deployed yet. +- A future rate-limiting layer (already flagged generally in the README) should still cover + this endpoint, as defense-in-depth against token-guessing is cheap insurance even though the + entropy alone makes it impractical today. diff --git a/docs/architecture/adr/adr-014-code-resolution-visibility.md b/docs/architecture/adr/adr-014-code-resolution-visibility.md new file mode 100644 index 0000000000..e4dfba96ae --- /dev/null +++ b/docs/architecture/adr/adr-014-code-resolution-visibility.md @@ -0,0 +1,97 @@ +--- +title: "ADR-014: OSPI Codes Are Identifiers, Not Secrets — Visibility on Code Resolution Follows Document.visibility, Not a Login Wall" +sidebar_label: "ADR-014" +sidebar_position: 14 +--- + +**Status:** Accepted +**Date:** 2026-08-17 +**Raised by:** product owner — questioned whether checksum + serial number together provide +real guessing-resistance, then (correctly) pushed back that the same product data is often +already public on the producer's own website, so an auth wall on `resolve/:code` might be +solving nothing while breaking the spec's no-login "scan a code" use case. + +## Context + +Following ADR-013 (DPP access token), a related but distinct question came up: does the OSPI +code itself — specifically the combination of the checksum (ADR-004) and the serial/batch +segment — provide a meaningful security barrier for `GET /search/resolve/:code` +(structural + existence resolution of a code, Deel 4 §26-27 / Deel 19 §1)? + +**The checksum contributes zero guessing-resistance, even combined with anything else.** It is +CRC-16/CCITT-FALSE, a deterministic, publicly documented, publicly computable function of the +other segments (ADR-004). An attacker does not need to guess the checksum for a candidate code +body — they compute it. "Checksum + serial" therefore has exactly the same guessing-resistance +as the serial alone; the checksum adds nothing to that combination, by design (its job is +transcription-error detection, not access control). + +The real predictability question is `companyProductId` (`CCCCCCCC`) and `serialBatch` +(`EEEEEEEE`). Per Deel 4 §14, `companyProductId` is producer-assigned and explicitly meant to +map onto the producer's own internal numbering — which is very often sequential. `serialBatch` +defaults to a fixed `00000000` placeholder when a producer doesn't use per-unit serialization +(ADR-008). So a determined caller absolutely can enumerate plausible codes for a known producer +code + category. + +The first fix considered was requiring authentication on `resolve/:code`, mirroring +`IdentityController.lookupCode` (which was already behind auth). On reflection, prompted +directly by the product owner, that fix is both too strong and not actually targeted at the +real problem: + +- **Too strong**: Deel 4 §26-27 describes resolving a code as a no-login "scan and see what it + is" action — the same use case ADR-013 already protected for DPP specifically. Slapping a + login wall on general code resolution breaks that for the *entire* endpoint, not just the + sensitive parts of it. +- **Not targeted**: the basic identity fields this endpoint returns (code exists, product name, + category, manufacturer) are frequently *already public* on the producer's own website or + packaging — that's not the data this decision needs to protect. What actually varies in + sensitivity is attached `Document`s, which already carry a producer-set `visibility` + (`PUBLIC` / `RESTRICTED` / `PRIVATE`) — a mechanism that predates this ADR but was, before + this change, not being enforced correctly on this endpoint (`RESTRICTED` documents were + returned to every caller, anonymous or not). + +## Decision + +`GET /search/resolve/:code` stays reachable without authentication (`@OptionalAuth()`, a new +guard mode: validates a token if one is present, but does not require one — see +`src/common/decorators/index.ts` / `src/common/guards/auth.guard.ts`). Basic identity data is +treated as public registry data, comparable to looking up a GS1 GTIN — the producer chose to +register it, and its existence is not meant to be a secret. + +What actually gates exposure is `Document.visibility`, now enforced correctly: + +- `PUBLIC` documents: returned to every caller, anonymous included. +- `RESTRICTED` documents: returned only once `SharingService.hasAccess(ownerOrgId, + callerOrgId, 'CONTENT', product)` (ADR-010) confirms the caller's organization is the owner + or holds an active `CONTENT` sharing grant. Anonymous callers and unrelated organizations + never see these, regardless of how they found the code. +- `PRIVATE` documents: never returned via this endpoint, full stop. + +This makes the producer's own per-document visibility choice the actual access-control +boundary — "as indicated in the docs, the producer decides what's public" — rather than +relying on the code being hard to guess, and rather than an all-or-nothing login wall. + +Enumeration/bulk-scraping risk from predictable `companyProductId`/`serialBatch` values is +real but is explicitly **not** solved by this ADR — see Consequences. It is a rate-limiting / +abuse-detection problem, not a data-classification problem, and neither this endpoint nor any +other in this build has rate limiting yet (README known limitations). + +## Consequences + +- `resolve/:code`'s anonymous behavior is now correct relative to what it already exposed for + every non-`PUBLIC` document before this change (a regression this ADR happens to fix, not + just a proactive hardening). +- The same visibility logic does **not** retroactively apply to `DppRecord.compose()` + (ADR-013), which still returns `PUBLIC` + `RESTRICTED` documents to anyone holding a valid + access token. That's a deliberate difference, not an inconsistency: possession of a DPP + token is itself evidence of a legitimate reason to view that specific passport (it was + handed out once, per record, and is revocable), whereas mere knowledge of an OSPI code is + not — codes are structurally guessable and are not credentials. +- A producer whose `companyProductId` numbering is sequential can still have their catalog's + *basic identity* (name/category/manufacturer, for `PUBLIC`-classified products) enumerated by + someone iterating candidate codes — this ADR does not prevent that, because that data is + treated as intentionally public. If a producer wants their catalog to not be bulk-enumerable + at all, the mitigation is rate limiting on this endpoint (still a README-flagged gap, not yet + built) or non-sequential `companyProductId` assignment — not a login wall on lookups, which + the product owner correctly identified would not have matched the intended use case anyway. +- `SearchModule` now depends on `SharingModule` (previously only `IdentityModule`) to reach + `SharingService.hasAccess`. diff --git a/docs/architecture/adr/adr-015-pricing-vs-serialization.md b/docs/architecture/adr/adr-015-pricing-vs-serialization.md new file mode 100644 index 0000000000..4d5c03e228 --- /dev/null +++ b/docs/architecture/adr/adr-015-pricing-vs-serialization.md @@ -0,0 +1,99 @@ +--- +title: "ADR-015: Pricing/Checkout Resolve at SKU Level, Never at Serial/Batch Level" +sidebar_label: "ADR-015" +sidebar_position: 15 +--- + +**Status:** Accepted +**Date:** 2026-08-17 +**Raised by:** product owner — a checkout/POS system will not always receive the full OSPI code, +since not every serial number is sent to every register; pricing must not depend on it. + +## Context + +The product owner correctly observed that point-of-sale/checkout systems generally do not carry +a product's full, per-unit identity — not every physical unit's serial number is transmitted to +every register — and asked whether the OSPI code needs to change to accommodate this. + +Re-reading the code format against the actual schema surfaced two real problems, only one of +which the code format itself has anything to do with: + +1. **The code format already separates the two concerns**, and didn't need to change. + `AAAA-BBBBBB-CCCCCCCC-DDDD` (Producer-Category-CompanyProductId-Variant) is the SKU-level + identity — what a price is set against. `EEEEEEEE` (Serial/Batch) is a unit-level identity + layered on top, and already defaults to a fixed `00000000` placeholder when unused + (ADR-008). A checkout system that only ever sees the SKU-level segments (or a code with the + serial segment left at its placeholder) was already a valid, spec-compliant scenario. + +2. **The schema, as built, did not actually implement that separation correctly.** + `OspiIdentity` carried `variantCode` and `serialBatch` as fields, but its uniqueness + constraint was `@@unique([producerCodeId, companyProductId])` — no variant, no serial. In + practice this meant **at most one OSPI identity could ever be issued per companyProductId, + full stop**. Issuing a second code for a different variant, let alone one per serialized + unit, would immediately collide on this constraint. `variantCode`/`serialBatch` were fields + in name only. + + Separately, `Offer` (where price lives) referenced only `productId`, with no way to price a + variant differently from its sibling variants — a real gap regardless of serialization, + since different sizes/colors/configurations of the same product routinely have different + prices. + +## Decision + +**SKU-level identity** (what pricing/checkout resolve against) now spans Producer + Category + +CompanyProductId + Variant: + +- `OspiIdentity`'s uniqueness is now `@@unique([producerCodeId, companyProductId, variantCode])` + — one identity per producer + companyProductId + variant, serial/batch deliberately excluded. +- `ProductVariant` gets its own `ospiIdentityId` — a variant carries its own full OSPI code + (its own barcode/label), independent of the parent Product's code. `sku` stays as an + additional internal label alongside the OSPI code, not a substitute for it. + **Amendment (2026-08-17, product owner decision):** originally `ospiIdentityId` was optional + (mint one only if the producer explicitly needed a distinct code for that variant). The + product owner decided every variant should always get its own code — closer to how GS1/GTIN + is used in practice (each size/color = its own barcode), and more consistent with ADR-005's + decision to position OSPI as an independent standard rather than an internal-only feature. + `ProductVariant.ospiIdentityId` is now **required**, not optional; `POST /products/:id/variants` + now requires exactly one of `identity`/`ospiIdentityId` (previously either could be omitted), + mirroring the validation `POST /products` already used for the base product. +- `Offer` gets an optional `variantId` — a price can now target a specific variant instead of + only the base product. `OrderLine` snapshots `variantId` alongside the existing + `sellerOrganizationId` denormalization, for the same reason (known at order time, before any + grouping/fulfillment exists). + +**Unit-level identity** (a specific physical item or batch's real serial number) is explicitly +**not** part of `OspiIdentity`/`Product`/`Offer` at all. A new `SerializedUnit` table holds it: +`{ productId, variantId?, serialBatch, fullCode }`, where `fullCode` is computed once at +registration by substituting the real serial into the parent Product/Variant's other segments +and recomputing the checksum (`ospi-code.util.buildOspiCode`), then stored. Registering the same +serial twice for the same product/variant produces the *identical* `fullCode` and collides on +its `@unique` constraint — that, not a compound key over a nullable `variantId` (which Postgres +would treat as always-distinct on `NULL`), is what actually prevents duplicates. + +This means: pricing, catalog search, and checkout all key off `Product`/`ProductVariant`, and +never need a serial number to function — matching the product owner's requirement directly. +`SerializedUnit` exists purely for traceability, warranty, recalls, and per-item DPP linkage, +where a specific physical item's identity does matter. + +## Consequences + +- Existing `POST /products` / `POST /ospi-identities` behavior for products without variants is + unchanged — this only adds capability, it doesn't require every product to define variants or + register serialized units. +- `POST /products/:id/variants` now optionally accepts the same `identity`/`ospiIdentityId` + shape `POST /products` already accepted, to mint a variant's own code. +- `POST /offers` now optionally accepts `variantId`. +- New endpoints: `POST /products/:id/serialized-units` (register a unit's real serial), + `GET /products/:id/serialized-units` (list). Both require authentication and ownership of the + product — there is deliberately no public lookup-by-serial endpoint in this build. If one is + ever added, it should follow ADR-014's pattern (`@OptionalAuth()` + `Document.visibility`-style + gating), not reuse the serial's guessability as a security property, for the same reasons + ADR-013/014 already established for DPP/catalog resolution. +- `SerializedUnit` is a new RLS-protected, owner-organization-only table (`prisma/sql/rls.sql`) + — no cross-org visibility rule exists for it yet; add one via the Sharing model (ADR-010) if a + future use case needs a partner to see another org's serialized units (e.g. drop-shipping). +- This is a breaking schema change relative to the pre-ADR-015 build (nothing has been deployed + yet, so no migration-compatibility concern) — `OspiIdentity`'s uniqueness constraint changing + shape means any already-issued identities that happened to collide on the old, broader + constraint would need re-evaluation, though none exist yet in this sandbox (no database was + ever reachable to issue any). diff --git a/docs/architecture/adr/adr-016-rate-limiting.md b/docs/architecture/adr/adr-016-rate-limiting.md new file mode 100644 index 0000000000..3608e59f94 --- /dev/null +++ b/docs/architecture/adr/adr-016-rate-limiting.md @@ -0,0 +1,63 @@ +--- +title: "ADR-016: In-Memory, Opt-In Rate Limiting on Unauthenticated Endpoints" +sidebar_label: "ADR-016" +sidebar_position: 16 +--- + +**Status:** Accepted — explicitly ratified by product owner (2026-08-17): a single-process, non-distributed limiter is acceptable for first launch; upgrading to a Redis-backed distributed limiter is deferred until it's actually needed, not a launch blocker. +**Date:** 2026-08-17 + +## Context + +ADR-013 (DPP public access token), ADR-014 (code resolution visibility), and ADR-015 +(serialized units) each flagged the same follow-up: no rate limiting exists anywhere in this +build, and several endpoints are reachable without authentication (`GET /dpp/:accessToken`, +`GET /search/resolve/:code`) or without it being required (`POST /auth/login`, +`POST /auth/register`, `POST /auth/refresh`). Entropy alone (DPP's 256-bit token) or a +producer's own visibility choice (`resolve/:code`'s `Document.visibility` enforcement) reduces +what an attacker gains from guessing, but neither stops someone from simply making a very large +number of requests — that has always needed a request-rate control, not an access-control one. + +The normal production answer (`@nestjs/throttler` backed by Redis, or an edge/CDN-level +limiter) isn't buildable in this sandbox: there is no network access to install new npm +packages, and Redis itself isn't provisioned (ADR-001 already deferred Redis/BullMQ until the +first async job needed it). Waiting for that infrastructure before shipping any rate limiting +at all would leave the endpoints above with zero request-rate protection indefinitely. + +## Decision + +A small, dependency-free `RateLimitGuard` (`src/common/guards/rate-limit.guard.ts`), registered +as a fourth global guard alongside `AuthGuard`/`PermissionsGuard`. It is **opt-in**: a route is +only limited if annotated with `@RateLimit({ points, windowSeconds })`; every other route is an +unaffected pass-through. Applied to: + +- `POST /auth/register` (10/min), `POST /auth/login` (10/min), `POST /auth/refresh` (20/min) — + classic brute-force/abuse targets, `@Public()` by necessity. +- `GET /search/resolve/:code` (30/min) — the endpoint ADR-014 explicitly reasoned should stay + reachable without login, with rate limiting as the actual mitigation against + `companyProductId` enumeration (not the login wall ADR-014 deliberately avoided). +- `GET /dpp/:accessToken` (60/min, higher allowance) — token entropy is already the primary + defense (ADR-013); this is defense-in-depth, not the main control, hence the looser limit. + +Enforcement is a fixed-window counter, keyed by organization for authenticated callers +(`request.principal.organizationId`, so one shared office IP doesn't throttle an entire +authenticated org) and by IP for unauthenticated callers (`x-forwarded-for` first hop, falling +back to the socket address) — which is the case that actually matters for the endpoints above, +since none of them require a principal to be reachable at all. + +## Consequences + +- **Explicitly not distributed.** Each API process holds its own in-memory counters. With N + processes behind a load balancer, the effective per-caller limit is `points * N`, not + `points`. This is a real, stated limitation — acceptable for a single-process MVP deployment + or as defense-in-depth behind an edge/CDN limiter, but **must be replaced with a Redis-backed + limiter before this build runs as more than one process in production.** +- `x-forwarded-for` is trusted as given — this build has no reverse-proxy configuration that + strips/normalizes it, so a client could in principle spoof it to evade IP-based limiting when + not sitting behind a proxy that overwrites the header. A production deployment must ensure + only the actual edge proxy can set this header. +- Memory is bounded opportunistically (a sweep of expired entries triggers once the tracked-key + count crosses 50,000) rather than via a scheduled job — acceptable at MVP scale, worth + revisiting if this becomes a high-traffic public surface. +- `429 Too Many Requests` responses use this build's standard error envelope (`{ error: { code: + 'RATE_LIMITED', message } }`), consistent with `GlobalExceptionFilter`. diff --git a/docs/architecture/adr/adr-017-document-storage-abstraction.md b/docs/architecture/adr/adr-017-document-storage-abstraction.md new file mode 100644 index 0000000000..8c5b791dc2 --- /dev/null +++ b/docs/architecture/adr/adr-017-document-storage-abstraction.md @@ -0,0 +1,68 @@ +--- +title: "ADR-017: Object Storage via a Swappable Interface, Local-Disk Implementation for Now" +sidebar_label: "ADR-017" +sidebar_position: 17 +--- + +**Status:** Accepted +**Date:** 2026-08-17 +**Raised by:** product owner priority pick, among four follow-ups selected together with ADR-018 (RBAC), ADR-019 (bulk endpoints), and the network-wide search extension of ADR-012. + +## Context + +Before this, `Document.storageRef` was a caller-supplied opaque string with nothing behind it — +there was no `POST /documents/upload`, only `POST /documents` registering *metadata* the caller +promised pointed at a file stored somewhere else. A real S3/GCS/Azure Blob integration is the +obvious real answer, but this build environment has no cloud credentials and no network access +to install a cloud SDK or verify it against a real bucket — the same constraint documented +throughout this session (see README "Known limitations"). + +## Decision + +`DocumentStorageService` (`src/documents/storage/document-storage.interface.ts`) is the seam: +`upload(...)`, `getDownloadUrl(...)`, `delete(...)`. `DocumentsService` and every controller are +written against this interface, not a concrete implementation. + +`LocalDocumentStorageService` is the current binding (`DocumentsModule`'s `DOCUMENT_STORAGE` +provider) — a **real, working implementation**, not a stub: it actually writes bytes to disk +(`DOCUMENT_STORAGE_DIR`, default `./storage/documents`) and reads them back. It is not a fake +that returns made-up URLs. What it is not: cloud-backed, distributed across multiple app +instances, or backed by anything with built-in redundancy — it's exactly as durable as the +single machine's disk it runs on. + +- `POST /documents/upload` accepts `{ name, filename, mimeType, contentBase64, productId?, + visibility? }`, decodes and stores the content, then creates the `Document` metadata row in + one call — collapsing the previous two-step "upload elsewhere, then register" flow. +- Content travels as base64 in a JSON body, not `multipart/form-data`. A real multipart path + (via `@nestjs/platform-express`'s `FileInterceptor`) needs the `multer` package, which isn't + in `package.json` and can't be installed here (no network access) — using it without + installing it would mean shipping code that references a dependency nobody has verified + resolves. Base64-in-JSON needed zero new dependencies (built-in `Buffer`/`fs` only) and is a + real, working upload path today. A capped size (20MB, `MAX_UPLOAD_BYTES` in + `documents.service.ts`) keeps this reasonable for spec sheets/certificates/images; large media + should get a real multipart/streaming path before this is used for anything bigger. +- `GET /documents/:id/download-url` resolves a document to a fetchable reference. Today that's + a local filesystem path (no web server exposes the storage directory as an HTTP path in this + build) — a real deployment replaces this with either a static-file route or a signed, + time-limited URL, which is exactly what `getDownloadUrl` on a real cloud implementation would + return natively without changing its call sites. +- `storageRef` format is `local://` — always a freshly generated UUID on disk, never + the caller-supplied filename, so a crafted filename can't path-traverse out of the storage + directory. Verified directly (not just by inspection): a standalone script wrote a file, + round-tripped its exact byte content back, confirmed a `local://../../etc/passwd`-style + reference is rejected, and confirmed delete actually removes the file. + +## Consequences + +- Swapping in a real cloud backend later is one new class implementing `DocumentStorageService` + plus changing the `DOCUMENT_STORAGE` provider binding in `DocumentsModule` — `DocumentsService` + and every controller stay untouched. +- **Not production-durable as-is.** Local disk means: no redundancy, doesn't survive the + container/VM being replaced, and doesn't work correctly with more than one API process unless + they share a filesystem (e.g. a mounted volume) — the same "not distributed" caveat ADR-016's + rate limiter already carries, for the same underlying reason (no infrastructure available to + install/verify a distributed alternative here). +- `storage/` is gitignored — uploaded file bytes should not end up in the repository. +- `MAX_UPLOAD_BYTES` (20MB) and base64-in-JSON are an MVP-scale choice, not a permanent one; a + multipart/streaming path is the right follow-up once `multer` (or an equivalent) can actually + be installed and tested. diff --git a/docs/architecture/adr/adr-018-fine-grained-rbac.md b/docs/architecture/adr/adr-018-fine-grained-rbac.md new file mode 100644 index 0000000000..0829567303 --- /dev/null +++ b/docs/architecture/adr/adr-018-fine-grained-rbac.md @@ -0,0 +1,57 @@ +--- +title: "ADR-018: Role Management Layer on the Existing RBAC Schema" +sidebar_label: "ADR-018" +sidebar_position: 18 +--- + +**Status:** Accepted +**Date:** 2026-08-17 +**Raised by:** product owner priority pick, among four follow-ups selected together with ADR-017 (document storage), ADR-019 (bulk endpoints), and the network-wide search extension of ADR-012. + +## Context + +The `Role`/`UserRole` schema (flat `permissions: string[]` per role, many-to-many to `User`) has +supported custom, org-scoped roles since the original build — but nothing ever *used* that +flexibility. `AuthService.register` created exactly one role, ever: an Owner role with +`permissions: ['*']`, and no endpoint existed to create another role, list roles, or assign/ +revoke one from a user. Every organization's first (and only) user had unconditional access to +everything, with no way to add a second user with narrower access. + +## Decision + +A management layer on top of the unchanged schema and unchanged `PermissionsGuard` enforcement +(still a flat string-list membership check; `'*'` still means everything): + +- `src/auth/permissions.ts` — a canonical `PERMISSIONS` catalogue, generated by auditing every + `@RequirePermissions(...)` call actually enforced in the codebase (`producers:write`, + `products:write`, `orders:write`, `offers:write`, `connections:write`, `inventory:write`, + `org:manage`, `dpp:manage`, `documents:write`, `attributes:write`, `classification:manage`, + `sharing:write`, plus the new `roles:manage` this ADR introduces). `CreateRoleDto` validates + against this list (`@IsIn(PERMISSIONS, { each: true })`) — a custom role can't be created with + a permission string that doesn't actually gate anything, which would otherwise silently look + like it grants access it doesn't. +- `POST /roles` (requires `roles:manage`) — create a custom role scoped to the caller's org. +- `GET /roles` — list roles visible to the caller (system roles with `organizationId: null`, + none seeded yet, plus the caller's own org's roles). +- `POST /users/:userId/roles` / `DELETE /users/:userId/roles/:roleId` (both require + `roles:manage`) — assign/revoke a role for a user in the caller's org. +- `GET /users/:userId/roles` — list a user's current roles. +- Revoking a user's **last** role is rejected (`LAST_ROLE`) — leaving a user with zero roles + would leave them unable to pass any `@RequirePermissions(...)` check at all, effectively + locking them out silently rather than through an explicit, visible action (e.g. suspending the + user via the existing `UserStatus` field). + +## Consequences + +- This is additive to the existing model, not a redesign — `AuthService.register`'s Owner-role + seeding is unchanged, so every organization still starts with one fully-privileged user, and + nothing about existing token validation/permission checking changed. +- This is still the flat "permissions[] on Role" model, not the fuller resource/action/scope + matrix Deel 21 describes (e.g. permissions scoped to a specific product category, or + conditional on ownership). That remains a further follow-up if a real use case needs it — + this ADR closes the "there's no way to create a second, narrower role at all" gap, not the + entire RBAC design space. +- `roles:manage` itself is only held by the wildcard `'*'` Owner role today, since no other role + exists yet in a fresh organization — an org's first admin action to actually use this feature + is creating a role and assigning it, which was already true of every other permission before + this ADR. diff --git a/docs/architecture/adr/adr-019-synchronous-bulk-endpoints.md b/docs/architecture/adr/adr-019-synchronous-bulk-endpoints.md new file mode 100644 index 0000000000..2d2e21b442 --- /dev/null +++ b/docs/architecture/adr/adr-019-synchronous-bulk-endpoints.md @@ -0,0 +1,54 @@ +--- +title: "ADR-019: Synchronous, Bounded Bulk Endpoints — Not a Job Queue" +sidebar_label: "ADR-019" +sidebar_position: 19 +--- + +**Status:** Accepted +**Date:** 2026-08-17 +**Raised by:** product owner priority pick, among four follow-ups selected together with ADR-017 (document storage), ADR-018 (RBAC), and the network-wide search extension of ADR-012. + +## Context + +Every product/identity/serialized-unit creation endpoint in this build was one-at-a-time. A +producer onboarding an existing catalog, or registering a batch of serial numbers, would need +one HTTP round-trip per row — real friction at any real catalog size. The correct long-term +answer is an async job queue (BullMQ + Redis, already anticipated as deferred infrastructure by +ADR-001), but Redis isn't provisioned in this build and there's no network access to install +BullMQ or verify a queue actually processes jobs — the same recurring constraint as ADR-016's +rate limiter and ADR-017's document storage. + +## Decision + +Two new endpoints, both synchronous (the request doesn't return until every item in the batch +has been attempted) and both bounded: + +- `POST /products/bulk` (`BulkCreateProductDto`, max 500 items/call) — loops + `ProductsService.create` per item. +- `POST /products/:id/serialized-units/bulk` (`BulkRegisterSerializedUnitDto`, max 1000 + items/call) — loops `SerializedUnitsService.register` per item. + +Both use a **partial-success model**: each item gets its own `{ success, ... }` outcome in the +response (`{ total, succeeded, failed, results: [...] }`) rather than the whole batch aborting +on the first bad row. A 500-row import failing entirely because row #499 had a typo'd category +code would be a materially worse experience than a per-row report the caller can act on — +this mirrors how a CSV import tool typically reports results, not how a single atomic +transaction behaves. + +## Consequences + +- **Not a queue.** The caller's HTTP connection stays open for the whole batch — for 500 + sequential `Product` creations (each itself doing an `OspiIdentity` insert + + `Product` insert + audit log write), this could be a multi-second request. There is no + progress reporting, no resumability if the connection drops mid-batch (already-created items + stay created; the caller would need to retry only the failed indices from the response), and + no true concurrency — items are processed one at a time, in order, deliberately, since + concurrent writes to the same producer's `ProducerCode`/`companyProductId` uniqueness space + could otherwise race in confusing ways. +- The 500/1000 item caps exist specifically because this is synchronous — they are not + arbitrary, they're sized to keep a single request's duration bounded. Real bulk import + (10,000+ row catalogs, which the Constitution's target scale absolutely implies) still needs + the async job queue this ADR does not build. +- Each bulk item reuses the exact same validation/authorization path as its single-item + endpoint (`ProductsService.create`, `SerializedUnitsService.register`) — there is no separate, + possibly-inconsistent bulk-specific validation logic to keep in sync. diff --git a/docs/architecture/adr/adr-020-category-registry-governance.md b/docs/architecture/adr/adr-020-category-registry-governance.md new file mode 100644 index 0000000000..812b2d6008 --- /dev/null +++ b/docs/architecture/adr/adr-020-category-registry-governance.md @@ -0,0 +1,83 @@ +--- +title: "ADR-020: Category Registry Governance — Proposal & Approval" +sidebar_label: "ADR-020" +sidebar_position: 20 +--- + +**Status:** Accepted +**Date:** 2026-08-17 +**Raised by:** user decision (asked directly via AskUserQuestion; option chosen: "Voorstel & goedkeuring" / proposal & approval), backlog item 1. + +## Context + +`Category` has always supported `organizationId: null` as a "global/shared" category alongside +normal org-scoped ones (see `prisma/sql/rls.sql`'s long-standing comment on the categories +policy), but nothing ever created one — `ProductsService.createCategory` always wrote the +caller's own `organizationId`. Deel 11 (Classification, Taxonomy & Attribute Engine) describes a +shared category registry as part of the platform's value proposition — buyers and sellers on +different tenants should be able to converge on the same categories rather than each maintaining +a private, incompatible taxonomy. The open question was governance: who is allowed to add to the +*shared* registry, and does it require review. + +Three options were put to the user directly: (a) first-write-wins, anyone can propose a global +category and it's live immediately; (b) proposal & approval, a global category starts pending and +needs a reviewer to approve it; (c) platform-managed only, no tenant can ever add to the shared +registry at all. The user chose (b). + +## Decision + +- New `CategoryStatus` enum: `PENDING`, `APPROVED`, `REJECTED`. +- Org-scoped categories (`organizationId` set) are **unchanged**: always private to that org, + always auto-`APPROVED`, no review step. This ADR only touches the `organizationId: null` case. +- `CreateCategoryDto` gains an optional `scope: 'organization' | 'global'` (defaults to + `'organization'`). Requesting `'global'` creates a row with `organizationId: null`, + `status: PENDING`, `proposedByOrganizationId` set to the caller's org. +- A new permission, `categories:govern`, gates three new endpoints: `GET /categories/pending`, + `POST /categories/:id/approve`, `POST /categories/:id/reject` (with a required + `rejectionReason` on reject). +- `listCategories()` (the normal, unauthenticated-by-permission listing every product-creation + flow uses) excludes other organizations' non-`APPROVED` global proposals — a pending or + rejected global category is invisible outside `GET /categories/pending` until a reviewer acts. +- `ProductsService.create()`'s `categoryId` validation rejects any category that isn't + `APPROVED` with `CATEGORY_NOT_APPROVED` — a product can never reference a still-pending or + rejected global category, closing the obvious race (propose a category, immediately tag a + product with it before anyone reviews it). + +## Consequences + +- **Amendment (2026-08-19, product owner decision — asked directly via AskUserQuestion, + option chosen: "Echt platform-tenant-concept bouwen" / build a real platform-tenant concept):** + the risk below is now closed, not just documented. `PlatformOperatorGuard` + (`src/common/guards/platform-operator.guard.ts`) is a second, independent check stacked on top + of `@RequirePermissions('categories:govern')` via a new `@RequirePlatformOperator()` decorator + on all three governance routes (`GET /categories/pending`, `POST /categories/:id/approve`, + `POST /categories/:id/reject`): holding the `categories:govern` permission string is no longer + sufficient on its own, the caller's **organization** must also match `PLATFORM_OPERATOR_ORG_ID`. + This is deliberately an environment-variable/deployment setting, not a database flag on + `Organization` with an API write path — any endpoint that could flip "is the platform operator" + on an org would itself be a self-service privilege-escalation hole (the exact class of bug + found and fixed the previous day in `POST /auth/api-clients`, see README). The guard fails + closed: an unset/empty `PLATFORM_OPERATOR_ORG_ID` denies every organization rather than + silently defaulting to "everyone" or "no one checks." Verified end-to-end over real HTTP: with + no env var set, even an org's own `'*'`-holding Owner gets `403 NOT_PLATFORM_OPERATOR`; with + the env var set to org A, org A can list/approve/reject global proposals while org B (including + attempting to approve its *own* proposal) correctly still gets `403`. +- The original risk, for context: every `User` belongs to exactly one `Organization`, and + `PermissionsGuard` checks a flat permission-string membership — it is not itself org-scoped + (only application code that reads `principal.organizationId` enforces tenant boundaries). That + meant `categories:govern` was, by construction, a **cross-org-by-permission** capability: + whichever organization's role held it could approve or reject *any* organization's global + proposals, because a global proposal has no owning org to scope against. Now closed by + `PlatformOperatorGuard` above. +- The pre-existing `@@unique([organizationId, code])` does not prevent two different global + (`organizationId = NULL`) proposals from colliding on the same `code`, because Postgres treats + each `NULL` as distinct for uniqueness purposes — the same class of gap ADR-015 hit with + `SerializedUnit`. Fixed here with a partial unique index + (`prisma/sql/category-registry-constraints.sql`, `WHERE "organizationId" IS NULL`) applied + manually alongside migrations, per the existing `rls.sql` convention. Verified live + (2026-08-19) against a real Postgres instance: two `INSERT`s of global (`organizationId NULL`) + categories sharing the same `code` correctly hit `duplicate key value violates unique + constraint "categories_global_code_unique"`. +- Rejected global proposals are kept (not deleted), with `reviewedByUserId`, `reviewedAt`, and + `rejectionReason` recorded, so the proposing org can see why and a re-proposal under a + different code is auditable against the earlier attempt. diff --git a/docs/architecture/adr/adr-021-per-buyer-offer-minimum.md b/docs/architecture/adr/adr-021-per-buyer-offer-minimum.md new file mode 100644 index 0000000000..4258e7d1ef --- /dev/null +++ b/docs/architecture/adr/adr-021-per-buyer-offer-minimum.md @@ -0,0 +1,50 @@ +--- +title: "ADR-021: Per-Buyer Minimum Order Quantity Override" +sidebar_label: "ADR-021" +sidebar_position: 21 +--- + +**Status:** Accepted +**Date:** 2026-08-17 +**Raised by:** user decision (asked directly via AskUserQuestion; option chosen: "Uitgebreide MOQ per koper" / extended MOQ per buyer), backlog item 4. + +## Context + +`Offer.minimumQuantity` is a single value applying to every buyer of that offer. Deel 17 +(Ordering & Commerce API) and real B2B practice both call for sellers to negotiate different +minimums per buyer relationship (a long-standing distributor gets a lower MOQ than a new, +unverified buyer) without maintaining a second, near-duplicate `Offer` row per relationship. Three +options were put to the user directly: (a) leave it as a single platform-wide minimum per offer +(status quo, no change); (b) let a buyer request an exception negotiated through a message/ +approval flow; (c) let the seller directly set a per-buyer override value. The user chose (c). + +## Decision + +- New `OfferBuyerMinimum` model: `(offerId, buyerOrganizationId)` unique pair, one + `minimumQuantity` value, owned/writable only by the offer's seller. +- `POST /offers/:id/buyer-minimums` (seller-only, `offers:write`) upserts an override for one + buyer org — calling it again for the same buyer replaces the previous value, it does not stack. +- `GET /offers/:id/buyer-minimums` / `DELETE /offers/:id/buyer-minimums/:buyerOrganizationId` + round out seller-side management; both are also seller-only. +- `OrdersService.addLine()` now resolves `effectiveMinimum` as: the caller's own + `OfferBuyerMinimum` override if one exists for `(offer, principal.organizationId)`, else the + offer's own `minimumQuantity`. The override **replaces**, it does not add to or floor against, + the offer-level minimum — a seller sets exactly one effective threshold per buyer, never two + thresholds a buyer would need to satisfy simultaneously. + +## Consequences + +- A seller can grant a buyer a *lower* MOQ (the common case — a trusted distributor) or a + *higher* one (e.g. a buyer the seller wants to discourage from small orders) — the model does + not constrain the direction, only that it's a single seller-controlled number per buyer. +- Buyers cannot see other buyers' overrides (the RLS policy on `offer_buyer_minimums` scopes read + access to the seller, or to the specific buyer org the row belongs to) — a buyer only ever sees + their own effective minimum via the normal offer/order flow, not a competitor's negotiated + terms. +- No notification or negotiation flow exists — the seller sets the number unilaterally. Option + (b) (buyer-initiated request/approval) was explicitly not chosen and would need its own ADR if + a future backlog item calls for it. +- Deleting an override silently falls back to the offer's own `minimumQuantity` — there is no + "removed override, buyer now blocked entirely" state; removing an override can only ever raise + or lower a buyer's effective minimum back to the offer default, never revoke ordering access + outright (that remains a separate concern — sharing grants / offer withdrawal). diff --git a/docs/architecture/adr/adr-022-rule-based-sharing-scopes.md b/docs/architecture/adr/adr-022-rule-based-sharing-scopes.md new file mode 100644 index 0000000000..520100f129 --- /dev/null +++ b/docs/architecture/adr/adr-022-rule-based-sharing-scopes.md @@ -0,0 +1,89 @@ +--- +title: "ADR-022: Rule-Based/Dynamic Sharing Scopes" +sidebar_label: "ADR-022" +sidebar_position: 22 +--- + +**Status:** Accepted +**Date:** 2026-08-18 +**Backlog:** priority queue item 1 — buildable without a new product decision, a natural +extension of ADR-010's model. + +## Context + +ADR-010 explicitly deferred rule-based/dynamic scoping (Deel 14 §12-13, e.g. "share everything +tagged region=EU") — only explicit `PRODUCT`/`PRODUCT_CATEGORY`/`ALL_PRODUCTS` targeting was +built. A seller with hundreds of products who wants to share "everything tagged region=EU" (or +"everything with material=steel", or any attribute-driven segment) currently has to either grant +`ALL_PRODUCTS` (over-sharing) or maintain a `PRODUCT`-targeted grant per matching product by hand +(brittle — a new EU product doesn't automatically get shared without remembering to add it). + +## Decision + +Add an optional `SharingGrant.ruleFilter` (`Json?`) — an array of rules, ANDed together, each +`{ attributeCode: string, operator: 'eq' | 'neq' | 'in' | 'contains', value: unknown }`. A rule +matches a product when the product carries an `AttributeValue` for an `AttributeDefinition` with +that `code` (visible to the owner org — global or their own, same visibility rule as attribute +definitions elsewhere) whose value satisfies the operator against the rule's value. + +`ruleFilter` is evaluated **alongside**, not instead of, the existing `targetType` check +(`SharingService.hasAccess` / `resolveAccessibleProductFilter`, ADR-010's single enforcement +point) — a product is only in scope for a grant if it matches `targetType` **and** every rule in +`ruleFilter`. This makes `targetType: ALL_PRODUCTS` + `ruleFilter: [{attributeCode: "region", +operator: "eq", value: "EU"}]` the direct MVP answer to "share everything tagged region=EU," and +composes just as well with `PRODUCT_CATEGORY` ("everything in category X that's also tagged +region=EU") or even `PRODUCT` (redundant but well-defined — the single product must still match). + +Operators are deliberately minimal: `eq`/`neq` for exact match, `in` for "one of a list," and +`contains` for substring-on-a-string or membership-in-an-array attribute values. No comparison +operators (`gt`/`lt`) — no attribute value in this schema currently benefits from ordered +comparison (`MEASUREMENT` is a `{value, unitCode}` object, not a bare number) and adding them +without a real use case would be speculative. + +**Validation happens twice, for two different reasons:** +- At grant-creation time (`SharingService.createGrant`), every `ruleFilter[].attributeCode` is + checked against real `AttributeDefinition` rows (global or the owner's own) and rejected with + `400 UNKNOWN_ATTRIBUTE_CODE` if unrecognized — this catches a typo immediately instead of + producing a grant that silently never matches anything. +- At read time (`matchesRuleFilter`), a rule with no matching attribute value on the product + simply fails to match (the product is out of scope) rather than throwing — a product that never + got the attribute assigned is not an error condition, it's just not in this grant's scope. + +`resolveAccessibleProductFilter` (used by `PartnerService.listPartnerProducts` to list a partner's +visible catalogue) previously returned `{ allProducts, productIds, categoryIds }` and let the +caller build an `OR` query — sufficient when `PRODUCT_CATEGORY` unconditionally meant "every +product in that category." Rule filters break that shortcut (a `PRODUCT_CATEGORY` + `ruleFilter` +grant means only *some* products in that category), so this method now resolves every non-trivial +grant to a concrete product-ID list itself (querying each grant's base `targetType` scope, then +narrowing by attribute values when a `ruleFilter` is present) and returns `{ allProducts, +productIds }`. The `allProducts: true` fast path is preserved for the common case: an +`ALL_PRODUCTS` grant with no `ruleFilter` at all still short-circuits without touching attribute +data. + +## Consequences + +- `POST /sharing-grants` accepts an optional `ruleFilter: SharingRuleDto[]`; `GET + /sharing-grants` and the stored grant both return it as-is. +- `src/sharing/rule-filter.util.ts` is pure, dependency-free logic (`parseRuleFilter`, + `matchesRuleFilter`) with its own Jest spec (`rule-filter.util.spec.ts`) — the parsing/operator + semantics are fully unit-tested; the DB-touching parts (`SharingService.hasAccess`, + `resolveAccessibleProductFilter`, `assertAttributeCodesExist`) were verified end-to-end over + real HTTP against a live Postgres instance (register two orgs, connect them, tag two products + `region=EU`/`region=US`, grant `ALL_PRODUCTS` + `region=EU`, confirm the grantee's product list + and direct-fetch both include the EU product and exclude the US one; confirm a typo\'d + `attributeCode` is rejected with `400` at grant creation). +- No OR logic between rules, no nested rule groups, no "share everything NOT tagged X" — a flat + AND list is the entire language for now. If a real need for OR/negation groups emerges, that's + a follow-up ADR, not a silent extension of this one. +- Two unrelated pre-existing bugs were found and fixed while building and end-to-end testing this + feature (both only reachable by a live HTTP round trip through `ValidationPipe`, never caught by + `tsc` or unit tests): `RegisterDto.firstName`/`lastName` were documented as optional + (`@ApiProperty({ required: false })`) but missing `@IsOptional()`, so omitting them failed + validation; `SetAttributeValueDto.value` had no class-validator decorator at all, so + `ValidationPipe`'s `whitelist: true` silently stripped it and `forbidNonWhitelisted: true` then + rejected every request as `"property value should not exist"` — the attribute-value-setting + endpoints (`POST /products/:id/attribute-values`, `POST /variants/:id/attribute-values`) were + completely unusable via the API before this fix. A codebase-wide scan for the same + missing-decorator pattern (`ApiPropertyOptional`/`required: false` without `@IsOptional`, and + `unknown`/`any`/`Record<`-typed DTO properties without any class-validator decorator) found no + further instances. diff --git a/docs/architecture/adr/adr-023-resource-scoped-roles-and-system-roles.md b/docs/architecture/adr/adr-023-resource-scoped-roles-and-system-roles.md new file mode 100644 index 0000000000..e303d7ba91 --- /dev/null +++ b/docs/architecture/adr/adr-023-resource-scoped-roles-and-system-roles.md @@ -0,0 +1,106 @@ +--- +title: "ADR-023: Resource-Scoped Roles and Seeded System Roles" +sidebar_label: "ADR-023" +sidebar_position: 23 +--- + +**Status:** Accepted +**Date:** 2026-08-18 +**Backlog:** priority queue item 1 — buildable without a new product decision, "natural extensions +of the existing [ADR-018] model." + +## Context + +ADR-018 added a management layer (create/list/assign/revoke) on top of the existing flat +`Role.permissions: string[]` model, but every role was still necessarily org-wide: holding +`products:write` meant write access to every product in the organization, with no way to grant it +for, say, one category only. The backlog called out two specific, illustrative extensions: +per-resource scoping (a role limited to one Category or one Location) and an `is_system_role` flag +with proper seeded roles beyond the wildcard Owner (e.g. "Catalog Editor," "Read Only"). + +While building and end-to-end testing this, two pre-existing gaps surfaced that made the feature +untestable as designed and are fixed as part of this ADR (see Consequences): +`Role` had no `@@unique([organizationId, name])` constraint despite `RolesService.create` already +having dead code to catch that exact conflict, and there was no way to add a second user to an +existing organization at all — `InviteUserDto` existed in `organizations/dto.ts`, fully defined, +never wired to any controller or service method. Without a second user, ADR-018's entire +role-assignment feature (and this one) had never actually been exercised beyond a single +always-`'*'` Owner. + +## Decision + +**Resource scoping.** `Role` gains optional `resourceType` (`CATEGORY | LOCATION`) and +`resourceId`, both-or-neither (validated in `RolesService`, same convention as +`SharingGrant.targetType`/`targetId`). A scoped role's permissions only apply to that one resource +instance — but scoping is only **enforced** for the one permission each type actually covers: +`CATEGORY` → `products:write`, `LOCATION` → `inventory:write` (`SCOPE_ENFORCED_PERMISSION` in +`src/auth/scope.util.ts`). `RolesService.create` rejects any other permission on a scoped role with +`400 UNSUPPORTED_SCOPED_PERMISSION` — better to refuse than silently grant unscoped access to +something the caller believed was narrowed. + +Enforcement is two-tier, mirroring how `SharingService.hasAccess` is the single point that turns a +coarse grant into a fine one: +- `PermissionsGuard` (unchanged) still does the coarse "does the caller hold this permission + anywhere" check via `AuthenticatedPrincipal.permissions` — a category-scoped Catalog Editor must + still be able to *reach* `POST /products` before their specific category can be checked. +- `src/auth/scope.util.ts`'s `assertResourcePermission(principal, permission, resourceType, + resourceId)` is the fine check, called once each service knows the concrete target: + `ProductsService.create/update/addVariant` (against the product's category) and + `InventoryService.upsertInventory` (against the location). `isScopedOnly(...)` additionally + makes `categoryId` *required* on product creation when the caller's only `products:write` grant + is category-scoped — there's no "default" category to silently fall back to. +- `AuthenticatedPrincipal` gained `unscopedPermissions` (permissions from `'*'` or + `resourceType: null` roles) and `scopedPermissions` (`{permission, resourceType, resourceId}[]` + from scoped roles), built in `AuthService.validateAccessToken`. API-client principals + (`validateApiKey`) have no `Role`/`UserRole` at all — their `scopes` are always unscoped. + +**System roles.** `Role.isSystemRole: Boolean` (seeded rows only — no endpoint creates +`organizationId: null` roles). Two are seeded in the migration itself (`INSERT` statements +alongside the `ALTER TABLE`, same file, since this is small reference data tied directly to the +schema change, not runtime state): **Catalog Editor** (`products:write`, `attributes:write`, +`classification:manage`, deliberately unscoped — an org can clone it into a category-scoped custom +role via `POST /roles` if they want the narrower version) and **Read Only** (empty +`permissions: []` — every write in this codebase is gated by a permission code and no permission +codes exist for reads, so an empty-permissions role can authenticate and read everything but pass +no write check; a legitimate "Read Only" role, not a placeholder). Both already surface through +`RolesService.list()`'s existing `organizationId: null` clause with no code change needed there. + +**Closing the "no second user" gap.** `POST /organizations/me/users` (new, `org:manage`, +`InviteUserDto`) creates a user in the caller's org, requires at least one `roleId` (mirrors +`RolesService.revokeFromUser`'s existing "never leave a user with zero roles" invariant — a +freshly-invited user with zero roles could authenticate but pass no permission check, ever), and +returns a generated temporary password **once**, in the response body — the same "shown only once" +convention `AuthService.createApiClient` already uses for API key secrets. No email delivery +infrastructure exists in this build (see README/ADR notes on deferred infra elsewhere), so getting +that password to the invited user is the caller's responsibility, out of band. The created user is +`ACTIVE` immediately, not `PENDING` — there is no separate accept-invite/set-password flow to +transition out of `PENDING`, and login already rejects non-`ACTIVE` users, so leaving them +`PENDING` would create a user who can never log in. + +## Consequences + +- Two pre-existing bugs, found while building/testing this feature, are fixed as part of it: + - `Role` now has `@@unique([organizationId, name])`. `RolesService.create`'s + `ROLE_NAME_TAKEN` conflict handler predates this ADR but could never actually fire — there was + no unique constraint to violate. Verified live: creating two roles with the same name in the + same org now correctly returns `409`. + - `InviteUserDto.email` gained `@IsEmail()` and `.roleIds` gained `@IsArray()`/`@ArrayNotEmpty()`/ + `@IsString({each: true})` (was previously undecorated beyond `@IsOptional()`, so a non-array + value could slip through unvalidated) — the same DTO-validation-gap class as ADR-022's fixes, + found by the same means (an actual HTTP round trip, not `tsc`). +- Verified end-to-end over real HTTP against a live Postgres instance: an owner creates two + categories and a category-scoped "Editor A" role, invites a second user with it, that user logs + in with the returned temporary password, successfully creates a product in their category, + is rejected with `403 FORBIDDEN_SCOPE` creating one in the other category, is rejected with + `400 CATEGORY_REQUIRED` omitting a category entirely, and is rejected with the plain coarse + `403 FORBIDDEN` (`PermissionsGuard`) attempting `inventory:write`, which their role doesn't grant + at all. The same sequence was repeated for a location-scoped "Stock Clerk A" role against + `inventory:write`, with identical results. +- Still not the fuller resource/action/scope matrix Deel 21 describes: only two resource types, + only one enforced permission per type, no scoping on `orders:write`/`offers:write`/etc., no + multi-resource scope (a role scoped to *several* categories), no negative/deny rules. Each of + those is a real follow-up if a concrete need for it shows up, not a silent gap in this one. +- `POST /organizations/me/users` has no rate limiting or invite-throttling of its own — it's gated + by `org:manage` same as every other org-admin action, which was judged sufficient for the same + reason `POST /roles` was (an org's own admin acting within their own org, not an + external-facing surface). diff --git a/docs/architecture/adr/adr-024-product-identity-lifecycle-and-decimal-quantity.md b/docs/architecture/adr/adr-024-product-identity-lifecycle-and-decimal-quantity.md new file mode 100644 index 0000000000..1b431bc502 --- /dev/null +++ b/docs/architecture/adr/adr-024-product-identity-lifecycle-and-decimal-quantity.md @@ -0,0 +1,120 @@ +--- +title: "ADR-024: OSPI Identity Lifecycle, Product Publication Lifecycle, and Decimal Order Quantity" +sidebar_label: "ADR-024" +sidebar_position: 24 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 1 of the product-owner-ordered +build sequence (`BACKLOG.md`) — bundled because all five findings touch the same +`Product`/`OspiIdentity`/`OrderLine` migration surface, and later phases (`Quote`, completeness +scoring) depend on this one landing cleanly first. + +## Context + +Five concrete, unambiguous findings from the re-audit, none requiring a business-policy decision: + +1. **`OspiIdentity` had no status field at all** (Deel 4 §36-41, Deel 23 §81-84) — the spec + requires `RESERVED → REGISTERED → ACTIVE → SUSPENDED → RETIRED`, with permanent, no-reuse + retirement as a hard invariant that was previously unenforceable (no field to check). +2. **`Product` had no `PUBLISHED` state** (Deel 10 §16-22/§65) — the spec's product lifecycle is + `DRAFT → ACTIVE → PUBLISHED → DEPRECATED → RETIRED`, with a dedicated publish/unpublish/retire + API (`POST /products/:id/publish` etc.), distinct from the generic status field. +3. **No `RECALLED` status** (Deel 19 §24-25, explicitly safety-critical: "a recalled product must + stay resolvable, not hidden"). +4. **No `publicationState` audience dimension** (Deel 7 §68-69, Deel 22 §78-81) — + `PRIVATE/PARTNER_ONLY/PUBLIC/SCHEDULED`, independent of `ProductStatus` and currently conflated + into it. +5. **No optimistic concurrency on Product updates** (Deel 22 §110-111) — no `version` field, no + client-supplied expected-version on `PATCH`, no `409` on a stale write. +6. **`OrderLine.quantity` was `Int`** (Deel 17 §29, explicit: "niet uitsluitend integers" — e.g. + `4.5 kg`, `10.75 m`). + +## Decision + +**Identity lifecycle** (`OspiIdentityStatus`: `RESERVED | REGISTERED | ACTIVE | SUSPENDED | +RETIRED`, default `REGISTERED`): +- `IssueOspiIdentityDto` gains optional `reserved`/`reservedUntil` — a reservation is the same + code-minting call, just tagged `RESERVED` with an optional expiry, per Deel 4 §37's "useful for + ERP sync/bulk imports/manufacturing workflows" framing. **Not built**: an automatic sweep that + expires a stale reservation — `reservedUntil` is stored and returned, but nothing currently acts + on it passing. A real deployment would want a scheduled job to release expired reservations; + out of scope for this pass, flagged rather than silently assumed. +- Attaching an identity to a `Product` or `ProductVariant` (`ProductsService.create`/`addVariant`) + promotes it straight to `ACTIVE` from either `RESERVED` or `REGISTERED` — Deel 4 §38's + REGISTERED-vs-ACTIVE distinction ("OSPI knows this identity" vs. "usable per visibility rules") + maps cleanly onto "minted but unattached" vs. "attached to something real," so no separate + manual activation step is needed once a real Product/Variant exists. +- `SUSPENDED`/`RETIRED` identities can never be (re-)attached — checked in both `create()` and + `addVariant()`. `IdentityService.retireIdentity`/`suspendIdentity`/`reactivateIdentity` are new, + ownership-checked, audited transitions (`POST /ospi-identities/:id/retire|suspend|reactivate`). + Retiring does **not** detach an already-attached Product/Variant — Deel 4 §41's own example + ("Old Identity → Retired → New Identity") is precisely "keep the old code resolvable, mint a new + one for the actual replacement," not "sever the link." + +**Product publication lifecycle**: `PUBLISHED` and `RECALLED` added to the existing +`ProductStatus` enum (now `DRAFT | ACTIVE | PUBLISHED | RECALLED | DISCONTINUED | ARCHIVED`). +`DISCONTINUED`/`ARCHIVED` are **not** renamed to the spec's `DEPRECATED`/`RETIRED` wording — they +already implement the same semantics (`ARCHIVED` = "no hard delete, prefer RETIRE over DELETE," +already built) and renaming a working, already-referenced enum value for wording-only reasons is +churn with no functional benefit. `ProductsService.publish`/`unpublish`/`retire`/`recall` are +dedicated, audited, valid-transition-checked actions +(`POST /products/:id/publish|unpublish|retire|recall`) layered on top of the pre-existing generic +`PATCH` (which still accepts any status directly, unchanged — the dedicated endpoints exist for +audit-log clarity and spec-fidelity, not because the generic path needed to be locked down). +Lookups (`IdentityService.lookupCode`, `SearchService.resolveCode`) were already and remain +status-agnostic, so a `RECALLED` product stays resolvable exactly as Deel 19 requires, with no +extra carve-out needed. + +**Publication state**: `PublicationState` (`PRIVATE | PARTNER_ONLY | PUBLIC | SCHEDULED`, default +`PRIVATE`) added as `Product.publicationState`, settable via the generic `PATCH`. Deliberately +**just the field** — nothing in `SharingService` or `SearchService` currently reads it to gate +cross-org visibility, and `SCHEDULED` has no sweep that flips it to `PUBLIC` on its own. Wiring +this into the real access-control checks (and, if wanted, a scheduler for `SCHEDULED`) is real, +separate follow-up work; storing the value without silently claiming the enforcement exists too +was judged better than not building it at all. + +**Optimistic concurrency**: `Product.version: Int @default(1)`, incremented on every update +(generic `PATCH` and all four dedicated lifecycle actions alike). `UpdateProductDto.expectedVersion` +is **optional**, not mandatory — a caller that omits it keeps the pre-existing last-write-wins +behavior (no unannounced breaking change for anything already calling `PATCH /products/:id`); a +caller that supplies it gets a real `409 VERSION_CONFLICT` on a stale write. This is deliberately +narrower than Deel 22 §108's separate `ProductVersion` snapshot/history table (full point-in-time +reconstruction) — that's a different, larger feature this ADR does not build. + +**Decimal order quantities**: `OrderLine.quantity`, `Offer.minimumQuantity`, and +`OfferBuyerMinimum.minimumQuantity` all changed from `Int` to `Decimal(14,4)` (matching `price`'s +existing precision, since minimum-quantity and actual-quantity are directly compared against each +other in `OrdersService.addLine` and must stay type-consistent). `AddOrderLineDto.quantity`, +`CreateOfferDto.minimumQuantity`, and `SetOfferBuyerMinimumDto.minimumQuantity` all moved from +`@IsInt()` to `@IsNumber() @IsPositive()`. + +## Consequences + +- Verified end-to-end over real HTTP against a live Postgres instance: reserving an identity, + suspending/reactivating/retiring one, confirming a retired identity can't be attached + (`403 IDENTITY_NOT_ATTACHABLE`), attaching a reserved one and confirming both the stored row + *and* the create-response's embedded `ospiIdentity` correctly show `ACTIVE` (see the bug fixed + below), the full publish → recall product lifecycle with `409` on an invalid transition, + optimistic concurrency correctly rejecting a stale `expectedVersion` and accepting a current + one, and an offer with `minimumQuantity: 4.5` correctly rejecting a `2.25`-quantity order line + and accepting a `10.75` one — the exact fractional examples Deel 17 §29 itself gives. +- **A real bug was found and fixed while writing that verification**, not by inspection alone: + `ProductsService.create`'s response embedded the identity via `include` at creation time, which + ran *before* the new status-promotion update — so a client attaching a `RESERVED` identity saw + `ospiIdentity.status: "RESERVED"` in the response even though the stored row was already + `ACTIVE` a moment later. Fixed by moving the identity-status update before the include-laden + re-fetch used for the response. +- `Product.version` and `OspiIdentity.status` are additive columns with safe defaults — no data + migration needed for the (empty, dev) database this was verified against; a real deployment + with existing rows would see every existing product start at `version: 1` and every existing + identity default to `REGISTERED` (not `ACTIVE`) on migration, which is honest given none of them + went through the new "attachment activates" pathway historically. Not treated as a problem to + solve in this pass — call out to a future backfill only if a real production dataset needs one. +- `PRODUCT_STATUSES`/`RECALLED` reachable via generic `PATCH` too, not just the dedicated + `/recall` endpoint — same "convenience layer, not a lockdown" choice as publish/unpublish/retire + above; who is authorized to recall a product is still just `products:write`, same as any other + status change. If recall ever needs its own, stricter permission (e.g. a dedicated + `products:recall` reserved for safety/compliance roles), that's a follow-up decision, not + assumed here. diff --git a/docs/architecture/adr/adr-025-idempotency-key.md b/docs/architecture/adr/adr-025-idempotency-key.md new file mode 100644 index 0000000000..10a94149a6 --- /dev/null +++ b/docs/architecture/adr/adr-025-idempotency-key.md @@ -0,0 +1,82 @@ +--- +title: "ADR-025: Idempotency-Key Support for Commitment-Creating Writes" +sidebar_label: "ADR-025" +sidebar_position: 25 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 2 (cross-cutting infrastructure) +of the self-directed build sequence (`BACKLOG.md`) — built early because later phases (Quote, +distribution/partner-sync) create financially/contractually meaningful records too, and should be +able to opt into this mechanism rather than each retrofitting their own. + +## Context + +Deel 5 §30, Deel 8 §35-37, and Constitution §26 all describe the same requirement: a client that +retries a write after a timeout or dropped connection (never knowing whether the original request +actually landed) must be able to signal "this is the same attempt, not a new one" via an +`Idempotency-Key` header, scoped per (organization, actor, endpoint). Without it, a retried +`POST /orders` or `POST /ospi-identities` after a network blip can silently create a duplicate +order or a duplicate identity — the exact class of bug the spec calls out by name. + +## Decision + +- **Opt-in per route** via `@Idempotent()` (`IDEMPOTENT_KEY` metadata), enforced by a single global + `IdempotencyInterceptor` (`APP_INTERCEPTOR`) — not a guard, since it needs to intercept and + replay the *response*, not just allow/deny the request. A route without the decorator is + completely unaffected, including a request that happens to carry the header. +- **The header itself is optional even on a decorated route.** `@Idempotent()` means "this + endpoint honors the header if present," never "this header is required." A caller that omits it + gets ordinary (non-deduplicated) behavior — this is additive, not a breaking change to any + existing caller. +- **Cache key** is `idempotency:{organizationId}:{actorType}:{actorId}:{ControllerName}.{handlerName}:{key}` + — Deel 8 §36's exact scoping (organization + actor + endpoint), built from `request.principal` + rather than trusting a client-supplied org/actor value. +- **Only successful responses are cached.** A validation error or business-rule rejection (400, + 403, 409, etc.) is safe to simply retry as-is, since it created nothing — caching it would only + make a transient failure sticky for no benefit. Verified live: two calls with the same key and an + invalid body both executed and returned distinct `requestId`s, neither was replayed. +- **Only the response BODY is cached, not the raw HTTP status.** Nest computes a route's status + code the same way on every call (from the route's own decorators/defaults, e.g. `201` for a + bare `@Post()`), so replaying the cached body through the normal response pipeline reproduces the + original status for free — without the interceptor reaching into the `Response` object to set + status/headers itself, which risks a "headers already sent" double-write if the timing is wrong + anywhere in the pipeline. A replayed response additionally sets `Idempotent-Replay: true` so a + caller (or this ADR's own verification) can distinguish a replay from a fresh execution even when + the body is identical. +- **24-hour TTL** in Redis (`src/redis/`, a new `@Global()` `RedisModule`/`RedisService` wrapping + `ioredis` — the first real Redis usage in this build; `RateLimitGuard` remains deliberately + in-memory/per-process and untouched by this change) — Deel 8 §37's "retry safety" window, long + enough to cover realistic retry/backoff behavior without keeping every request body forever. +- **Applied to the endpoints that create a real, would-be-duplicated commitment**: `POST /products`, + `POST /products/bulk`, `POST /products/:id/serialized-units/bulk`, `POST /ospi-identities`, + `POST /orders` (draft creation), and `POST /orders/:id/submit` (the actual "creates a commitment" + moment — splits a draft into per-seller `OrderGroup`s). Read endpoints, status-transition actions + without a create side-effect (`accept`/`reject`/`publish`/etc.), and `DELETE`s were left + undecorated — they're either already naturally idempotent or don't create a new row that a retry + could duplicate. + +**Known, accepted limitation — no distributed lock.** Two truly concurrent requests carrying the +same key can both reach the handler before either has cached a result, so both execute; this closes +the "sequential retry after a timeout" case (the common real-world one) but not a genuine race. +Closing that fully needs a `SETNX`-style lock with a wait/retry loop around the handler call, which +is real additional complexity — flagged as a gap rather than silently assumed solved, and left for +a follow-up if a concrete need for it shows up. + +## Consequences + +- Verified end-to-end over real HTTP against a live Postgres + Redis instance: `POST + /ospi-identities` sent twice with the same `Idempotency-Key` returned the byte-identical body + (same `id`, same `createdAt`) on both calls, the second carrying `Idempotent-Replay: true`; the + database confirmed exactly **one** row was created despite two calls. The same request repeated + with *no* `Idempotency-Key` header correctly created a genuinely new attempt each time — and the + second one was independently rejected by the pre-existing `DUPLICATE_COMPANY_PRODUCT_ID` business + rule, confirming the interceptor doesn't interfere with routes/requests that don't opt in. +- `ioredis` added as a new runtime dependency; `REDIS_URL` added to `.env.example` + (`redis://localhost:6379` default, matching the existing `DATABASE_URL` pattern). +- This is the first feature in the build with a genuine external-service dependency beyond + Postgres. If Redis is unreachable, `RedisService.onModuleInit` fails fast at boot (no silent + fallback to "idempotency disabled") — consistent with `PlatformOperatorGuard`'s fail-closed + precedent elsewhere in this codebase, but worth naming explicitly since it's a new operational + dependency for whoever deploys this. diff --git a/docs/architecture/adr/adr-026-webhooks.md b/docs/architecture/adr/adr-026-webhooks.md new file mode 100644 index 0000000000..8bae118af5 --- /dev/null +++ b/docs/architecture/adr/adr-026-webhooks.md @@ -0,0 +1,134 @@ +--- +title: "ADR-026: Outbound Webhooks / Event Subscriptions" +sidebar_label: "ADR-026" +sidebar_position: 26 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 2 (cross-cutting infrastructure) +of the self-directed build sequence (`BACKLOG.md`) — item 7, following ADR-025's Idempotency-Key +work in the same phase. + +## Context + +Deel 5 §45-50, Deel 8 §42-49, and Deel 14 §29-40 all describe the same requirement from different +angles: OSPI must be able to push real-time change notifications ("OSPI → Webhook → ERP") to an +organization's own external systems, rather than requiring polling. All three sources converge on +the same concrete design points: + +- **Registration**: `{url, events[]}`, HTTPS-only (Deel 8 §44). +- **Never synchronous with the write it reports on** (Deel 5 §46, §97): "Product = CREATED, + Webhook = RETRYING" — a webhook delivery attempt must not be part of the transactional request, + so an unreachable external endpoint can never block or slow down the OSPI write that triggered it. +- **Signed** (Deel 5 §48, Deel 8 §45, Deel 14 §35): HMAC over the payload with the subscription's + own secret; Deel 14 §35 additionally names "timestamp; replay protection" explicitly. +- **Exponential-backoff retries, then dead-letter** (Deel 5 §47, Deel 8 §47-48, Deel 14 §36-37) — + and Deel 8 §48 specifically: "de organisatie moet dit kunnen bekijken en opnieuw proberen" (the + organization must be able to view and manually retry a dead-lettered delivery). +- **At-least-once, never exactly-once** (Deel 5 §49, Deel 8 §49) — every delivery gets a unique ID + so the receiver can dedupe; OSPI does not promise single delivery. +- **Thin payload, "webhook + pull"** (Deel 14 §30): a webhook should carry the event type and a + resource id/version, not the full resource — the receiver re-fetches current state via the normal + API. This makes retries and signing simpler and avoids ever shipping stale embedded data. + +## Decision + +**Scope, deliberately narrower than the full spec vision**: this builds an organization's own +outbound notification channel for its own resources — Deel 5/8's "OSPI → Webhook → ERP" framing. +It does **not** build Deel 14's separate, larger feature: a partner subscribing to ANOTHER +organization's products by category/brand/family, using the same rule-based scope engine as +Sharing (ADR-022). That's real, additional complexity (a second access-control dimension on top of +ownership) correctly deferred to `BACKLOG.md` phase 5 item 19 (Distribution/partner-sync API +surface) — this ADR's mechanism is built so that feature can plug into it later rather than invent +its own delivery/retry/signing pipeline. + +**Durable, DB-backed queue** — `WebhookDelivery.status`/`nextAttemptAt` on a genuine table, not an +in-memory structure, IS the "Webhook Queue" the architecture diagrams describe (Deel 5 §46 / +Deel 8 §46). A periodic sweep (`WebhooksService.sweepOnce`, `setInterval`, 15s) picks up rows due +for (re)attempt, rather than a job dispatched inline in the triggering request. `WebhooksService. +emit()` — called from `IdentityService`, `ProductsService`, `OrdersService` — creates the delivery +row(s) synchronously (a fast local DB write, safe to await) but fires the actual outbound HTTP +attempt without awaiting it (`void this.attemptDelivery(...)`), so a slow or dead external endpoint +can never add latency to (or fail) the business write it's reporting on. `emit()` itself swallows +its own errors (logged, not thrown) for the identical reason at one layer up: a webhook-subsystem +hiccup must never fail the request that triggered it — this is a deliberate asymmetry with +`AuditService.log`, which the rest of this codebase treats as essential-not-swallowed; webhooks are +explicitly best-effort infrastructure, audit log entries are not. + +**Signing**: `X-OSPI-Signature: t=,v1=` (Stripe's well-known shape), +HMAC computed over `${timestamp}.${rawBody}` — bundles integrity and replay protection into one +header and one verification step (`signature.util.ts`, unit-tested both directions: sign then +verify, and reject on tampered body / wrong secret / stale timestamp). + +**Retry**: up to 8 attempts, exponential backoff starting at 30s and doubling, capped at 30 minutes +between attempts; the 8th failure moves the delivery to `DEAD_LETTERED`. `POST +/webhooks/deliveries/:id/retry` resets a dead-lettered delivery to a fresh attempt cycle +(`attempts: 0`, immediate re-attempt) per Deel 8 §48's explicit requirement. + +**Payload**: thin, per Deel 14 §30 — `{eventId, eventType, occurredAt, organizationId, data}` where +`data` is just `{resourceId, status, ...}`, never the full Product/Order/Identity object. The +receiver is expected to call back into the real API for current state. + +**Event catalogue** (`webhook-events.ts`) seeded from the transitions this build actually has — +not the spec's full example lists, which include events with nothing behind them yet (`dpp.updated`, +`content.updated`, etc.): `identity.registered/activated/suspended/reactivated/retired`, +`product.created/published/unpublished/recalled/archived` (`archived` is `ProductsService.retire()` +— it moves `Product.status` to `ARCHIVED`, not a separate "retired" status; named to match the +spec's own `product.archived` term, not the method name), `order.created` (on submit), +`order.updated` (on any `OrderGroup` transition). `product.created`/`identity.activated` fire from +`ProductsService.create`/`addVariant` (attaching an identity is what activates it — see ADR-024). + +**Notification scope for multi-party events**: an `Order`/`OrderGroup` event is emitted to BOTH the +buyer's and the seller's organization (a `Set` dedupes when they'd otherwise receive it twice) — +both are genuinely party to that event, unlike a single-owner resource like a Product or Identity. +This is the one place the "notify the resource's owning org" default doesn't hold; documented here +explicitly rather than left implicit in the code. + +**Subscription CRUD**: `POST/GET/DELETE /webhooks`, `GET /webhooks/:id/deliveries`, +`POST /webhooks/deliveries/:id/retry` — all behind a new `webhooks:manage` permission. `secret` is +returned in full only once, at creation; every subsequent `GET /webhooks` omits it entirely (Prisma +`select` without the field, not a runtime redaction that could be bypassed by adding an `include` +later). RLS added for both new tables (`webhook_subscriptions`, `webhook_deliveries` via a join to +its parent subscription), following the same pattern as every other tenant-owned table in +`prisma/sql/rls.sql` — see that file's existing caveat: the app doesn't currently call +`PrismaService.withOrgContext()` on the request path, so this is defense-in-depth infrastructure +consistent with the rest of the codebase's (pre-existing, already-documented) gap, not something +this ADR closes. + +## Consequences + +- Verified end-to-end over a live Postgres instance and a live outbound HTTP path: + - DTO validation: a non-HTTPS URL and an unrecognized event type are both rejected (400) before + a subscription is ever created. + - A subscription pointed at a genuinely unreachable HTTPS host produced a real failed delivery + attempt (`fetch failed`), scheduled for retry with the correct 30s initial backoff. + - Forcing `nextAttemptAt` into the past via direct SQL and letting the real sweep (15s interval) + pick it up repeatedly walked the delivery through attempts 1→8 with the backoff growing each + time, landing on `DEAD_LETTERED` at exactly attempt 8 — confirmed live, not by code inspection. + - `POST /webhooks/deliveries/:id/retry` on that dead-lettered delivery correctly reset it and + fired a fresh attempt; retrying it again while `PENDING` (not `DEAD_LETTERED`) was correctly + rejected with `403 DELIVERY_NOT_DEAD_LETTERED`. + - The **success** path was verified against a real local HTTP receiver (inserted directly via SQL + to bypass the HTTPS-only creation guard, which is a creation-time-only check, not a delivery-time + one): publishing a product produced a delivery the receiver actually got, with a thin + `{eventId, eventType, occurredAt, organizationId, data}` body and an `X-OSPI-Signature` header + whose HMAC was independently recomputed and confirmed to match byte-for-byte — proving the + signing scheme is receiver-verifiable, not just self-consistent. The delivery row correctly + moved to `SUCCEEDED` with `deliveredAt` set. + - Multi-party fan-out: registering `order.created`/`order.updated` subscriptions for both a buyer + org and a seller org, then submitting a real cross-org order and having the seller accept its + `OrderGroup`, produced deliveries on **both** organizations' subscriptions for both events — + confirming the buyer+seller notification scope decision above actually happens, not just reads + correctly in code. + - Cross-org isolation: one organization reading or deleting another organization's webhook + subscription/deliveries both correctly returned `404`, not silently empty or a leak. +- `ioredis`/Redis were **not** used for this feature — the delivery queue is Postgres-backed + (`WebhookDelivery` rows), a deliberate difference from ADR-025's idempotency cache, which needed + Redis's TTL semantics for a request-scoped cache in a way a durable business record does not. +- Known, accepted limitation (documented, not silently assumed solved): the sweep is a single + in-process `setInterval`, not a distributed job queue — correct for this codebase's existing + single-instance-modular-monolith deployment shape (same tier as `RateLimitGuard`'s in-memory + design), but a horizontally-scaled deployment would need either a leader-election guard or a real + job queue (e.g. BullMQ against the now-available Redis) to avoid multiple instances double-sweeping + the same due rows. Flagged as future work if/when that deployment shape is actually needed. diff --git a/docs/architecture/adr/adr-027-api-versioning-and-permissions-catalogue.md b/docs/architecture/adr/adr-027-api-versioning-and-permissions-catalogue.md new file mode 100644 index 0000000000..a50e48d4ce --- /dev/null +++ b/docs/architecture/adr/adr-027-api-versioning-and-permissions-catalogue.md @@ -0,0 +1,71 @@ +--- +title: "ADR-027: `/api/v1/` Global Prefix and `GET /permissions` Catalogue" +sidebar_label: "ADR-027" +sidebar_position: 27 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 2 (cross-cutting infrastructure) +of the self-directed build sequence (`BACKLOG.md`) — items 9 and 10, bundled here as both are small, +independent infra wins with no shared code, following the same pattern ADR-024 used for bundling +unrelated small findings that touch nothing else in common. + +## Context + +Two concrete, unambiguous findings from the re-audit: + +1. **No API version prefix** (Deel 5 §6-8, explicitly a "Definition of Done" item) — the spec's own + base-structure example is literal: `/api/v1/organizations`, `/api/v1/products`, etc., with §7's + principle that "a breaking change may never be silently introduced into `/v1`" — i.e. this only + works as a real safety net if it's in place *before* the first breaking change, not retrofitted + after. Every route in this build was, until now, mounted at the bare root (`/products`, + `/auth/register`, etc.). +2. **No `GET /permissions` catalogue endpoint** (Deel 9 §67, Deel 25 §126) — `PERMISSIONS` + (`src/auth/permissions.ts`) already exists as the enforced, single source of truth for every + `@RequirePermissions(...)` check and for `RolesService`'s own custom-role validation, but nothing + exposed it over HTTP — a caller building a role-creation UI had to hardcode or guess the list. + +## Decision + +**`/api/v1/` global prefix** (`app.setGlobalPrefix('api/v1', { exclude: ['health'] })` in +`main.ts`) — applied to every controller route. Two deliberate exclusions: +- **`GET /health`** stays at the bare path — infra-level monitoring convention (load + balancers/orchestrators expect a stable, version-independent health-check path that doesn't move + when the API's major version does). +- **Swagger UI/JSON** (`/api/docs`, `/api/docs-json`) are unaffected — `SwaggerModule.setup` mounts + its own middleware outside the standard controller pipeline, so `setGlobalPrefix` doesn't reach + it; confirmed live, not assumed. This is also the *right* behavior, not just an artifact: the docs + describe the versioned API, but documentation tooling isn't itself part of the versioned resource + contract. + +Everything else — every domain controller, `POST /auth/register` through the webhooks/DPP surface +added this session — now lives under `/api/v1/...`. The bare (unprefixed) paths this build used +until now all correctly 404. + +**`GET /permissions`** (`RolesController`, no special permission required — any authenticated +caller can read the catalogue, same access level as the existing `GET /roles`) returns +`{ permissions: PERMISSIONS, wildcard: WILDCARD_PERMISSION }` directly from the existing canonical +array — no new data, no duplication, just exposing what already governs every permission check in +the codebase. + +## Consequences + +- **README route references were left as-is (not mechanically rewritten to add `/api/v1/`)** — the + README documents dozens of routes across every feature section; a global find-and-replace-style + edit across all of them is exactly the kind of large, low-value, typo-risking mechanical diff this + build has avoided elsewhere. A single prominent note was added instead pointing at this ADR and + stating the real, current base path. The code (and the live-verified Swagger doc) is the source of + truth; the README's per-route examples remain correct as *relative resource paths*. +- Verified end-to-end against a live, freshly-booted app: `GET /health` still answers unprefixed; + `GET /api/docs` and `GET /api/docs-json` still work and the JSON's own `paths` correctly show + `/health` unprefixed alongside `/api/v1/auth/register` etc. for every other route; the old bare + `POST /auth/register` now 404s; the new `POST /api/v1/auth/register` works end-to-end (real + organization + user created, real JWT pair issued); `GET /permissions` (behind the new prefix, + with normal auth) returns the full, current 15-entry catalogue including `webhooks:manage` + (added earlier this session for ADR-026), confirming it reads live from the enforced array rather + than a stale copy. +- This is a breaking change for any existing caller of this API — by design, and precisely the + point of doing it now rather than later (Deel 5 §7): every route moved in one atomic change while + there are zero real external consumers yet, instead of moving some routes under `/v1` months from + now while others stay at the root out of inertia. diff --git a/docs/architecture/adr/adr-028-session-and-token-revocation.md b/docs/architecture/adr/adr-028-session-and-token-revocation.md new file mode 100644 index 0000000000..068615491d --- /dev/null +++ b/docs/architecture/adr/adr-028-session-and-token-revocation.md @@ -0,0 +1,91 @@ +--- +title: "ADR-028: Session Tracking and Token Revocation" +sidebar_label: "ADR-028" +sidebar_position: 28 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 2 (cross-cutting infrastructure) +of the self-directed build sequence (`BACKLOG.md`) — item 8, the last item in Phase 2. + +## Context + +Deel 21 §42-44 requires, concretely: + +- Sessions must be **revocable**, have an **expiration**, carry **device/session info**, and be + **auditable**. +- A user must be able to **"log out from all devices."** +- Access tokens: short-lived, limited scope, carry organization context (already true — 15 min TTL, + `organizationId` in the JWT payload since the original build). +- Refresh tokens must be **securely managed**. +- OSPI must be able to **revoke tokens** in a security incident. + +Before this change, refresh tokens were purely stateless signed JWTs — `AuthService.refresh()` +checked only the signature and the user's still-`ACTIVE` status. There was no server-side record of +a "session" at all: no way to list active logins, no way to revoke one, and no way to log out +everywhere short of rotating `JWT_SECRET` (which would also invalidate every OTHER user's tokens). + +## Decision + +**One `Session` row per issued refresh token**, not per access token. This maps directly onto what +a user actually means by "a device I'm logged in on" — the login-to-logout lifetime, not each +15-minute access-token renewal within it. `refresh()` reuses the SAME session id on every renewal +(`sid` in the refresh JWT payload) rather than rotating to a new row per call — simpler, and +sufficient for "list/revoke sessions" to mean exactly what a user expects (one row = one login, not +one row per silent background renewal). + +**`Session.expiresAt` is an absolute cap set once at creation** (login/register), never extended on +refresh. A session's total lifetime is bounded to 7 days from first login, however many times it's +refreshed in between — checked authoritatively in `refresh()` even when the refresh JWT's own +signature still verifies past that point. Deliberately simpler than a sliding window; a session that +needs to outlive 7 days requires a fresh login, which is a reasonable, common trade-off. + +**Deliberate, bounded access-token exposure window**: access tokens do **not** carry a session +reference and are **not** checked against `Session` state on every authenticated request. Revoking +a session (via `DELETE /auth/sessions/:id` or `POST /auth/logout-all`) stops all FUTURE refreshes +for that session immediately, but an access token already issued keeps working until its own natural +expiry (≤15 minutes) — the same short window that already existed for "the user got deactivated" +before this change. The alternative (looking up `Session` state on every single authenticated +request) would make revocation instantaneous but adds a DB round-trip to the hottest path in the +entire application for a security property already bounded to 15 minutes by the existing short TTL. +Documented explicitly as a deliberate trade-off, not an oversight — a genuine security-incident +response (e.g. rotating `JWT_SECRET`) remains the tool for "invalidate everything, right now," +unchanged by this ADR. + +**Four new endpoints** on `AuthController`: +- `GET /auth/sessions` — the caller's own session history (device/IP, created/last-used/expiry, + revoked state), auditable per Deel 21 §42 — returns ALL sessions including revoked/expired ones, + not just active ones, so a user can review what happened, not only what's current. +- `DELETE /auth/sessions/:id` — revoke one specific session (ownership-checked; another user's + session id 404s, not 403, matching every other ownership check in this codebase). +- `POST /auth/logout` — revoke exactly the session the caller's own refresh token names (public, + rate-limited like `/auth/refresh` — a client logging out doesn't necessarily still have a valid + access token to authenticate the call with, so this takes the refresh token as its credential, + mirroring `/auth/refresh`'s own shape). +- `POST /auth/logout-all` — Deel 21 §42's own literal example, "log out from all devices": revokes + every one of the caller's un-revoked sessions in one call. + +**Device/session metadata** (`userAgent`, `ipAddress`) is captured from the request at +login/register time (`sessionMetaFrom()` in `AuthController`) — best-effort, not validated or +trusted for any security decision, purely informational for the session list. + +## Consequences + +- Verified end-to-end over a live Postgres instance and real HTTP: registering + logging in from + two different "devices" (distinct `User-Agent` headers) produced two real, listable `Session` rows + with correct device/IP/expiry info; refreshing one device's token succeeded and kept the same + session id; revoking the OTHER device's session via `DELETE /auth/sessions/:id` then attempting to + refresh that device's (still cryptographically valid, unexpired) refresh token correctly failed + with `401 SESSION_REVOKED`; `POST /auth/logout-all` correctly revoked every remaining un-revoked + session and reported the real count; a THIRD device's access token, issued before the + `logout-all` call, correctly kept working until this test's own verification of the documented + bounded-exposure design (still valid past the revocation, as designed — not a bug); `POST + /auth/logout` with a single device's own refresh token correctly revoked just that one session; + and one user attempting to revoke a DIFFERENT, unrelated user's session correctly got `404`, not a + leak or a silent no-op. +- RLS added for the new `sessions` table (joined through `users.organizationId`, same pattern as + `dpp_records`/`webhook_deliveries`), consistent with every other tenant-owned table. +- This closes out `BACKLOG.md` Phase 2 (cross-cutting infrastructure) in full — idempotency + (ADR-025), webhooks (ADR-026), API versioning + permissions catalogue (ADR-027), and now session + revocation are all in place for Phase 3 onward to build on without retrofitting. diff --git a/docs/architecture/adr/adr-029-category-attribute-schema.md b/docs/architecture/adr/adr-029-category-attribute-schema.md new file mode 100644 index 0000000000..73f1b0c904 --- /dev/null +++ b/docs/architecture/adr/adr-029-category-attribute-schema.md @@ -0,0 +1,105 @@ +--- +title: "ADR-029: Category → Attribute Schema Linkage" +sidebar_label: "ADR-029" +sidebar_position: 29 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 3 (the spec's own +"architectural centerpiece") of the self-directed build sequence (`BACKLOG.md`) — item 11, the +first item of Phase 3 and a hard dependency for item 13 (completeness scoring). + +## Context + +Deel 11 §30-33/§41-43 and Deel 24 §2/§39-53/§84/§110-116 describe a category (the spec's own word: +"classification") determining which attributes are `REQUIRED`/`RECOMMENDED`/`OPTIONAL` for a +product in it, with three concrete mechanics: + +- **Conditional requirements** (§32): `Battery powered = true → Battery capacity = REQUIRED` — a + rule can depend on another attribute's value, not just be unconditionally on/off. +- **Inheritance** (§41): a child classification inherits its parent's required attributes (the + spec's own worked example: `Electric Motor {power, voltage, frequency}` → child `AC Motor` + inherits all three and adds its own `phase_count`). +- **Override rules** (§42): a child MAY re-specify an inherited attribute's requirement level, but + must NOT silently change what the attribute *means* — `power` can never start meaning + `temperature` partway down the tree. + +Before this ADR, `Category`, `ClassificationNode`, and `AttributeDefinition` were three completely +unlinked models — nothing determined which attributes applied to which category, so +`AttributeValue` rows could be set with zero relationship to what a product's category actually +required. + +## Decision + +**Terminology mapping, stated explicitly**: the spec's text uses "classification" for this feature, +which in THIS codebase's existing modeling could mean either of two different things — +`Category` (the field actually set on every `Product.categoryId`, carrying the org/global-registry +split from ADR-020) or `ClassificationScheme`/`Node`/`Assignment` (a separate, parallel taxonomy +structure that exists in the schema but has no product-facing consumer anywhere in this build). +This ADR attaches the schema to `Category`, not `ClassificationNode`, because Category is the one +that's actually load-bearing — every product already has exactly one, `ClassificationAssignment` +is optional and currently unused by any read path. Attaching required-attribute rules to the +unused structure would build a feature nothing could ever trigger. + +**New `CategoryAttributeSchema`** (`categoryId`, `attributeDefinitionId`, `requirement` +(`REQUIRED`/`RECOMMENDED`/`OPTIONAL`/`FORBIDDEN`), optional `conditionOnAttributeDefinitionId` + +`conditionOnValue`) — one row per (category, attribute) pair. A conditional rule's `requirement` +only applies when the product's own value for the condition attribute matches +`conditionOnValue`; unconditional otherwise (both null). + +**Inheritance and override, resolved at read time, not materialized**: `GET +/categories/:id/attributes` walks the category's ancestor chain (via `Category.parentId`) root to +leaf, merging each level's rules into the one before it — a closer-to-leaf rule for the SAME +`attributeDefinitionId` replaces (not adds to) an inherited one, deliberately keyed by the +attribute's stable id (never by name), which structurally guarantees §42's "never silently change +what an attribute means" — a rule can only ever override `power`'s requirement level, it can never +repoint the same key at a different attribute. No materialized/denormalized "effective schema" +table — this is computed fresh on every read, correct-by-construction over a small number of +ancestor levels, with room to add caching later if that read ever shows up as a hot path. + +**Scope narrowed from item 11's full backlog description in one place, documented rather than +silently dropped**: attribute-schema *management* (create/update/delete a rule) is only supported +for organization-owned categories, not shared/global (`organizationId IS NULL`) ones. A global +category's schema would be registry governance — the same class of action as `categories:govern` +approve/reject (ADR-020) — and enforcing that correctly means checking `PlatformOperatorGuard`'s +`PLATFORM_OPERATOR_ORG_ID` logic, which lives in a guard, not something this ADR wanted to +duplicate inline in a service to support a comparatively rare case. Attempting to set a schema on a +global category returns a clear `403 GLOBAL_CATEGORY_SCHEMA_NOT_SUPPORTED` rather than a confusing +404 or silent no-op. Reads (`GET /categories/:id/attributes`) work for global categories too — only +writing a schema on one is unsupported. + +**Deliberately NOT built in this pass** (all explicitly Deel 11 topics, left for later if a real +need appears): §33 attribute-level constraints (numeric min/max, allowed units) — a different, +additive concern from requirement level; §34-35 enum versioning; §39-40 attribute namespaces +(`ospi:power` vs `manufacturer:internal_code`) and manufacturer-private extension attributes. None +of these block item 13 (completeness scoring, the actual reason item 11 was sequenced first) — that +item only needs to know REQUIRED/RECOMMENDED/OPTIONAL/FORBIDDEN plus the conditional check, which +this ADR delivers in full. + +## Consequences + +- Verified end-to-end over live HTTP against a live Postgres instance, reproducing the spec's own + worked examples: created `Electric Motor` (parent) with `power`/`voltage` REQUIRED, `AC Motor` + (child) with its own `phase_count` REQUIRED plus a conditional `battery_capacity` REQUIRED (only + when `battery_powered = true`) and an OVERRIDE of the inherited `voltage` down to RECOMMENDED. + `GET /categories/:acMotorId/attributes` correctly returned exactly four entries: `power` + (inherited from the parent, still REQUIRED, `inheritedFromCategoryId` pointing at the parent), + `voltage` (the child's own RECOMMENDED override, `inheritedFromCategoryId: null`), `phase_count` + and `battery_capacity` (both the child's own). `GET /categories/:electricMotorId/attributes` + (the parent) correctly showed only its own two rules with zero leakage of the child's rules — + confirming the merge only ever flows down the tree, never sideways or up. + Validation confirmed live: a self-referential condition (an attribute conditioning its own + requirement) and a `conditionOnValue` supplied without its paired + `conditionOnAttributeDefinitionId` were both rejected with `400`; attempting to set a schema on a + freshly-created global category proposal correctly returned `403 + GLOBAL_CATEGORY_SCHEMA_NOT_SUPPORTED`; deleting a rule correctly removed it from the effective + schema on the next read; and a second, unrelated organization attempting to write OR read the + first organization's private category's schema both correctly 404'd. +- RLS added for `category_attribute_schemas`, joined through the parent category's + `organizationId` (matching the existing `categories` policy's own `IS NULL OR = current org` + handling, since global-category rows must remain readable even though writing them isn't + supported yet). +- Sets up item 13 (completeness scoring, `POST /products/:id/validate`) to consume this schema + directly — that item is next, per `BACKLOG.md`'s own dependency ordering, precisely because it + needed this data to exist first. diff --git a/docs/architecture/adr/adr-030-attribute-value-provenance.md b/docs/architecture/adr/adr-030-attribute-value-provenance.md new file mode 100644 index 0000000000..c408e3d2d0 --- /dev/null +++ b/docs/architecture/adr/adr-030-attribute-value-provenance.md @@ -0,0 +1,102 @@ +--- +title: "ADR-030: Attribute Value Provenance/Source Model" +sidebar_label: "ADR-030" +sidebar_position: 30 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 3 (attribute/classification +engine) of the self-directed build sequence (`BACKLOG.md`) — item 12, bundled with item 11 +(ADR-029) in the backlog's own framing since both touch `AttributeValue`/`AttributeDefinition`, +built as a separate ADR because the actual work is independent (item 11 is Category-level +requirement rules; item 12 is per-value metadata) and landed in its own commit. + +## Context + +Deel 11 §50-54/§75-79 and Deel 24 §57-61/§95-105 describe the same requirement from two chapters: +an `AttributeValue` needs to record where it came from, and OSPI must not let one source silently +overwrite another's already-confirmed value without a clear model. Concretely: + +- **Provenance metadata** (Deel 11 §51, Deel 24 §57): `source`, `sourceOrganization`, + `sourceDocument`/`sourceSystem`, `sourceTimestamp`, `confidence`. +- **A canonical source enum** (Deel 24 §58): `MANUFACTURER | SUPPLIER | IMPORT | USER | API | + CALCULATED | INFERRED`. +- **Field-level federation / attribute ownership** (Deel 11 §75, Deel 24 §101): different + attributes on the same product can be supplied by different organizations — `Voltage` by the + manufacturer, `Stock` by a distributor, `RetailPrice` by a retailer. +- **"Geen ongecontroleerde overwrites"** (Deel 11 §76): when organization B uses a shared product, + B must not silently change organization A's master value. +- **Conflict state** (Deel 24 §103): `VERIFIED | UNVERIFIED | CONFLICTED`. +- **Conflict resolution paths** (Deel 24 §104): owner authority, manual review, source priority, + verification, explicit override. + +Before this ADR, `AttributeValue` had no provenance whatsoever — a write from any source silently +replaced whatever was there, with zero record of who supplied it or whether it had ever been +confirmed. + +## Decision + +**Scope, narrower than the full spec vision, stated explicitly**: this ADR decorates the existing +single `AttributeValue` row per (product/variant, attribute) with provenance metadata and a real, +enforced "no uncontrolled overwrite" rule. It does **not** build a multi-candidate-value store where +each source's submission is its own row with a separate canonical-selection step — that is +`BACKLOG.md` phase 5 item 21 (Data-proposal / conflict-resolution workflow, Deel 14 §50-57's +`SUBMITTED/UNDER_REVIEW/ACCEPTED/REJECTED/WITHDRAWN` flow), a genuinely larger feature. What this +ADR delivers is the buildable, testable subset: provenance fields on the single row, plus a real +(not merely documented) guard against silently clobbering a confirmed value. + +**New fields on `AttributeValue`**: `source` (the Deel 24 §58 enum, default `USER` — an omitted +`source` behaves exactly as every pre-existing caller already does), `sourceOrganizationId` +(defaults to the caller's own org if omitted — this is who *supplied* the value, independent of +which org owns the product itself, enabling the Deel 11 §75 federation case), `sourceReference` +(one free-text field collapsing Deel 11 §51's `sourceDocument`/`sourceSystem` — two fields for the +same "where to look for more detail" need was judged unnecessary granularity), `confidence` +(0..1), and `conflictState` (`UNVERIFIED` default / `VERIFIED` / `CONFLICTED`) with `verifiedAt`/ +`verifiedByUserId`. + +**The overwrite guard, concretely**: a value in `VERIFIED` or `CONFLICTED` state is protected — a +write proposing a genuinely different value from a different source is rejected with `409 +VERIFIED_VALUE_CONFLICT`, and the existing row is flipped to `CONFLICTED` (a persisted, visible +state change, not just a transient error nobody recorded) so the discrepancy shows up on the next +read. A write from the *same* origin, or proposing the *same* value, is never blocked — matching +the value being re-submitted unchanged, or the same source correcting its own prior entry, which +isn't a real conflict. `UNVERIFIED` values have no such protection at all — nothing was ever +confirmed as ground truth, so any write simply replaces it, identical to pre-ADR behavior. + +**Resolution paths, mapped onto existing endpoints rather than new ones** (Deel 24 §104): +`POST /attribute-values/:id/verify` is the "manual review"/"verification" path — a human confirms +an `UNVERIFIED` or `CONFLICTED` value is correct as-is, without touching the value itself. +`forceOverride: true` on the normal set-attribute-value call is the "explicit override" path — it +bypasses the guard entirely and always resets the row to `UNVERIFIED` (replacing an authoritative +or disputed value is itself a fresh, not-yet-reviewed claim, regardless of what state it came from). +`owner authority` and `source priority` resolution (Deel 24 §104/§105) are **not** built — both +require a configurable per-organization ranking that doesn't exist yet, correctly left to item 21. + +## Consequences + +- Verified end-to-end over live HTTP against a live Postgres instance, reproducing Deel 11 §52's + own example almost verbatim (400V vs 415V): set `voltage = 400` with `source: MANUFACTURER`, + verified it (`conflictState` → `VERIFIED`), then a `SUPPLIER`-sourced write proposing `415` + correctly returned `409 VERIFIED_VALUE_CONFLICT` — and a direct database check confirmed the + original row was left completely untouched (`value: 400`, `source: MANUFACTURER`) with only + `conflictState` flipped to `CONFLICTED`. `forceOverride: true` with the same `415`/`SUPPLIER` + payload then correctly replaced the value AND reset `conflictState` to `UNVERIFIED` with + `verifiedAt`/`verifiedByUserId` cleared. + **A real bug was found and fixed during this verification, not by inspection**: the first + implementation only reset verification state when the existing row's `conflictState` was exactly + `VERIFIED` — but the guard itself had already flipped it to `CONFLICTED` on the prior rejected + attempt, so by the time `forceOverride` ran, the reset condition no longer matched and the stale + `CONFLICTED`/`verifiedAt`/`verifiedByUserId` silently carried forward onto the new value. Fixed + by making `forceOverride` unconditionally reset to `UNVERIFIED` regardless of the prior state, + and broadening the guard itself to protect `CONFLICTED` rows the same as `VERIFIED` ones (a + disputed value shouldn't be any easier to silently overwrite than a confirmed one). Re-verified + live after the fix with the same exact sequence. + Also verified: re-submitting the *same* value/source against an already-`VERIFIED` row succeeds + normally (not blocked — no real conflict exists); `POST /attribute-values/:id/verify` on an + already-`VERIFIED` value correctly `403`s; and a user from an unrelated organization attempting + to verify another organization's attribute value correctly `404`s. +- No RLS policy added for `attribute_values` — it already had none before this ADR (documented, + pre-existing gap: the table has no direct `organizationId` column and RLS for it was explicitly + deferred to "route all access through the parent Product's tenant-scoped service methods," per + `prisma/sql/rls.sql`'s own existing note). Not something this ADR's scope covers or changes. diff --git a/docs/architecture/adr/adr-031-product-completeness-scoring.md b/docs/architecture/adr/adr-031-product-completeness-scoring.md new file mode 100644 index 0000000000..c2a3de383a --- /dev/null +++ b/docs/architecture/adr/adr-031-product-completeness-scoring.md @@ -0,0 +1,104 @@ +--- +title: "ADR-031: Product/Attribute Completeness Scoring" +sidebar_label: "ADR-031" +sidebar_position: 31 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 3 (attribute/classification +engine) of the self-directed build sequence (`BACKLOG.md`) — item 13, the last item of Phase 3, +sequenced last specifically because it depends on item 11 (ADR-029, `CategoryAttributeSchema`) and +item 12 (ADR-030, `AttributeValue` provenance) both already existing. + +## Context + +Deel 7 §6-10/§68-69, Deel 11 §72-74, Deel 22 §78-81, and Deel 24 §92-96 describe the same feature +from four chapters, converging on identical concrete requirements: + +- **A single percentage is explicitly called insufficient** (Deel 11 §72: "Een enkel percentage is + onvoldoende voor data stewardship") — the response must also name exactly which attributes are + missing, not just report a number. +- **The score must be based on more than a flat filled-field ratio** (Deel 7 §6): required, + recommended, and optional attributes, classification requirements, and publication requirements + — not "count of filled fields." +- **Completeness ≠ validity** (Deel 24 §94): a field can be filled but wrong (`Voltage = "abc"`). +- **A concrete validation API** (Deel 7 §68): `POST /products/{id}/validate` → + `{errors, warnings, score, readyForPublication}`. +- **Publishing is gated on completeness** (Deel 7 §7, Deel 22 §78): "Cannot publish" when required + data is missing — a `Draft → Validation → Ready → Publish` state flow, not merely advisory. + +## Decision + +**`POST /products/:id/validate`** computes, live, on every call — no materialized/cached score — +against the `CategoryAttributeSchema` effective schema (ADR-029) and the product's own +`AttributeValue` rows (ADR-030): + +- **REQUIRED attribute missing** → an `errors` entry (`MISSING_REQUIRED_ATTRIBUTE`), naming the + attribute by its stable code. +- **RECOMMENDED attribute missing** → a `warnings` entry (`MISSING_RECOMMENDED_ATTRIBUTE`) — soft, + never blocks. +- **FORBIDDEN attribute carrying a value** → an `errors` entry (`FORBIDDEN_ATTRIBUTE_SET`). +- **No category assigned at all** → an `errors` entry (`NO_CATEGORY`) — without a category, no + required-attribute schema can even be evaluated, which is itself a completeness gap worth + surfacing rather than silently treating as "0 requirements, 100% complete." +- **Conditional rules** (Deel 11 §32, via ADR-029) are resolved exactly as they are for the + effective-schema endpoint: a rule whose condition attribute doesn't match the required value is + treated as `OPTIONAL` (never counted, never flagged) for that specific product. + +**`score`** weights a missing `REQUIRED` attribute twice as heavily as a missing `RECOMMENDED` one +(`(requiredFilled×2 + recommendedFilled) / (requiredTotal×2 + recommendedTotal) × 100`, rounded; +100 when there's nothing to require at all) — a concrete, documented default rather than an +unexplained number, honoring Deel 24 §95's "the exact scoring must remain configurable" by making +this ONE clearly-stated formula rather than pretending a universally-correct weighting exists. +`OPTIONAL` attributes never affect the score, matching Deel 11 §31's own framing ("not every product +needs color information"). **`requiredCompleted`** is the separate, narrower percentage Deel 7 §69's +own example response names explicitly — just required-attribute fill rate, with no +`RECOMMENDED`/`FORBIDDEN` mixed in. + +**`readyForPublication`** is `errors.length === 0` — a pure function of the hard blockers, entirely +independent of `score` (the `NO_CATEGORY`-only case demonstrates why: `score` alone would report +100% since there's nothing to require, while `readyForPublication` correctly stays `false`, exactly +the "a single percentage is insufficient" problem Deel 11 §72 names). + +**Publishing is a real, enforced gate, not just advisory**: `ProductsService.publish()` now calls +`validateProduct()` first and rejects with `400 PRODUCT_NOT_READY_FOR_PUBLICATION` (carrying the +same `errors` array) when `readyForPublication` is `false` — Deel 7 §7's "cannot publish" and +Deel 22 §78's `Draft → Validation → Ready → Publish` flow are both literal, not aspirational. +`unpublish`/`retire`/`recall`/the generic `PATCH` remain ungated — only the specific act of +publishing requires readiness, matching this build's existing "dedicated lifecycle actions add +guardrails, the generic path stays a lower-friction escape hatch" pattern from ADR-024. + +**Deliberately NOT checked** (flagged, not silently assumed covered): Deel 7 §7's own example list +also includes "Safety document" and "Image" as completeness requirements — `Document` has no +`documentType` field yet to distinguish a safety datasheet from any other upload +(`BACKLOG.md` phase 4 item 16), so there's no reliable way to check for one today without either +building that first or writing a misleading heuristic ("has at least one document" is not the same +claim as "has a safety document"). This becomes buildable the moment item 16 lands. Also not built: +Deel 24 §92's full "Validity / Verification / Freshness" quality dimensions beyond completeness — +`AttributeValue.conflictState`/`verifiedAt` (ADR-030) already carry the raw data a freshness/ +verification score would consume, but composing them into Deel 11 §73's fuller "Data Quality Score: +94/100" composite is explicitly framed by the spec itself as later work ("Later kan OSPI een +uitgebreider scoremodel gebruiken"). + +## Consequences + +- Verified end-to-end over live HTTP against a live Postgres instance: a category with `power`/ + `voltage` REQUIRED, `efficiency_class` RECOMMENDED, and a deliberately-named `legacy_field` + FORBIDDEN; an empty product against it correctly returned `score: 0`, `requiredCompleted: 0`, + two named `errors`, one named `warning`, `readyForPublication: false`; filling both REQUIRED + attributes moved it to `score: 80` (`(2×2+0)/(2×2+1)×100`), `requiredCompleted: 100`, zero + errors, `readyForPublication: true`; setting the FORBIDDEN attribute's value on top correctly + reintroduced exactly one error (`FORBIDDEN_ATTRIBUTE_SET`) without moving the score (a forbidden + value isn't part of the weighted ratio, only a hard block) and flipped `readyForPublication` back + to `false`. A fresh, clean product (both REQUIRED filled, no FORBIDDEN value) was actually + published successfully (`201`) through the real `POST /products/:id/publish` endpoint; a product + still missing REQUIRED attributes was correctly rejected at `publish` time with + `400 PRODUCT_NOT_READY_FOR_PUBLICATION` before any status transition occurred. A product with no + category assigned at all correctly showed `score: 100` (nothing to divide by) alongside + `readyForPublication: false` via the standalone `NO_CATEGORY` error — the exact "percentage alone + is misleading" scenario the ADR's own design targets. +- This closes `BACKLOG.md` Phase 3 (attribute/classification engine) in full — ADR-029 + (Category → Attribute Schema), ADR-030 (provenance/source), and now ADR-031 (completeness + scoring) together deliver everything the spec's own "architectural centerpiece" framing named, + narrowed in the specific, documented ways stated across all three ADRs. diff --git a/docs/architecture/adr/adr-032-product-localization.md b/docs/architecture/adr/adr-032-product-localization.md new file mode 100644 index 0000000000..0ed03d6991 --- /dev/null +++ b/docs/architecture/adr/adr-032-product-localization.md @@ -0,0 +1,86 @@ +--- +title: "ADR-032: Product Localization/Translation Model" +sidebar_label: "ADR-032" +sidebar_position: 32 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 4 (product content & +relationships) of the self-directed build sequence (`BACKLOG.md`) — item 14, found independently +by 4 of 5 re-audit passes, the strongest cross-validated finding of the entire audit. Sequenced +first in Phase 4, per `BACKLOG.md`'s own note, so later product-content features inherit +localization rather than needing a retrofit. + +## Context + +Six source chapters (Deel 3 §39, Deel 6 §40-42, Deel 7 §54-55, Deel 10 §35-37, Deel 22 §57-61/§102, +Deel 26 §57-59) plus Constitution §21 converge on the same requirement, phrased almost identically +every time: `Product.name`/`description` must not be a single flat string — a product needs +per-locale values (`nl-BE`, `fr-BE`, `en`, `de`, ...), with a predictable fallback chain when a +requested locale is missing. Deel 6 §41 gives a concrete conceptual shape +(`LocalizedValue { resourceId, field, language, value }`) but explicitly says the exact +implementation may differ "zolang dezelfde functionaliteit wordt bereikt." Deel 7 §55 explicitly +scopes the translation *workflow* (request → translate → review → publish) as later work: "Voor +MVP kan dit eenvoudiger worden gehouden." + +Before this ADR, `Product.name`/`description` were flat strings with no localization mechanism at +all. + +## Decision + +**A dedicated `ProductTranslation` table, not a generic polymorphic `LocalizedValue`.** The spec's +own generic shape (`resourceId`/`field`/`language`/`value`) would mean every consumer does +string-keyed, weakly-typed lookups against an arbitrary-entity table — a real departure from this +codebase's established convention of strongly-typed, per-entity relation tables (compare +`AttributeValue`, which is itself scoped to Product/Variant, not "any entity, any field"). Since +the spec explicitly permits an equivalent alternative implementation, this ADR builds +`ProductTranslation(productId, locale, name, description)` instead — one row per (product, locale), +FK-safe, matching the rest of the schema's style. + +**`Product.name`/`description` remain the base/fallback values** — no data migration, and zero +behavior change for any existing caller that never asks for a locale. A translation is additive: it +overrides the base for a specific locale, never replaces it. + +**Fallback chain** (`localization.util.ts`, unit-tested): requested locale exact match → language- +only prefix (`fr-BE` → `fr`) → the base Product fields. **Resolved independently per field** +(`name`, `description` each walk their own chain) rather than picking one whole translation row — +a translation that only overrides `description` still lets `name` fall through to a +less-specific match or the base value on its own, instead of forcing an unrelated field to inherit +whatever row happened to match first. This directly matches Deel 6 §42's own framing of the +fallback as being about "een gelokaliseerd veld" (a localized *field*), not a whole record. + +**Wired into `GET /products/:id?locale=fr-BE`** — `ProductsService.findOne` accepts an optional +`locale` and, when given, returns the resolved `name`/`description` plus `requestedLocale`/ +`resolvedLocale` so a caller can tell exactly which locale actually supplied the name they got back +(useful for a UI that wants to show "showing English, no French translation yet"). **Not wired into +`GET /products` (the list/search endpoints)** in this pass — bulk per-row locale resolution across +a listing is a related but separable concern, deliberately deferred rather than adding N-query +resolution cost to every list call without a concrete need for it yet; `findOne` was the +higher-value, unambiguous integration point. + +**Translation workflow deliberately NOT built** (Deel 7 §55's own "for MVP, keep this simpler"): +just direct CRUD (`PUT`/`GET`/`DELETE /products/:id/translations[/:locale]`), no +`SUBMITTED → TRANSLATED → REVIEWED → PUBLISHED` review pipeline. Any authenticated org member with +`products:write` can set a translation directly, same access level as editing the base product. + +## Consequences + +- Verified end-to-end over live HTTP against a live Postgres instance, reproducing the spec's own + worked example nearly verbatim: a product with base `name: "Electric motor"`, an `nl` translation + (`name` only), and an `fr-BE` translation (`name` + `description`). `GET` without a `locale` + returned the untouched base values (zero behavior change for existing callers). + `?locale=fr-BE` returned the exact match on both fields (`resolvedLocale: "fr-BE"`). + `?locale=fr-FR` (no `fr-BE`, no plain `fr` row exists) correctly fell all the way to base. + `?locale=nl-BE` correctly fell back to the `nl` row for `name` (`resolvedLocale: "nl"`) while + `description` — which the `nl` row never set — independently fell all the way through to the + base value, proving the per-field (not per-row) resolution actually happens live, not just in + the unit tests. Deleting the `nl` translation and re-querying `?locale=nl-BE` correctly reverted + to the base name. An empty translation body (`{}`, no `name` or `description`) was correctly + rejected with `400`. A second, unrelated organization attempting to write a translation onto the + first organization's product correctly `404`'d. +- RLS added for `product_translations`, joined through the parent product's `organizationId`, same + pattern as `dpp_records`/`webhook_deliveries`/`sessions`/`category_attribute_schemas`. +- Sets up the rest of Phase 4 (item 15 Product Relationships, item 16 Document metadata) to build on + a product model that already has real, tested localization — matching `BACKLOG.md`'s own + sequencing rationale for putting this item first. diff --git a/docs/architecture/adr/adr-033-product-relationships.md b/docs/architecture/adr/adr-033-product-relationships.md new file mode 100644 index 0000000000..ca33a18470 --- /dev/null +++ b/docs/architecture/adr/adr-033-product-relationships.md @@ -0,0 +1,89 @@ +--- +title: "ADR-033: Product Relationships Model" +sidebar_label: "ADR-033" +sidebar_position: 33 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 4 (product content & +relationships) of the self-directed build sequence (`BACKLOG.md`) — item 15, found independently +by 3 of 5 re-audit passes. + +## Context + +Deel 7 §39-42, Deel 10 §43-44, Deel 22 §25-29/§107, and Deel 26 §48-51 all describe products +relating to other products, converging on one concrete model (Deel 22 §26): a relationship has a +`sourceProduct`, `relationshipType`, `targetProduct`, `metadata`, and a `validFrom`/`validUntil` +window. Two structural requirements are explicit: + +- **Directionality where relevant** (Deel 22 §28): "Product A supersedes Product B" is not the + same claim as "Product B supersedes Product A" — the database must store direction explicitly, + not treat every relationship as inherently symmetric. +- **Independent visibility** (Deel 7 §42): a relationship can be private or public, separately + from the product's own publication state — "een interne ERP-relatie hoeft niet automatisch + publiek te worden." + +The union of relationship-type examples across all four chapters: `replacement_for`, +`compatible_with`, `accessory_for`/`accessory_of`, `part_of`, `contains`, `variant_of`, +`supersedes`, `requires`. + +**Explicitly out of scope, by the spec's own words**: Deel 7 §43-44 (Product Bundles, Bill of +Materials) are named as *separate*, deliberately modular features — "BOM functionaliteit wordt +modulair gehouden zodat het core Product model niet onnodig complex wordt." This ADR does not build +either. Product *Family* (variants of one base product) is separately and correctly already +covered by `Product`/`ProductVariant` (ADR-010) — this ADR is additive, not a duplicate of that. + +## Decision + +**New `ProductRelationship(sourceProductId, targetProductId, relationshipType, visibility, +metadata, validFrom, validUntil)`**, directional by construction — there is no symmetric/bidirectional +flag or auto-generated reverse row; a caller wanting the converse relationship queryable creates a +second, separate row. `relationshipType` is the eight-value union above +(`REPLACEMENT_FOR | ACCESSORY_FOR | COMPATIBLE_WITH | PART_OF | CONTAINS | VARIANT_OF | SUPERSEDES | +REQUIRES`). A unique constraint on `(sourceProductId, targetProductId, relationshipType)` prevents +exact duplicates while still allowing the same product pair to carry multiple *different* +relationship types (e.g. both `ACCESSORY_FOR` and `COMPATIBLE_WITH`). + +**Cross-organization by design, not an oversight**: creating a relationship only requires the +caller to own the SOURCE product — the target just needs to exist, in any organization. "A +third-party accessory maker declares their product is `COMPATIBLE_WITH` someone else's printer" is +a real, legitimate use case this platform's multi-tenant marketplace nature explicitly calls for, +not an access-control gap to close. + +**Visibility gates cross-organization reads, checked per-relationship-row, not per-queried-product**: +a relationship is visible to a caller if it's `PUBLIC`, or if the caller's organization owns +EITHER the source or the target of that specific row — independent of which of the two products the +`GET .../relationships` call happened to be made through. This matters concretely: the target +organization (who didn't create the relationship) can still see a `PRIVATE` relationship pointing at +their own product, while a completely unrelated third organization sees only the `PUBLIC` ones. +Default visibility is `PRIVATE` (Deel 7 §42's own framing — public is the exception, not the +default). The same rule is enforced twice: once in `ProductsService.listRelationships` and once in +`prisma/sql/rls.sql`'s new policy, matching this codebase's established defense-in-depth pattern. + +**Deletion is restricted to the source product's owner** — the party that created the relationship +is the one who can retract it; the target owner (even though they can *see* a relationship pointing +at their product) cannot unilaterally delete someone else's declared relationship about their own +product. + +## Consequences + +- Verified end-to-end over live HTTP against a live Postgres instance with two genuinely separate + organizations, reproducing Deel 22 §27's own worked example almost exactly: "Printer A" + (organization 1) declared `COMPATIBLE_WITH` "Cartridge B" (organization 2, never granted any + special access) — the cross-organization creation succeeded. A duplicate of the exact same + (source, target, type) triple correctly `409`'d; a product declaring a relationship to itself + correctly `400`'d. With the relationship left at its default `PRIVATE` visibility: organization 1 + (the source owner) and organization 2 (the target owner, despite never having created it) + BOTH correctly saw it when listing their own product's relationships, while a freshly-registered, + completely unrelated third organization correctly saw zero. Adding a second, `PUBLIC` relationship + between the same two products then correctly became visible to that third organization — while + the original `PRIVATE` one remained invisible to them, confirming the filter operates per-row, + not "product has any public relationship, show them all." Deletion authorization was verified + from both sides: the target owner (organization 2) attempting to delete the relationship via their + own product's route correctly `404`'d (they can see it, not retract it), while the actual source + owner (organization 1) deleted it successfully. +- RLS added for `product_relationships`, matching the same visibility rule as the application-layer + check — a single join against `products` matched on EITHER `sourceProductId` or + `targetProductId`, the same bilateral-visibility shape `connections`/`sharing_grants` already use + for their own two-party relationships, applied here to a join instead of two direct columns. diff --git a/docs/architecture/adr/adr-034-document-metadata.md b/docs/architecture/adr/adr-034-document-metadata.md new file mode 100644 index 0000000000..a82310a6d5 --- /dev/null +++ b/docs/architecture/adr/adr-034-document-metadata.md @@ -0,0 +1,95 @@ +--- +title: "ADR-034: Document Metadata Model" +sidebar_label: "ADR-034" +sidebar_position: 34 +--- + +**Status:** Accepted +**Date:** 2026-08-20 +**Raised by:** re-audit against the source spec (2026-08-19), Phase 4 (product content & +relationships) of the self-directed build sequence (`BACKLOG.md`) — item 16, the last item of +Phase 4, found independently by 2 of 5 re-audit passes across 6 chapters. + +## Context + +Deel 3 §36-37, Deel 6 §46-48, Deel 7 §50-53, Deel 13 §7-31, Deel 18 §9-26, and Deel 22 §67-69 all +describe the same gap: `Document` (ADR-017 built only the storage *backend* — where bytes actually +live — not this metadata shape) had no `documentType`, no integrity/dedup mechanism, no validity +window, no lifecycle state, and no certificate-specific fields. Concretely, from Deel 13 alone: + +- **Standardized document/asset types** (Deel 13 §14, Deel 7 §50): `PRIMARY_IMAGE`, + `GALLERY_IMAGE`, `TECHNICAL_DRAWING`, `DATASHEET`, `MANUAL`, `CERTIFICATE`, `DECLARATION`, + `SAFETY_DOCUMENT`, `INSTALLATION_GUIDE`, `VIDEO` — the union across both chapters. +- **Integrity and dedup via checksum** (Deel 13 §9-10): every upload gets a SHA-256; identical + bytes uploaded twice can reuse the same stored asset rather than doubling storage. +- **Validity windows** (Deel 7 §52): `validFrom`/`validUntil`, "voor certificaten is dit + essentieel," but meaningful for any document type. +- **Document versions / current-version clarity** (Deel 7 §51): "de actuele versie moet duidelijk + bepaald zijn." +- **Certificate-specific metadata** (Deel 13 §27-28): `certificateNumber`, `issuer` + (preferably a real `issuerOrganizationId` when the issuer is itself an OSPI organization), + `issuedAt`, `scope`. +- **Ordering** (Deel 13 §16): `sortOrder` as presentation metadata. + +**A real, explicit distinction the spec draws but this ADR deliberately collapses**: Deel 13 §15 +separates "asset type" (intrinsic to the file) from "product role" (how one specific product uses +it — "an image can be the primary image for one product and a gallery image for another"), which +only matters if a single physical asset is reused across multiple products via a many-to-many +`ProductAsset` join. `Document.productId` remains a direct, nullable FK in this build (one document, +at most one product) — not restructured into that join table — so there is nothing for "type" and +"role" to differ ACROSS in practice; this ADR uses one field, `documentType`, covering the full +union list. + +## Decision + +**`Document` gains**: `documentType` (the union enum above, default `OTHER`), `lifecycleStatus` +(`ACTIVE`/`SUPERSEDED`/`ARCHIVED`, default `ACTIVE` — answers "which version is current" via +filtering rather than a separate version-chain model: an old version moves to `SUPERSEDED`, not +deleted), `validFrom`/`validUntil`, `checksum` (SHA-256 hex), `sortOrder` (default `0`), and +`certificateMetadata` (a single `Json?` blob — `{certificateNumber?, issuer?, +issuerOrganizationId?, issuedAt?, scope?}` — collapsed from 5 separate typed columns since none of +them need to be queried or joined on in this pass; `issuerOrganizationId` inside the JSON is a +convention pointing at a real Organization id when known, not a DB-enforced foreign key). + +**Real SHA-256 dedup, not just a stored hash**: `DocumentsService.upload()` computes the checksum +from the actual decoded bytes, then checks for an existing `Document` in the same organization with +the identical checksum. If found, the NEW document row reuses that existing row's `storageRef` +instead of calling `DocumentStorageService.upload()` a second time — the underlying bytes are +genuinely stored once, while the new row still gets its own name/`productId`/`documentType`, since +the same physical file can legitimately serve a different role attached to a different product. +`CreateDocumentDto` (the metadata-only path, which never sees any bytes) accepts an optional +caller-supplied `checksum` instead, since there's nothing to compute one from at that layer. + +**`PATCH /documents/:id`** (new) updates `documentType`/`lifecycleStatus`/`validFrom`/`validUntil`/ +`sortOrder`/`certificateMetadata` without ever touching the stored file — metadata corrections +(e.g. discovering a certificate's real expiry after upload, or marking an old manual `SUPERSEDED`) +shouldn't require re-uploading bytes that haven't changed. + +**`GET /documents?documentType=SAFETY_DOCUMENT`** (new filter) — the concrete query this metadata +exists to answer ("does this product have a safety document"), validated against the known enum +with a clean `400` on an unrecognized value rather than a raw ORM error. + +**Deliberately NOT built in this pass** (flagged, not silently dropped): Deel 13 §30's document +provenance (`uploadedBy`/`sourceOrganization`/`sourceSystem`/`sourceReference`) — not part of this +item's already-agreed field list; Deel 13 §17-19's per-locale document content (a `Manual` in +`nl-BE`/`fr-BE`/`en-GB`) — a related but separate concern from ADR-032's product-field localization, +not attempted here; Deel 7 §53's digital signatures — explicitly named by the spec itself as +post-MVP ("Dit wordt niet verplicht voor MVP maar het datamodel mag dit niet onmogelijk maken" — the +new nullable, additive fields don't foreclose adding this later). + +## Consequences + +- Verified end-to-end over live HTTP against a live Postgres instance: uploading a `CERTIFICATE` + document with `validFrom`/`validUntil` and full `certificateMetadata` + (`certificateNumber`/`issuer`/`scope`) round-tripped correctly, and its `checksum` was + independently recomputed in Python from the same raw bytes and confirmed to match exactly. + Uploading the IDENTICAL bytes a second time with a different name and `documentType: DATASHEET` + produced a distinct new `Document` row that reused the exact same `storageRef` as the first — + confirming the dedup actually skips a second physical store, not just a second checksum + computation. `PATCH /documents/:id` correctly moved a document to `SUPERSEDED` without touching + its stored bytes. `GET /documents?documentType=DATASHEET` and `?documentType=CERTIFICATE` + correctly returned exactly the matching documents each; an unrecognized `documentType` value + correctly `400`'d instead of surfacing a raw database error. +- This closes `BACKLOG.md` Phase 4 (product content & relationships) in full — ADR-032 + (localization), ADR-033 (relationships), and now ADR-034 (document metadata) together deliver + everything that phase named, narrowed in the specific, documented ways each ADR states. diff --git a/docs/architecture/domain-model.md b/docs/architecture/domain-model.md new file mode 100644 index 0000000000..3d7529c712 --- /dev/null +++ b/docs/architecture/domain-model.md @@ -0,0 +1,61 @@ +--- +title: Domain model +sidebar_label: Domain model +sidebar_position: 2 +--- + +# Domain model + +The platform is a single PostgreSQL database (via Prisma) with one module per bounded domain. This page groups the real schema models (`prisma/schema.prisma`) by module — see the linked ADRs for why each shape was chosen where the source spec was ambiguous. + +## Organizations & Identity + +- **Organization** — the tenant. Every other row in the system is scoped to one, either directly (`organizationId`) or transitively. +- **LegalEntity**, **User**, **Session** — an organization's legal registration and its human users; `Session` backs refresh-token revocation ([ADR-028](/architecture/adr/adr-028-session-and-token-revocation)). +- **Role**, **UserRole** — custom, resource-scoped roles on top of a seeded `'*'` Owner role ([ADR-018](/architecture/adr/adr-018-fine-grained-rbac), [ADR-023](/architecture/adr/adr-023-resource-scoped-roles-and-system-roles)). +- **ApiClient** — machine-to-machine credentials (`ospi_.`). + +## Producers & OSPI Codes + +- **Producer** — an organization's registration as a producer of goods. +- **ProducerCode** — the `AAAA` segment of the OSPI code, issued per producer. +- **OspiIdentity** — the global product/variant identifier: producer code + company product id + variant, with a `RESERVED → REGISTERED → ACTIVE → SUSPENDED → RETIRED` lifecycle ([ADR-024](/architecture/adr/adr-024-product-identity-lifecycle-and-decimal-quantity)). The checksum and segment-width rules are [ADR-004](/architecture/adr/adr-004-ospi-code-checksum) and [ADR-008](/architecture/adr/adr-008-ospi-code-segment-widths). +- **SerializedUnit** — an optional, lightweight per-unit serial/batch record computed from its parent identity, never required for pricing ([ADR-015](/architecture/adr/adr-015-pricing-vs-serialization)). + +## Products & Classification + +- **Product**, **ProductVariant** — every variant always carries its own `OspiIdentity`. +- **ProductTranslation** — per-locale `name`/`description` with fallback resolution ([ADR-032](/architecture/adr/adr-032-product-localization)). +- **ProductRelationship** — directional links between products (`REPLACEMENT_FOR`, `ACCESSORY_FOR`, `COMPATIBLE_WITH`, `PART_OF`, `CONTAINS`, `VARIANT_OF`, `SUPERSEDES`, `REQUIRES`) ([ADR-033](/architecture/adr/adr-033-product-relationships)). +- **Category**, **CategoryAttributeSchema** — categories can be organization-owned or proposed as `global` under registry governance ([ADR-020](/architecture/adr/adr-020-category-registry-governance)); a category declares required/recommended/optional/forbidden attributes ([ADR-029](/architecture/adr/adr-029-category-attribute-schema)). +- **AttributeDefinition**, **AttributeValue** — the attribute engine. Every value carries a provenance/source and conflict state ([ADR-030](/architecture/adr/adr-030-attribute-value-provenance)); [ADR-003](/architecture/adr/adr-003-attribute-datatype-system) fixes the datatype system. +- **ClassificationScheme**, **ClassificationNode**, **ClassificationAssignment** — a separate, largely unused classification tree (attribute schemas attach to `Category` instead — see ADR-029 for why). + +## Documents & Audit + +- **Document** — file metadata (`documentType`, `lifecycleStatus`, `validFrom`/`validUntil`, SHA-256 `checksum`, `certificateMetadata` — [ADR-034](/architecture/adr/adr-034-document-metadata)); storage is behind an abstraction currently bound to local disk ([ADR-017](/architecture/adr/adr-017-document-storage-abstraction)). +- **AuditLog** — explicit `AuditService.log(...)` calls from every mutating service method, kept separate from application logs. + +## Inventory + +- **Location**, **InventoryRecord** — owner-scoped stock. `availableQuantity`/`availabilityStatus` are always *derived at read time*, never stored ([ADR-009](/architecture/adr/adr-009-inventory-record-shape)). + +## Connections, Sharing & Search + +- **Connection** — the request/accept/reject/suspend/terminate lifecycle between two organizations. +- **SharingGrant** — riding on an `ACTIVE` connection, scopes exactly which products and data categories a partner can see, optionally narrowed by an attribute-based `ruleFilter` ([ADR-010](/architecture/adr/adr-010-sharing-scope-model), [ADR-022](/architecture/adr/adr-022-rule-based-sharing-scopes)). +- Search is PostgreSQL full-text search plus a public OSPI code resolver ([ADR-012](/architecture/adr/adr-012-search-postgres-fts), [ADR-014](/architecture/adr/adr-014-code-resolution-visibility)). + +## Ordering & Commerce + +- **Offer** — a seller's commercial listing for a product (sellable even without owning it, given an `ORDERING` sharing grant), with optional per-buyer minimums ([ADR-021](/architecture/adr/adr-021-per-buyer-offer-minimum)). +- **Order**, **OrderGroup**, **OrderLine** — draft → add lines → submit → accept/reject → process → fulfil → complete, split per seller into an `OrderGroup` ([ADR-011](/architecture/adr/adr-011-ordering-mvp-simplifications)). + +## Digital Product Passport & Webhooks + +- **DppProfile**, **DppRecord** — a named, versioned list of required attribute codes, composed live from existing Attributes/Documents with no duplicated storage. Explicitly not an EU ESPR compliance implementation ([ADR-006](/architecture/adr/adr-006-dpp-espr-stance)); public access is gated by a rotatable 256-bit token, not the (low-entropy) OSPI checksum ([ADR-013](/architecture/adr/adr-013-dpp-public-access-token)). +- **WebhookSubscription**, **WebhookDelivery** — HMAC-signed, thin-payload event notifications with exponential-backoff retries and dead-lettering ([ADR-026](/architecture/adr/adr-026-webhooks)). + +--- + +Every service method filters by `organizationId` explicitly (Constitution §14), and PostgreSQL Row-Level Security is layered on top as defense-in-depth ([ADR-007](/architecture/adr/adr-007-multi-tenancy-isolation)). diff --git a/docs/architecture/intro.md b/docs/architecture/intro.md new file mode 100644 index 0000000000..078b06093d --- /dev/null +++ b/docs/architecture/intro.md @@ -0,0 +1,44 @@ +--- +title: Architecture overview +sidebar_label: Overview +sidebar_position: 1 +slug: / +--- + +# Architecture overview + +This section documents how the OSPI platform ([`ospi-platform`](https://github.com/BrickeVD/ospi-platform)) is actually built, and — just as importantly — every place the source specification left something ambiguous, conflicting, or unspecified, and what the build decided instead. + +The source specification is a set of 26 domain chapters ("Deel 1" through "Deel 26") plus a Project Constitution. Those chapters were written independently over time and, in several places, disagree with each other or describe something that cannot literally be implemented as written (a checksum algorithm applied to the wrong kind of data, duplicate chapters with diverging enum values, ambiguous identifier segment widths). Rather than silently picking one interpretation, every such judgment call was written down as a numbered **Architecture Decision Record (ADR)**. + +## How to use this section + +- **Start with [ADR-001](/architecture/adr/adr-001-technology-stack)** for why the platform is a NestJS/PostgreSQL modular monolith rather than a microservice mesh. +- **Read [ADR-004](/architecture/adr/adr-004-ospi-code-checksum) and [ADR-008](/architecture/adr/adr-008-ospi-code-segment-widths) before issuing any OSPI code to a real external party** — together they define the actual, implemented public identifier format. The source documents' Luhn-checksum description is mathematically broken (Luhn operates on numeric digit streams, not a 3-character alphanumeric segment); ADR-004 replaces it with a CRC-16/base32 checksum instead, explicitly flagged as requiring formal ratification before production issuance. +- **Read [ADR-010](/architecture/adr/adr-010-sharing-scope-model) and [ADR-022](/architecture/adr/adr-022-rule-based-sharing-scopes)** before connecting two real organizations — together they are the entire access-control model for cross-organization data. +- Several ADRs are marked **provisional / requires ratification**. Treat those as open decisions for the team, not settled fact. +- Some questions are explicitly **not** answered by any ADR because they aren't engineering questions — see [Open governance questions](#open-governance-questions) below. + +## Domain chapters implemented + +| Deel | Title | Status | +| --- | --- | --- | +| Constitution §43 | MVP boundary (Identity, Organizations, Auth, Producer Codes, OSPI Codes, Products, Variants, Categories, Attributes, Classification, Documents, Audit) | Built | +| Deel 12 | Digital Product Passport | Built as a generic scaffold — **not** an EU ESPR compliance implementation, see [ADR-006](/architecture/adr/adr-006-dpp-espr-stance) | +| Deel 14 | Product Sharing & Data Distribution | Built | +| Deel 15 | Connections, Partners & Ecosystem | Built | +| Deel 16 | Inventory, Availability & Where to Find | Built | +| Deel 17 | Ordering & Commerce API | Built (no payments, no automatic stock reservation — see [ADR-011](/architecture/adr/adr-011-ordering-mvp-simplifications)) | +| Deel 19 | Search, Discovery, Product Resolver & OSPI Graph | Built (PostgreSQL full-text search, not a dedicated search engine — see [ADR-012](/architecture/adr/adr-012-search-postgres-fts)) | + +## Open governance questions + +These are recorded because they materially affect how the platform should be used, but no ADR resolves them — they are not engineering problems: + +- Who owns/governs the OSPI standard itself (foundation, consortium, single company)? +- The relationship to GS1/GTIN — complement, integrate, or compete? (`gtin` values are checksum-validated against GS1's published algorithm, but this does **not** confirm registration with GS1 — see [ADR-005](/architecture/adr/adr-005-gs1-relationship).) +- Legal review of Digital Product Passport claims against the actual EU ESPR delegated acts. + +Treat these as blocking for anything beyond internal prototyping, particularly once real money moves through the Ordering module. + +See also: [Domain model](/architecture/domain-model). diff --git a/docs/cli/getting-started.mdx b/docs/cli/getting-started.mdx deleted file mode 100644 index 69c7c8fe2d..0000000000 --- a/docs/cli/getting-started.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -sidebar_position: 2 -description: >- - Get started with Dyte CLI using our comprehensive guide. Follow step-by-step - instructions for a smooth development. ---- - -# Getting started - -The Dyte CLI needs a little bit of work to get started. We're working on -reducing the amount of effort required, but for now you'll have to do the -following. - -## Manual Configuration - -1. Authorize yourself with the Dyte Dev Portal. This allows you to access all - the organizations that you belong to from the CLI. - -```shell -dyte auth login -``` - -2. Select the organization you want to run commands in the context of. - -```bash -dyte auth org -``` - -## Programmatic Configuration - -If browser-based authorization via `dyte auth login` is not suitable, you can alternatively authorize the Dyte CLI programmatically using the following command: - -```bash -dyte config creds --org-id YOUR_DYTE_ORG_ID --api-key API_KEY_OF_THE_ORG -``` - -This method is especially beneficial for automating workflows, such as integrating CI/CD pipelines in custom plugin development. - -Note that this is an organization-specific authorization. As a result, commands like dyte auth org will not function. However, you can still perform organization-specific operations, including publishing plugins and creating meetings. - -## Usage - -### General - -The Dyte CLI is -[POSIX compliant](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html). -This means in general, a command has the following format: - -```shell -dyte [subcommand] [options] -``` - -### Getting help - -The `dyte help` command shows you a comprehensive list of all the top-level -commands and a short description of what each command does. You can run -`dyte help` to know more about the command and its subcommands (if -any). - -```shell -dyte help -``` - -![cli-help](/static/cli/cli-help.png#terminal) _Dyte help screen_ - -### Switching organizations - -Simply run the following command again to switch to another organization. The -list of organizations can be filtered by name or ID. - -```shell -dyte auth org -``` - - - CLI Getting started - - diff --git a/docs/cli/installation.mdx b/docs/cli/installation.mdx deleted file mode 100644 index 92b7528f70..0000000000 --- a/docs/cli/installation.mdx +++ /dev/null @@ -1,28 +0,0 @@ ---- -sidebar_position: 1 -slug: / -description: >- - Learn about Dyte's Command Line Interface (CLI) and its powerful commands. - Streamline your workflow with our CLI tools. ---- - -# Dyte CLI - -The Dyte CLI is a unified utility that helps you manage Dyte services for your -organization(s) directly from your command line. - -## Installation - -You can install the CLI from the NPM registry using `npm` or `yarn`. - -```bash npm2yarn -npm install -g @dytesdk/cli -``` - - - CLI Dyte CLI - - diff --git a/docs/cli/meetings.mdx b/docs/cli/meetings.mdx deleted file mode 100644 index e897e216e2..0000000000 --- a/docs/cli/meetings.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -sidebar_position: 3 -description: >- - "Explore Dyte CLI's capabilities for managing meetings from the command line. - Learn how to create ---- - -# Meetings - -The CLI allows you to perform some basic functions with meetings, including -creating a meeting and viewing its sessions. - -More functionality will make its way here soon. - -## Creating a meeting - -Creating a meeting is as simple as running: - -```shell -dyte meetings create -``` - -![cli-meetings-create](/static/cli/cli-meetings-create.png#terminal) _Creating a -meeting_ - -## Viewing a meeting's sessions - -You can view a meeting's sessions by running: - -```shell -dyte meetings info -``` - -![cli-meetings-info](/static/cli/cli-meetings-info.png) _Viewing meeting info_ - - - CLI Meetings - - diff --git a/docs/cli/plugins.mdx b/docs/cli/plugins.mdx deleted file mode 100644 index 91bd0f0666..0000000000 --- a/docs/cli/plugins.mdx +++ /dev/null @@ -1,181 +0,0 @@ ---- -sidebar_position: 5 -description: >- - Extend the functionality of Dyte CLI with our plugin documentation. Discover a - variety of plugins and integration steps. ---- - -# Plugins - -You may create, manage, and host your own custom plugins with the help of the -`dyte plugins` subcommand. - -## Overview - -You can publish plugins for your organization on Dyte. We manage only the -client-side code for plugins, the backend for a plugin (if any) **will not** be -hosted by Dyte. Therefore, server-side templating is not supported in plugins. - -Every functional Dyte plugin requires a configuration file, which is named -`dyte-config.json` by default. This contains details about the plugin such as -the `pluginId`, `name`, `version`, `description`, etc. This file is -auto-generated upon running the `dyte plugins create` command, which is -explained in detail later. You can know more about the `dyte-config.json` file -in the description for the `publish` subcommand. - -## TL;DR - -In order to create and publish a plugin, you need to do the following. - -1. Run `dyte plugins create`, and enter the details. This should create a - `dyte-config.json` file. -2. Copy the `dyte-config.json` into the folder containing the `index.html` file - of your plugin. If you're using a frontend library like React, this would be - the build folder. -3. Change your directory to the folder containing the `index.html` and - `dyte-config.json` files. -4. Modify the `dyte-config.json` file to update the version and the files that - will be included and excluded while generating the plugin archive. -5. Run `dyte plugins publish -l` or `dyte plugins publish --latest` to upload - and serve your plugin on Dyte. - -## Usage - -### Creating a plugin - -You can use the following subcommand to create a new Dyte plugin. This sends an -API request to register a new plugin under your organization. Additionally, it -creates a file called `dyte-config.json`, which is essential for the plugin to -function properly. - -```shell -dyte plugins create -``` - -### Listing your plugins - -The `list | ls` subcommand can be used to list the names and IDs of all plugins -that were created by your organization. - -```shell -dyte plugins ls -``` - -### Viewing plugin details - -The `describe` subcommand logs the details of a plugin. The `pluginId` is -required. - -```shell -dyte plugins describe -p -``` - -### Deleting a plugin - -With the help of the `delete | rm` subcommand, you can delete an existing -plugin. The `pluginId` is required. - -```shell -dyte plugins rm -p -``` - -### Updating a plugin - -To update the details of a plugin, you can use the `update` subcommand. The -`pluginId` is required. - -```shell -dyte plugins update -p -``` - -## Releasing plugins - -### Packaging a plugin - -In order to publish a plugin, a `.dyt` archive is created with all the -client-side source code and the `dyte-config.json` file. This file is required -by the `publish` subcommand, which also internally generates this archive. You -can use the `pack` command if you just want to generate the archive, but do not -want to publish it. - -```shell -dyte plugins pack -``` - -### Publishing a plugin - -The `publish` subcommand handles publishing a plugin on Dyte. You must run this -command in the directory where the `dyte-config.json` and the `index.html` files -of your plugin are present. In the `dyte-config.json`, you can also describe the -files you want to include in and exclude from the archive. In order to publish a -plugin, you must follow these steps: - -1. Copy the `dyte-config.json` (which was created by the `dyte plugins create` - command) into the folder containing your `index.html` file. In case you're - using a frontend library like React, you must copy `dyte-config.json` into - the `build` folder. -2. Update the plugin version in `dyte-config.json`. -3. Run `dyte plugins publish -l`. - -The `-l` or `--latest` option is **required** if you want your plugin's new -version to be deployed. If the `-l` option is absent, the new version of the -plugin will be saved in our storage bucket, but it will not be served. In that -case, an older version (if any) will be served. You may not use the `-l` option -if you want to upload your code to the storage bucket but you do not want to -serve it. - -```shell -dyte plugins publish -l -``` - -### Unpublishing a plugin - -The `unpublish` subcommand can be used if you want do not want your plugin to -show up on the Dyte plugins panel. The `pluginId` is required. - -```shell -dyte plugins unpublish -``` - -:::caution Note that the plugin and its code will not be deleted, it will just -not show up on the panel (and thus become unusable). ::: - -## Versioning - -The `version` subcommand has 3 subcommands of its own. The `pluginId` is -required for each of these subcommands. - -### List - -`version list` can be used to list all versions of your Dyte plugin. - -```shell -dyte plugins version list -``` - -### Delete - -`version delete` can be used to delete a particular version of your Dyte plugin. -This accepts the version you want to delete with the help of the `-v` option. - -```shell -dyte plugins version delete -v -``` - -### Change latest - -`version change-latest` can be used to change the version of your plugin that is -served. This accepts the version you want to serve with the help of the `-v` -option. - -```shell -dyte plugins version change-latest -v -``` - - - CLI Plugins - - diff --git a/docs/cli/recording.mdx b/docs/cli/recording.mdx deleted file mode 100644 index 5065ba0ea4..0000000000 --- a/docs/cli/recording.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -sidebar_position: 4 -description: >- - Understand how to enable and configure recording features using Dyte CLI. - Capture and review meeting content seamlessly. ---- - -# Recordings - -The CLI lets you start, stop, view and configure meeting recordings. - -## Configuration - -Set up your recording configuration by running: - -```shell -dyte recordings config -``` - -You will be asked a series of questions about the configuration you'd like for -your recordings. - -:::tip If you don't know the answers to these questions, it's fine to skip this -step. Our defaults are robust! ::: - -## Controlling recordings - -### Starting - -You can start recording a meeting by running: - -```shell -dyte recordings start -``` - -### Stopping - -You can end a recording by running: - -```shell -dyte recordings stop -``` - -:::tip The meeting ID can be a UUID, eg: `f68a59ca-5e43-4267-8982-bfcabcab88a3` -or it can be the simple ID used by our meetings in the browser, eg: -`aoiler-tlmbwi` ::: - -## Viewing recordings - -### Listing - -You can view a list of all recordings for a meeting by running: - -```shell -dyte recordings list -``` - -### Getting a particular recording - -You can view the details for a particular recording by running - -```shell -dyte recordings get -``` - -:::tip The `dyte recordings stop` command will helpfully output the complete -command you need to retrieve that particular recording! ::: - - - CLI Recordings - - diff --git a/docs/cli/webhooks.mdx b/docs/cli/webhooks.mdx deleted file mode 100644 index 56e6d8dcf1..0000000000 --- a/docs/cli/webhooks.mdx +++ /dev/null @@ -1,27 +0,0 @@ ---- -sidebar_position: 6 -description: >- - Leverage Dyte CLI's webhook capabilities for real-time event notifications. - Integrate webhooks into your applications. ---- - -# Webhooks - -Instead of polling our APIs, you can use webhooks to get information as it is -produced. - -## Creating a webhook - -Run the following command to create a webhook. - -```shell -dyte webhooks create -``` - - - CLI Webhooks - - diff --git a/docs/community-packages/device-emulator/_category_.json b/docs/community-packages/device-emulator/_category_.json deleted file mode 100644 index fcf1753adf..0000000000 --- a/docs/community-packages/device-emulator/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "position": 2, - "label": "Device Emulator", - "collapsible": true, - "collapsed": true -} diff --git a/docs/community-packages/device-emulator/examples.mdx b/docs/community-packages/device-emulator/examples.mdx deleted file mode 100644 index 85a452a907..0000000000 --- a/docs/community-packages/device-emulator/examples.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -sidebar_position: 2 -keywords: - - opensource -description: >- - Explore examples and use cases for Dyte's community package device emulator. - Learn how to effectively use device emulation for testing and development. ---- - -# Examples - -Here is a demo that will help you demonstrate the usage of device emulator [https://device-emulator.vercel.app](https://device-emulator.vercel.app). - -You can find the source code for this here [https://github.com/dyte-io/device-emulator/tree/main/examples](https://github.com/dyte-io/device-emulator/tree/main/examples). - - - Community Packages Examples - - diff --git a/docs/community-packages/device-emulator/intro.mdx b/docs/community-packages/device-emulator/intro.mdx deleted file mode 100644 index 36b1559011..0000000000 --- a/docs/community-packages/device-emulator/intro.mdx +++ /dev/null @@ -1,170 +0,0 @@ ---- -slug: /device-emulator -sidebar_position: 1 -keywords: - - opensource ---- - -# Introduction - -For a product, integration tests are one of the crucial part that improves quality & stability. For a WebRTC based solution like Dyte, having integration tests that can test multi-user call with Audio/Video on is necessary. - -For an end user, sharing a camera & mic is easy. For this, browsers expose APIs such as enumerateDevices & getUserMedia on MediaDevices interface, on which user interfaces can be built easily. - -Access to camera & mic prompts the users to allow permissions to do so. This works great as long as an end-user is using the product and actively allowing permissions and selecting devices, However this makes it impossible to write integration tests because for integration tests there is no active user and you need to somehow allow permissions programmatically which at the moment of writing this README is not reliably supported in modern tools like Playwright. - -Even if we can somehow allow permissions, The next set of questions would be: What would the video & audio feed look like? Can we customize the feed? Can we use the feed to detect delays between a video feed producer and consumer? How do we test multiple devices? How do we test media ejection on the fly? How do we test addition of a new device? - -Dyte's Device Emulator is a solution that answers all these questions and provides a easier way to mimic, add, remove devices & their feed. - -## Installation - - - - -To set up device-emulator add the following script tags inside -the `` tag. - -```html - - -``` - - - - -```bash -npm install @dytesdk/device-emulator -``` - -use the package like below - -```js -import '@dytesdk/device-emulator'; - -// use the device emulator methods -``` - - - - - -```bash -yarn add @dytesdk/device-emulator -``` - -use the package like below - -```js -import '@dytesdk/device-emulator'; - -// use the device emulator methods -``` - - - - -## API reference - -### Add a virtual device - -```js {1} -const virtualDeviceID = navigator.mediaDevices.addEmulatedDevice('videoinput'); - -// get a media track from the virtual device -navigator.mediaDevices - .getUserMedia({ - video: { - deviceId: { - exact: virtualDeviceID, - }, - }, - }) - .then((mediaStream) => { - const video = document.querySelector('video'); - video.srcObject = mediaStream; - video.onloadedmetadata = () => { - video.play(); - }; - }) - .catch((err) => { - // always check for errors at the end. - console.error(`${err.name}: ${err.message}`); - }); -``` - -### Remove virtual device - -```js -navigator.mediaDevices.removeEmulatedDevice(deviceId); -``` - -### Fail the device - -You can use `failDevice` method to test scenarios where the devices stops working abruptly. - -```js {4} -const virtualDeviceID = navigator.mediaDevices.addEmulatedDevice('videoinput'); - -// Stop the device from working -navigator.mediaDevices.failDevice(virtualDeviceID, true); - -navigator.mediaDevices - .getUserMedia({ - video: { - deviceId: { - exact: virtualDeviceID, - }, - }, - }) - .then((mediaStream) => { - // This will not work - const video = document.querySelector('video'); - video.srcObject = mediaStream; - video.onloadedmetadata = () => { - video.play(); - }; - }) - .catch((err) => { - // catch `NotReadableError` thrown from the device - console.error(`${err.name}: ${err.message}`); - }); -``` - -Executing the `failDevice` after getting the tracks will stop the active tracks. - -### Resume the device - -Use `failDevice` method to make the device work normally - -```js -navigator.mediaDevices.failDevice(deviceId, false); -``` - -### Silence the tracks - -Generate tracks that are silent - -```js -navigator.mediaDevices.silenceDevice(deviceId, true); -``` - -### Unmute the tracks from the device - -Remove the silence check on the device - -```js -navigator.mediaDevices.silenceDevice(deviceId, false); -``` - - - Community Packages Introduction - - diff --git a/docs/community-packages/index.mdx b/docs/community-packages/index.mdx deleted file mode 100644 index 2fbc972953..0000000000 --- a/docs/community-packages/index.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -slug: / -sidebar_position: 1 -sidebar_class_name: community_packages_sidebar_index -description: >- - Explore Dyte's community packages and their documentation. Discover additional - functionalities contributed by the community. ---- - -# Community packages - -At Dyte, we believe in empowering developers to create innovative solutions that go beyond our own use cases. By opening access to some of our resources, we aim to foster creativity, collaboration, and technological advancement across diverse domains. - -We are excited to see the new applications and platforms that you will build using our technology. - - - - Opensource - - - Opensource - - - - - - Community Packages Community packages - - diff --git a/docs/community-packages/socketio-client/_category_.json b/docs/community-packages/socketio-client/_category_.json deleted file mode 100644 index 38e76085ce..0000000000 --- a/docs/community-packages/socketio-client/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "position": 3, - "label": "SocketIO Client", - "collapsible": true, - "collapsed": true -} diff --git a/docs/community-packages/socketio-client/emitting.mdx b/docs/community-packages/socketio-client/emitting.mdx deleted file mode 100644 index 15b544a04e..0000000000 --- a/docs/community-packages/socketio-client/emitting.mdx +++ /dev/null @@ -1,100 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Events - -There are several ways to send events between the server and the client. - -## Basic emit - -_Client_ - -```kotlin -socket.emit("hello", "world"); -``` - -_Server_ - -```js -io.on('connection', (socket) => { - socket.on('hello', (arg) => { - console.log(arg); // world - }); -}); -``` - -## Listen for events - -_Server_ - -```js -io.on('connection', (socket) => { - socket.emit('hello', 'world'); -}); -``` - -_Client_ - -```kotlin -socket.onEvent("hello") { args -> - println(args[0]); // world -} -``` - -## Acknowledgements - -Events are great, but in some cases you may want a more classic request-response API. In Socket.IO, this feature is named acknowledgements. - -You can add a callback as the last argument of the `emit()`, and this callback will be called once the other side acknowledges the event: - -### From client to server - -_Client_ - -```kotlin - -socket.emit("update item", 1, fun(data: ArrayList) { - val response = data[0] as JSONObject; - println(response.getString("status")); // "ok" -}) -``` - -_Server_ - -```js -io.on('connection', (socket) => { - socket.on('update item', (arg1, arg2, callback) => { - console.log(arg1); // 1 - console.log(arg2); // { name: "updated" } - callback({ - status: 'ok', - }); - }); -}); -``` - -### From server to client - -_Server_ - -```js -io.on('connection', (socket) => { - socket.emit('hello', 'please acknowledge', (response) => { - console.log(response); // prints "hi!" - }); -}); -``` - -_Client_ - -```kotlin -socket.on("hello") { args, ack -> - println(args[0]); // "please acknowledge" - ack?.invoke("hi!"); -} -``` - - - Community Packages Events - diff --git a/docs/community-packages/socketio-client/initialization.mdx b/docs/community-packages/socketio-client/initialization.mdx deleted file mode 100644 index ce3a96a4ec..0000000000 --- a/docs/community-packages/socketio-client/initialization.mdx +++ /dev/null @@ -1,294 +0,0 @@ ---- -sidebar_position: 2 -keywords: - - opensource ---- - -# Initialization - -**Table of content** - - - -## Creation of a Socket instance - -```kotlin -val uri = "https://example.com/socket.io/" - -val socket = IO.socket(endpoint) -``` - -The [scheme](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax) part of the URI is also mandatory. Both `ws://` and `http://` can be used interchangeably. - -```kotlin -val socket = IO.socket("https://example.com/socket.io/"); // OK -val socket = IO.socket("wss://example.com/socket.io/"); // OK, similar to the example above -val socket = IO.socket("192.168.0.1:1234/socket.io/"); // NOT OK, missing the scheme part -``` - -### Connection - -```kotlin - -socket.onConnect { println("connected") } - -socket.onDisconnect { println("disconnected") } - -socket.connect() - -// socket.disconnect() - -``` - -### Custom Path - -It is the name of the path that is captured on the server side. - -The server and the client values must match: - -_JavaScript Server_ - -```js -import { Server } from 'socket.io'; - -const io = new Server(8080, { - path: '/my-custom-path/', -}); - -io.on('connection', (socket) => { - // ... -}); -``` - -_Client_ - -```kotlin -val uri = "https://example.com/my-custom-path/" - -val socket = IO.socket(endpoint) -``` - -:::info - -Please note that this is different from socket-io-client-java works where the path in the URI represents the [Namespace](https://socket.io/docs/v4/namespaces/). - -::: - -### Query Params - -Additional query parameters (then found in `socket.handshake.query` object on the server-side). - -_Client_ - -```kotlin -val uri = "https://example.com/socket.io/?x=42" - -val socket = IO.socket(endpoint) -``` - -_JavaScript Server_ - -```js -io.on('connection', (socket) => { - console.log(socket.handshake.query); // prints { x: '42', EIO: '4', transport: 'polling' } -}); -``` - -:::info - -Please note that this is different from socket-io-client-java works where the query params are passed in IO.Options `query` - -::: - -## Default values - -```kotlin -val options = IOOptions().apply { - forceNew = false - multiplex = true - - upgrade = true - rememberUpgrade = true - extraHeaders = null - - reconnection = true - reconnectionAttempts = 5 - reconnectionDelay = 1000 - reconnectionDelayMax = 5000 - randomizationFactor = 0.5 - timeout = 20000 - } -``` - -## Description - -### IO factory options - -These settings will be shared by all Socket instances attached to the same Manager. - -#### `forceNew` - -Default value: `false` - -Whether to create a new Manager instance. - -A Manager instance is in charge of the low-level connection to the server (established with HTTP long-polling or WebSocket). It handles the reconnection logic. - -A Socket instance is the interface which is used to sends events to — and receive events from — the server. It belongs to a given [namespace](https://socket.io/docs/v4/namespaces). - -A single Manager can be attached to several Socket instances. - -The following example will reuse the same Manager instance for the 3 Socket instances (one single WebSocket connection): - -```kotlin -val socket = IO.socket("https://example.com"); // the main namespace -val productSocket = IO.socket("https://example.com", namespace = "product"); // the "product" namespace -val orderSocket = IO.socket("https://example.com", namespace = "order"); // the "order" namespace -``` - -The following example will create 3 different Manager instances (and thus 3 distinct WebSocket connections): - -```kotlin -val options = IOOptions().apply { - forceNew = true - } - -val socket = IO.socket("https://example.com", options); // the main namespace -val productSocket = IO.socket("https://example.com", options, namespace = "product"); // the "product" namespace -val orderSocket = IO.socket("https://example.com", options, namespace = "order"); // the "order" namespace -``` - -#### `multiplex` - -Default value: `true` - -The opposite of `forceNew`: whether to reuse an existing Manager instance. - -### Low-level engine options - -#### `transports` - -Default value: `listOf("polling", "websocket")` - -The low-level connection to the Socket.IO server can either be established with: - -- HTTP long-polling: successive HTTP requests (`POST` for writing, `GET` for reading) -- [WebSocket](https://en.wikipedia.org/wiki/WebSocket) - -The following example disables the HTTP long-polling transport: - -```kotlin -val options = IOOptions().apply { - transports = listOf("websocket") - } -val socket = IO.socket("https://example.com", options); -``` - -Note: in that case, sticky sessions are not required on the server side (more information [here](https://socket.io/docs/v4/using-multiple-nodes/)). - -#### `upgrade` - -Default value: `true` - -Whether the client should try to upgrade the transport from HTTP long-polling to something better. - -#### `rememberUpgrade` - -Default value: `false` - -If true and if the previous WebSocket connection to the server succeeded, the connection attempt will bypass the normal upgrade process and will initially try WebSocket. A connection attempt following a transport error will use the normal upgrade process. It is recommended you turn this on only when using SSL/TLS connections, or if you know that your network does not block websockets. - -#### `extraHeaders` - -Default value: - - -Additional headers (then found in `socket.handshake.headers` object on the server-side). - -Example: - -_Client_ - -```kotlin -val options = IOOptions.apply { - extraHeaders = mapOf("authorization", "bearer 1234") - } - -val socket = IO.socket("https://example.com", options); -``` - -_JavaScript Server_ - -```js -io.on('connection', (socket) => { - console.log(socket.handshake.headers); // prints { accept: '*/*', authorization: 'bearer 1234', connection: 'Keep-Alive', 'accept-encoding': 'gzip', 'user-agent': 'okhttp/3.12.12' } -}); -``` - -### Manager options - -These settings will be shared by all Socket instances attached to the same Manager. - -#### `reconnection` - -Default value: `true` - -Whether reconnection is enabled or not. If set to `false`, you need to manually reconnect. - -#### `reconnectionAttempts` - -Default value: `Integer.MAX_VALUE` - -The number of reconnection attempts before giving up. - -#### `reconnectionDelay` - -Default value: `1000` - -The initial delay before reconnection in milliseconds (affected by the [randomizationFactor](#randomizationfactor) value). - -#### `reconnectionDelayMax` - -Default value: `5000` - -The maximum delay between two reconnection attempts. Each attempt increases the reconnection delay by 2x. - -#### `randomizationFactor` - -Default value: `0.5` - -The randomization factor used when reconnecting (so that the clients do not reconnect at the exact same time after a server crash, for example). - -Example with the default values: - -- 1st reconnection attempt happens between 500 and 1500 ms (`1000 * 2^0 * ()`) -- 2nd reconnection attempt happens between 1000 and 3000 ms (`1000 * 2^1 * ()`) -- 3rd reconnection attempt happens between 2000 and 5000 ms (`1000 * 2^2 * ()`) -- next reconnection attempts happen after 5000 ms - -#### `timeout` - -Default value: `20000` - -The timeout in milliseconds for each connection attempt. - -### Socket options - -These settings are specific to the given Socket instance. - -#### Multiplexing - -The client does support multiplexing: this allows to split the logic of your application into distinct modules, while using one single WebSocket connection to the server. - -Reference: https://socket.io/docs/v4/namespaces/ - -```kotlin -val socket = IO.socket("https://example.com"); // the main namespace -val productSocket = IO.socket("https://example.com", namespace="product"); // the "product" namespace -val orderSocket = IO.socket("https://example.com", namespace="order"); // the "order" namespace - -// All 3 sockets share the same Manager -``` - - - Community Packages Initialization - diff --git a/docs/community-packages/socketio-client/intro.mdx b/docs/community-packages/socketio-client/intro.mdx deleted file mode 100644 index d47c26ddf0..0000000000 --- a/docs/community-packages/socketio-client/intro.mdx +++ /dev/null @@ -1,77 +0,0 @@ ---- -slug: ./ -sidebar_position: 1 -keywords: - - opensource ---- - -# Overview - -This is a [Socket.IO](https://socket.io/) Client Library for Kotlin (Multiplatform), which is ported from the official socket.io-client-java It is compatible with Socket.IO server 3.x / 4.x - -**Targets** - -- Android / JVM -- iOS / macOS -- Linux - -## Installation - - - - - -Use our maven central hosted archive in your gradle - -```gradle -implementation("io.dyte:socketio-android:$version") -``` - - - - - -1. Add 'DyteSocketIO' to your Podfile. - -``` -pod 'DyteSocketIO' , '1.25.2' -``` - -2. Install the pod. - -```sh -pod install -``` - - - - - -// TODO - - - - - -Use our maven central hosted archive in your gradle - -```gradle -implementation("io.dyte:socketio-jvm:$version") -``` - - - - - -Use our maven central hosted archive in your gradle - -```gradle -implementation("io.dyte:socketio:$version") -``` - - - - - - Community Packages Overview - diff --git a/docs/flutter-core/chat/_category_.json b/docs/flutter-core/chat/_category_.json deleted file mode 100644 index e96d76d691..0000000000 --- a/docs/flutter-core/chat/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 6, - "label": "Chat", - "collapsible": true -} diff --git a/docs/flutter-core/chat/introduction.mdx b/docs/flutter-core/chat/introduction.mdx deleted file mode 100644 index 018ab1db55..0000000000 --- a/docs/flutter-core/chat/introduction.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Introducing chat -description: >- - Learn the fundamentals of integrating chat functionality into your Flutter - app. Follow our documentation for a smooth introduction to Dyte's chat - features. -sidebar_position: 1 -tags: - - flutter-core - - chat ---- - -# Introduction - -The meeting chat object is stored in `dyteClient.chat`, which has methods for -sending and receiving messages. There are 3 types of messages that can be sent -in chat - `text`, `images`, and `files`. - -The `dyteClient.chat.messages` array contains all the messages that have been -sent in the chat. This is an array of objects, where each object is of type -`DyteChatMessage`. - -The `DyteChatMessage` class has the following properties: - -- `userId` : UserID of the sender. -- `displayName` : Display name of the sender. -- `read` : Boolean whether the message is read or not. -- `pluginId` : Plugin ID of the message. -- `time` : Time at which the message was sent. It returns a `String` in milliseconds since epoch format. -- `type` : `DyteMessageType` for type of message being sent (whether - `DyteMessageType.text`, `DyteMessageType.image` or `DyteMessageType.file`). - -There are 3 message classes that extends `DyteChatMessage`, and each has some -extra property in addition to `DyteChatMessage` properties: - -- `DyteTextMessage` -- `DyteImageMessage` -- `DyteFileMessage` - -#### DyteTextMessage: - -- `message`: Text message sent. - -#### DyteImageMessage: - -- `link`: URL of the image sent. - -#### DyteFileMessage: - -- `name`: Name of the file to be sent. -- `link`: URL of the file sent. -- `size`: Size of the file in bytes. - - - Flutter Core Introducing chat - - diff --git a/docs/flutter-core/chat/receiving-chat-messages.mdx b/docs/flutter-core/chat/receiving-chat-messages.mdx deleted file mode 100644 index d0b60a0e4e..0000000000 --- a/docs/flutter-core/chat/receiving-chat-messages.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Receiving chat messages -description: >- - Understand how to receive chat messages in your Flutter app using Dyte's - features. Follow our documentation for effective implementation. -sidebar_position: 3 -tags: - - flutter-core - - chat ---- - -# Receive a Chat Message - -To receive chat messages, implement the `onChatUpdates(...)` method from callback `DyteChatEventsListener`. You can subscribe to these events by calling the following: - -```dart - -class ChatEventsListener with DyteChatEventsListener { - - ... - - @override - void onChatUpdates(List messages) { - messages.map((msg) { - switch (msg.type) { - case DyteMessageType.text: - print((msg as DyteTextMessage).displayName); - print((msg).message); - - // Show message/return state to show text message UI. - - break; - case DyteMessageType.image: - print((msg as DyteImageMessage).displayName); - print((msg).link); - - // Show message/return state to show image message UI. - break; - case DyteMessageType.file: - print((msg as DyteFileMessage).name); - print((msg).link); - print((msg).size); - // Show message/return state to show file message UI. - - break; - } - }); - } - - void onNewChatMessage(DyteChatMessage message) { - // your code to handle new chat message - } - ... -} -``` - -```dart -dyteClient.addChatEventsListener(ChatEventsListener()); -``` - -In this context, `messages` refers to a list of all the chat messages in the meeting. The type of message used is `DyteChatMessage`, which was introduced earlier in the [introduction](./introduction.mdx) to Chat topic. - -Whenever a chat message is received, the `dyteClient.chat.messages` list is automatically updated. - - - Flutter Core Receiving chat messages - - diff --git a/docs/flutter-core/chat/sending-a-chat-message.mdx b/docs/flutter-core/chat/sending-a-chat-message.mdx deleted file mode 100644 index 4dc3991e7a..0000000000 --- a/docs/flutter-core/chat/sending-a-chat-message.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Sending a chat message -description: >- - Learn how to send chat messages in your Flutter app with Dyte's features. - Follow our documentation for seamless implementation. -sidebar_position: 2 -tags: - - flutter-core - - chat ---- - -# Sending a chat message - -As mentioned in [introduction](./introduction), there are 3 types of chat -messages - `text`, `images`, and `file`. There are methods in `DyteChat` to send -a message of each type. - -## Send a text message - -To send a text message, the `dyteClient.chat.sendTextMessage(message)` method can be -used. It take a string `message` as an argument and sends it to the room. - -```dart -final message = "Is this the real life?"; -dyteClient.chat.sendTextMessage(message); -``` - -## Send an image - -You can send an image with the help of `dyteClient.chat.sendImageMessage()` and -sends it to the participants in the meeting. - -```dart -final filePath = "file_path_of_image"; -final fileName = "file_name"; -dyteClient.chat.sendImageMessage(filePath, fileName); -``` - -## Send a file - -Sending a file is quite similar to sending an image. The only difference is that -when you send an image, a preview will be shown in the meeting chat, which is -not the case for sending files. That being said, an image can be sent as a file -too using `dyteClient.chat.sendFileMessage()`. - -```dart -final filePath = "file_path_of_image"; -final fileName = "file_name"; -dyteClient.chat.sendFileMessage(filePath, fileName); -``` - - - Flutter Core Sending a chat message - - diff --git a/docs/flutter-core/host-actions.mdx b/docs/flutter-core/host-actions.mdx deleted file mode 100644 index 33b222a485..0000000000 --- a/docs/flutter-core/host-actions.mdx +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: Host Actions & Permissions -description: >- - Understand the host actions you can perform as per preset permissions set in Developer Portal & integration in Dyte's Flutter SDK. -sidebar_position: 13 -tags: - - flutter-core - - permissions - - host actions ---- - -# Host Actions & Permissions - -Based on your peer preset permissions you can perform certain host actions in Dyte's Flutter SDK. As you follow through this page, you'll know what the host actions are and how to implement it based on permissions. - -## Permissions - -Permissions are set in the Developer Portal. Based on the permissions set, you can perform certain host actions. To access permissions, use `dyteClient.permissions` method. The permissions are as follows: - -### Media Permissions - -Media permissions (audio, video and screenshare) can be accessed using `dyteClient.permissions.media`. You can get audio, video and screenshare permissions. Audio and screenshare permissions are of `DyteMediaPermission` type & video permissions are of `DyteVideoPermissions` type. - -`DyteMediaPermission` is a enum & can have 3 values: - -- `DyteMediaPermission.allowed` : If the user is allowed to access the media. -- `DyteMediaPermission.canRequest` : If the user can request access to the media. Ex: If a user is off stage but can request to come on stage in case of webinar. -- `DyteMediaPermission.notAllowed` : If the user is not allowed to access the media. - -`DyteVideoPermissions` have 3 properties: - -- `permission`: It is of `DyteMediaPermission` type & stores the video permission. -- `frameRate` : It is of type `int` & stores the frame rate of the video. -- `quality` : It is of type `string` and stores the quality of the video. - -```dart - -// To get audio permission -final DyteMediaPermission audioPermission = dyteClient.permissions.media.audio; - -// To get video details -final DyteVideoPermissions videoPermission = dyteClient.permissions.media.video; - -// To get screenshare permission -final DyteMediaPermission screensharePermission = dyteClient.permissions.media.screenshare; -``` - -### Waiting Room Permissions - -Waiting room permissions are of type `WaitingRoomPermissions` contains 2 properties: - -- `canAcceptRequests`: It is of type `bool` & tells if the user can accept/reject waiting requests of participants present in waiting room. -- `type`: It is of enum type `WaitingRoomType` and is useful to know where client can directly enter meeting room or need permission from host. - -`WaitingRoomType` can have 4 values: - -- `WaitingRoomType.skip` : If the user can directly enter the meeting room. -- `WaitingRoomType.onAccept` : If the user needs permission from host to enter the meeting room. -- `WaitingRoomType.skipOnAccept` : If the user needs permission from host just the first time while trying to join meeting room. -- `WaitingRoomType.skipOnPriviligedUserEntry` : If the user can enter once there's a privileged user is present in the room. - -```dart -final WaitingRoomPermissions waitingRoomPermissions = dyteClient.permissions.waitingRoom; -``` - -### Chat Permissions - -Chat permissions are of type `ChatPermissions` contains 2 properties: - -- `canSendText`: It is of type `bool` & tells if the user can send messages in the chat. -- `canSendFiles`: It is of type `bool` & tells if the user can send images/files in the chat. - -```dart -final ChatPermissions chatPermissions = dyteClient.permissions.chat; -``` - -### Host Permissions - -Host permissions are of type `HostPermissions` contains 5 properties: - -- `canMuteAudio`: It is of type `bool` & tells if the user can mute audio of other participants in the room. -- `canDisableVideo`: It is of type `bool` & tells if the user can disable other participant's video. -- `canKickParticipant`: It is of type `bool` & tells if the user can kick other participants from the room. -- `canPinParticipant`: It is of type `bool` & tells if the user can pin other participants in the room. -- `canTriggerRecording`: It is of type `bool` & tells if the user can trigger recording in the room. - -```dart -final HostPermissions hostPermissions = dyteClient.permissions.host; -``` - -### Poll Permissions - -Poll permissions are of type `PollPermissions` contains 3 properties: - -- `canCreate`: It is of type `bool` & tells if the user can create polls in the meeting room. -- `canVote`: It is of type `bool` & tells if the user can vote in the polls. -- `canView`: It is of type `bool` & tells if the user can view the polls. - -```dart -final PollPermissions pollPermissions = dyteClient.permissions.poll; -``` - -### Plugin Permissions - -Plugin permissions are of type `PluginPermissions` contains 2 properties: - -- `canLaunch`: It is of type `bool` & tells if the user can launch plugins in the meeting room. -- `canClose`: It is of type `bool` & tells if the user can close plugins in the meeting room. - -```dart -final PluginPermissions pluginPermissions = dyteClient.permissions.plugin; -``` - -### Livestream Permissions - -Livestream permissions are of type `LivestreamPermissions` contains the following property: - -- `canLivestream`: It is of type `bool` & tells if the user can start/stop livestreaming. - -```dart -final LivestreamPermissions livestreamPermissions = dyteClient.permissions.livestream; -``` - -### Miscellaneous Permissions - -Miscellaneous permissions are of type `MiscellaneousPermissions` with following property: - -- `canEditDisplayName`: It is of type `bool` & tells if the user can edit their display name. - -## Host Actions - -A peer can execute following actions if their preset allows it. To access preset permissions, see the permissions section [above](#permissions): - -### Pin/Unpin participant - -You can pin & unpin a participant in a meeting room. Use `pinParticipant(participant)` and `unpinParticipant()` method to pin & unpin the `participant` respectively. The `participant` is of `DyteMeetingParticipant`type. - -```dart - -// Pin the `participant` -dyteClient.hostActions.pinParticipant(participant); - -// Unpin pinned participant -dyteClient.hostActions.unpinParticipant(); -``` - -### Kick participant(s) - -You can kick a participant or kick all participants from a meeting using `kickParticipant(participant)` and `kickAll()` method respectively. The `participant` is of `DyteMeetingParticipant` type. - -```dart - -// Kick the `participant` -dyteClient.hostActions.kickParticipant(participant); - -// Kick all participants -dyteClient.hostActions.kickAll(); -``` - -### Accept/Reject waitlisted request - -You can accept or reject a waitlisted request using `acceptWaitlistedParticipant(participant)` and `rejectWaitlistedParticipant(participant)` method respectively. The `participant` is of `DyteMeetingParticipant` type. - -```dart - -// Accept the waitlisted `waitlistedParticipant` -dyteClient.hostActions.acceptWaitlistedParticipant(waitlistedParticipant); - -// Reject the waitlisted `waitlistedParticipant` -dyteClient.hostActions.rejectWaitlistedParticipant(waitlistedParticipant); -``` - -### Mute participant(s) audio - -You can mute a participant's audio or mute all participants' audio using `disableParticipantAudio(participant)` and `muteAllAudios()` method respectively. The `participant` is of `DyteMeetingParticipant` type. - -```dart - -// Mute the `participant` audio -dyteClient.hostActions.disableParticipantAudio(participant); - -// Mute all participants' audio -dyteClient.hostActions.muteAllAudios(); - -``` - -### Disable participant(s) video - -You can disable a participant's video or disable all participants' video using `disableParticipantVideo(participant)` and `disableAllVideos()` method respectively. The `participant` is of `DyteMeetingParticipant` type. - -```dart - -// Disable the `participant` video -dyteClient.hostActions.disableParticipantVideo(participant); - -// Disable all participants' video -dyteClient.hostActions.disableAllVideos(); -``` diff --git a/docs/flutter-core/introduction.mdx b/docs/flutter-core/introduction.mdx deleted file mode 100644 index f7185b51de..0000000000 --- a/docs/flutter-core/introduction.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Introduction -sidebar_position: 3 -sidebar_class_name: module-seperation ---- - -import ProductSection from '/docs/partials/_product-section.mdx'; - -# Introduction - -The Dyte Core SDK is designed to provide you with an easy way to incorporate live video, voice, livestream and chat capabilities into your Android apps. The Core SDK acts as a data-only layer. It provides simple APIs offering high-level primitives and abstracting away complex media and networking optimizations. - -## Why Core SDK? - -The Core SDK was developed with a user-friendly approach to eliminate the complexity of managing streams. Unlike traditional -SDKs that require knowledge of WebRTC functioning, Dyte's Core SDK provides a simple API that abstracts out the complexity, -making it easier for developers to use. For instance, enabling video with Dyte's Core SDK is as easy as calling -`dyteMobileClient.localUser.enableVideo()`. - -## Utility Modules - -The Core SDK includes various modules for in-call utilities like chat, polls, and recording that enable building a UI on top of -it. The following are the core SDK modules: - -- **meeting.localUser**: This consists of properties and methods corresponding to the current (local) user, such as enabling or disabling their audio and video, getting a list of media devices or changing the device, or sharing your mobile screen. -- **meeting.participants**: Use this module to get useful information about the other participants that are present in the meeting. A host can use this module for access control. For example, the host can mute or kick a participant. -- **meeting.chat**: It provides the methods to integrate chat features such as sending/receiving text, images, and files. -- **meeting.polls**: Meetings can have polls. This module lets you perform actions related to polls, that is create and manage - a poll within a meeting. -- **meeting.recording**: When a meeting needs to be recorded, this module can be used. It lets you start or stop a recording, - and get the current status of an ongoing recording. -- **meeting.meta**: This object consists of all the metadata related to the current meeting, such as the title, the timestamp - of when it started, and more. -- **meeting.plugins**: Provides the list of available plugins and active plugins. Use this module to enable or disable plugins as needed. - - - Flutter Core Introduction - diff --git a/docs/flutter-core/livestream.mdx b/docs/flutter-core/livestream.mdx deleted file mode 100644 index 1ef7a72b96..0000000000 --- a/docs/flutter-core/livestream.mdx +++ /dev/null @@ -1,145 +0,0 @@ ---- -title: Livestreaming -sidebar_position: 7 -tags: - - flutter-core - - livestream ---- - -## Introduction - -- Livestreaming is often used for events, such as concerts, conferences, and sports games, as well as for online classes, gaming, and social media platforms. -- Dyte uses LHLS to deliver low latency one way streams. -- The Interactive Livestream product delivers interactivity via chat, polls, reactions etc. -- Viewer can also be pulled in the livestream by the host using Stage Management APIs [ref: [here](/flutter-core/stage-management/introduction)]. - -This section will guide you through the process of integrating the livestreaming feature into your product. - -## Properties - -### Playlist URL: - -Livestream playlist URL is accessible via `url` property of `DyteLivestreamData` instance: - -If the livestream is not active for current room, it'll return `null`. - -```dart -final String? url = dyteClient.livestream.data.url; -``` - -### Livestream Status: - -The current livestream status can be accessed from `state` property of the `DyteLivestreamData` instance: - -```dart -final DyteLivestreamStatus? status = dyteClient.livestream.data.state; -``` - -There can be 6 livestream statuses: - -- _DyteLivestreamStatus.none_ : When livestream is not active. -- _DyteLivestreamStatus.starting_ : When livestream is starting. -- _DyteLivestreamStatus.started_ : When livestream is going on. -- _DyteLivestreamStatus.ending_ : When livestream is ending. -- _DyteLivestreamStatus.ended_ : When livestream ended. -- _DyteLivestreamStatus.errored_ : When livestream encountered an error. - -### Viewer Count - -The current viewer count for livestream can be accessed via `viewerCount`property of `DyteLivestreamData` instance. - -```dart -final int? viewerCount = dyteClient.livestream.data.viewerCount; -``` - -### Room Name - -The room name of current livestream can be accessed via `roomName` property of `DyteLivestreamData` instance. - -```dart -final String? roomName = dyteClient.livestream.data.roomName; -``` - -## Methods - -Use the following methods to start and stop livestreaming. - -:::tip Note - -You'll be able to start/stop livestream if your preset allows it. - -::: - -### Start Livestream - -You can start a livestream with the following method: - -```dart -dyteClient.livestream.start(); -``` - -### Stop Livestream - -You can stop a livestream with the following method: - -```dart -dyteClient.livestream.stop(); -``` - -## LivestreamView - -LivestreamView widget returns the view for the current livestream. It takes `String? url` as an argument of the livestream which is accessible via `dyteMobileClient.livestream.url` method or `Future getUrl()` method on `DyteLivestream` instance, which returns `null` if there's no livestream url. - -```dart -final livestreamView = LivestreamView( - url: dyteMobileClient.livestream.url, -); - -// or - -Future fetchLivestreamView () async { - String? url = await dyteMobileClient.livestream.getUrl(); - if (url != null) { - return LivestreamView( - url: url, - ); - } else { - return Container(); - } - - final livestreamView = await fetchLivestreamView(); -} -``` - -## Events - -You need to subscribe to LivestreamEventListener to be able to listen livestream events. You can do it as follows: - -```dart -class LivestreamListener implements DyteLivestreamEventsListener{ - ... - void onLiveStreamStateUpdate(DyteLivestreamData data) { - // Handle livestream state update - } - ... -} - -dyteClient.addLivestreamEventsListener(LivestreamListener()); -``` - -Here are a list of events the livestream listener emits: - -| **Event** | **Description** | -| ------------------------- | ------------------------------------------------------------------------------------------------------------ | -| `onLiveStreamStateUpdate` | Emitted when a livestream state is updated. It contains the updated livestream state in the payload. | -| `onViewerCountUpdated` | Emitted when a viewer count of a livestream is updated. It contains the updated viewer count in the payload. | -| `onStageCountUpdated` | Emitted when a participants on stage changes. It contains the updated viewer count in the payload. | -| `onLiveStreamStarting` | Emitted when livestream state is updated to _DyteLivestreamStatus.Starting_ | -| `onLiveStreamStarted` | Emitted when livestream state is updated to _DyteLivestreamStatus.Started_ | -| `onLiveStreamEnding` | Emitted when livestream state is updated to _DyteLivestreamStatus.Ending_ | -| `onLiveStreamEnded` | Emitted when livestream state is updated to _DyteLivestreamStatus.Ended_ | -| `onLiveStreamErrored` | Emitted when livestream state is updated to _DyteLivestreamStatus.Errored_ | - - - Flutter Core Livestreaming - diff --git a/docs/flutter-core/local-user/_category_.json b/docs/flutter-core/local-user/_category_.json deleted file mode 100644 index f02d560bef..0000000000 --- a/docs/flutter-core/local-user/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 3, - "label": "Local User", - "collapsible": true -} diff --git a/docs/flutter-core/local-user/events.mdx b/docs/flutter-core/local-user/events.mdx deleted file mode 100644 index 19cbc110ec..0000000000 --- a/docs/flutter-core/local-user/events.mdx +++ /dev/null @@ -1,236 +0,0 @@ ---- -title: Events -description: >- - Explore events related to local user interactions in Flutter. Follow our - documentation for effective handling of local user events in your app. -sidebar_position: 2 -tags: - - flutter-core - - local-user - - self ---- - -# Local User - Events - -You can subscribe to various local user events: - -- To subscribe, pass the instance of `LocalUserListener` class created below - to `addSelfEventsListener()` method of `dyteClient` instance as follows: - -```dart {2} -dyteClient.addSelfEventsListener(LocalUserListener()); -``` - -- Implement `DyteSelfEventsListener` to a class say `LocalUserListener`, and - listen to event from `DyteSelfEventsListener` by overriding them. This class - can be user to manage your state in the application. - -```dart -class LocalUserListener implements DyteSelfEventsListener { - - ... - - @override - void onAudioDevicesUpdated() { - /// code to handle onAudioDevicesUpdated() event - } - - ... -} -``` - -### Video update - -Triggered when the user starts / stops the video using `enableVideo()`/ -`disableVideo()`, or host turns-off the video. - -```dart -class LocalUserListener implements DyteSelfEventsListener { - - ... - - @override - void onVideoUpdate(bool videoEnabled) { - if(isVideoEnabled){ - // Video is enabled, other users can see the video. - } else { - // Video is disabled, others users can't see the video. - } - - // or alternatively you can pass the bool through state as demonstrated in example app. - } - - ... -} -``` - -### Audio update - -Triggered when the user starts / stops the audio using `enableAudio()`/ -`disableAudio()`, or host mutes the audio. - -```dart - -class LocalUserListener implements DyteSelfEventsListener { - - ... - - @override - void onAudioUpdate(bool audioEnabled) { - if (audioEnabled) { - // audio is enabled, and other participants in room can hear local user - } else { - // audio is disabled, and other participants in room can not hear local user. - } - - // or alternatively you can pass the bool through state as demonstrated in example app. - } - ... -} -``` - -### Proximity changed - -Triggered by any change in proximity, such as when the device is brought near or moved away from an earpiece, which triggers the display to turn on or off. - -```dart - -class LocalUserListener implements DyteSelfEventsListener { - - ... - - @override - void onProximityChanged(bool isNear) { - if (isNear) { - // Display should be turned off, as user might be speaking through ear piece - } else { - // Display should be tunred on, as user might be looking at display and listening through speaker/earphones. - } - } - ... -} -``` - -### Waitlist status - -When the waiting room feature is enabled for a meeting, you can use the `onWaitListStatusUpdate()` callback function to receive updates on waiting room status changes. - -```dart - -class LocalUserNotifier implements DyteSelfEventsListener { - - ... - - @override - void onWaitListStatusUpdate(DyteWaitListStatus waitListStatus) { - // DyteWaitListStatus is an enum with the following values: - // if `DyteWaitListStatus.none`, user is not on the waitlist - // if `DyteWaitListStatus.waiting`, user is on the waitlist - // if `DyteWaitListStatus.accepted`, user has been accepted in the meeting. - // if `DyteWaitListStatus.rejected`, user has been rejected from the meeting. - } - - ... -} -``` - -## Local user removed - -When the local user is removed from the meeting, the `onRemovedFromMeeting()` callback is triggered. - -```dart - -class LocalUserNotifier implements DyteSelfEventsListener { - - ... - - @override - void onRemovedFromMeeting() { - // Display an alert to the user indicating that they are no longer in the meeting. - } - - ... -} -``` - -## Screenshare callbacks for local user - -```dart - -class LocalUserNotifier implements DyteSelfEventsListener { - - ... - - - @override - void onScreenShareStartFailed(String reason) { - // screenshare failed to start - } - - @override - void onScreenShareStarted() { - // screenshare started presenting in the meeting - } - - @override - void onScreenShareStopped() { - // screenshared stopped by the local user - } - - ... -} - -``` - -## Change in audio/video source - -Whenever user changes audio/video source using `setAudioDevice(DyteAudioDevice)` and `setVideoDevice(DyteVideoDevice)` respectively [ref: [here](/flutter-core/local-user/manage-media-devices)], `onAudioDevicesUpdated()` and `onVideoDevicesChanged()` are triggered respectively. - -```dart - -class LocalUserNotifier implements DyteSelfEventsListener { - - ... - - @override - void onAudioDevicesUpdated() { - // triggered on successful execution of `setAudioDevice(DyteAudioDevice)` - } - - @override - void onVideoDeviceChanged(DyteVideoDevice videoDevice) { - // triggered on successful execution of `setVideoDevice(DyteVideoDevice)` - } - - ... - -} - -``` - -## Process message within the room - -Manage messages within the room using `onRoomMessage(String message)` callback. - -```dart - -class LocalUserNotifier implements DyteSelfEventsListener { - - ... - - @override - void onRoomMessage(String type, Map payload) { - // triggered when a message is sent within the room. - } - - ... -} -``` - - - Flutter Core Events - - diff --git a/docs/flutter-core/local-user/introduction.mdx b/docs/flutter-core/local-user/introduction.mdx deleted file mode 100644 index 5459c8008b..0000000000 --- a/docs/flutter-core/local-user/introduction.mdx +++ /dev/null @@ -1,142 +0,0 @@ ---- -title: Introduction -description: >- - Learn about the local user concept in Flutter with Dyte's documentation. - Follow our guide for a smooth introduction and integration. -sidebar_position: 1 -tags: - - flutter-core - - local-user - - self ---- - -# Introduction - Local User - -The local user in the `dyteMobileClient` object has a set of methods and properties related to media controls. These can be accessed using the identifier localUser. - -## Properties - -Here is a list of properties that local user provides: - -- `id`: ID of the participant pertaining to local user. (aka `peerId`) -- `userId`: The `userId` of the participant. -- `name`: Contains Name of the local user. -- `picture`: Link to the url of the participant -- `clientSpecificId`: Identifier provided by the developer while adding the - participant. -- `flags`: Type `ParticipantFlags` and it contains two boolean values - - `recorder`: if the participant is recorder - - `hidden`: if the participant is hidden -- `audioEnabled`: Boolean value indicating if the audio is currently enabled. -- `videoEnabled`: Boolean value indicating if the video is currently enabled. - -Local user properties can be fetched via `localUser` getter on the `dyteClient`. - -```dart -final selfUser = dyteClient.localUser; -``` - -## Change default audio / video settings - -By default as soon as you join the meeting, Dyte SDK will produce your video and -audio streams. To change this behaviour, use the `audioEnabled` & `videoEnabled` -parameter - -```dart {4,5} -final meetingInfo = DyteMeetingInfoV2( - roomName = MEETING_ROOM_NAME, - authToken = AUTH_TOKEN, - audioEnabled = false, - videoEnabled = true -); -``` - -## Turn on audio/video tracks after initializing the client - -If audio and video tracks are disabled during the `DyteMobileClient` -initialization process. You can setup the audio and video tracks by simply -calling `enableAudio()` and `enableVideo()` like below: - -```dart -dyteClient.localUser.enableAudio(); -dyteClient.localUser.enableVideo(); -``` - -## Change the name of the local user - -Change the user's name by calling `setDisplayName` method. The changed name will -reflect across all participants ONLY if the change happens before joining the -meeting. This is only possible when the user has the permission to change the name. - -```dart -if(dyteClient.permissions.miscellaneous.canEditDisplayName) -{ - dyteClient.localUser.setDisplayName("New Name"); -} -``` - -## Mute/Unmute microphone - -```dart -// Mute Audio -dyteClient.localUser.disableAudio(); - -// Unmute Audio -dyteClient.localUser.enableAudio(); - -// Get current status -final isAudioEnabled = dyteClient.localUser.audioEnabled; -``` - -## Enable/Disable camera - -```dart -// Disable Video -dyteClient.localUser.disableVideo(); - -// Enable Video -dyteClient.localUser.enableVideo(); - -// Get current status -final isVideoEnabled = dyteClient.localUser.videoEnabled; -``` - -## Switch camera between sources - -```dart -// switch camera -dyteClient.localUser.switchCamera(); -``` - -## Enable / Disable Screen share - -:::tip Note - -### Android - -To use screenshare on Android devices running Android API 14 and above, you will need to declare the following permission in your app's AndroidManifest.xml. - -`` - -Adding above permission will require you to do extra steps on Google Play Console while submitting the app. For more information please refer [this](https://support.google.com/googleplay/android-developer/answer/13392821?hl=en#declare). - -### iOS - -Refer to screenshare setup for iOS [here](./screen-share-iOS-guide.mdx) -::: - -```dart -// Enable Screenshare -dyteClient.localUser.enableScreenshare(); - -// Disable Screenshare -dyteClient.localUser.disableScreenshare(); -``` - - - Flutter Core Introduction - - diff --git a/docs/flutter-core/local-user/manage-media-devices.mdx b/docs/flutter-core/local-user/manage-media-devices.mdx deleted file mode 100644 index fe6357a28f..0000000000 --- a/docs/flutter-core/local-user/manage-media-devices.mdx +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Manage Media Devices -description: >- - Understand how to manage media devices for local users in Flutter. Follow - Dyte's documentation for effective management of media devices. -sidebar_position: 3 -tags: - - flutter-core - - local-user - - self - - self events ---- - -# Manage Media Devices - -To get the list of media devices that are currently being used, you can -use the following methods: - -### For audio devices: - -To get audio devices, use `getAudioDevices()` method on `localUser` object. It -returns `List` object, where each object in the list refers to -an audio device of the system. - -```dart -// Get all audio devices -final audioDevices = await dyteClient.localUser.getAudioDevices(); -``` - -### For video devices - -To get audio devices, use `getVideoDevices()` method on `localUser` object. It -returns `List` object, where each object in the list refers to -an video device of the system. - -```dart -// Get all video devices -final videoDevices = await dyteClient.localUser.getVideoDevices(); -``` - -## Set Audio Device - -To set an active audio device, you can call `setAudioDevice()` method. This -takes a `DyteAudioDevice` object that needs to be set active for audio. - -```dart -await dyteClient.localUser.setAudioDevice(device); -``` - -## Set Video Device - -To set a active video device, you can call `setVideoDevice()` method. This takes -a `DyteVideoDevice` object that needs to be set active for video. - -```dart -await dyteClient.localUser.setVideoDevice(device); -``` - - - Flutter Core Manage Media Devices - - diff --git a/docs/flutter-core/local-user/manage-permissions.mdx b/docs/flutter-core/local-user/manage-permissions.mdx deleted file mode 100644 index cdff163500..0000000000 --- a/docs/flutter-core/local-user/manage-permissions.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Media Permissions -description: >- - Learn how to manage permissions in your Flutter application for a secure and - controlled user experience with Dyte Docs. -sidebar_position: 5 -tags: - - flutter-core - - local-user - - self - - self events ---- - -# Media Permissions - -To get media permissions (audio/video) for localUser we can do as follows - -```dart -final isCameraPermissionGranted - = dyteMobileClient.localUser.permissions.isCameraPermissionGranted; -final isMicrophonePermissionGranted - = dyteMobileClient.localUser.permissions.isMicrophonePermissionGranted; -``` - -Similarly to listen to callbacks regarding media permissions once user joins -the meeting - -```dart - -class LocalUserNotifier implements DyteSelfEventsListener { - - ... - @override - void onMeetingRoomJoinedWithoutCameraPermission() { - // when meeting room is joined without camera permission - } - - override - void onMeetingRoomJoinedWithoutMicPermission() { - // when meeting room is joined without microphone permission - } - - ... -} -``` - - - Flutter Core Media Permissions - - diff --git a/docs/flutter-core/local-user/screen-share-iOS-guide.mdx b/docs/flutter-core/local-user/screen-share-iOS-guide.mdx deleted file mode 100644 index 40ac00ec4b..0000000000 --- a/docs/flutter-core/local-user/screen-share-iOS-guide.mdx +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Sharing screen on iOS -sidebar_position: 12 -tags: - - flutter-core ---- - -This document explains how to setup screen sharing on a Flutter iOS App using Dyte SDK - -## Overview - -1. Add a new Broadcast Upload Extension to your project. -2. Setup app groups -3. Have your SampleHandler class initialize DyteBroadcastHandler and proxy a few methods. -4. Update Info.plist - -### Add a new Broadcast Upload Extension to your project. - -Add a Broadcast Upload Extension through `File` -> `New` -> `Target`. -Choose `iOS` -> `Broadcast Upload Extension` and fill out the required information for your extension and click `Finish`. - -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/ios-setup-0.png) -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/ios-setup-01.png) - -### Setup app groups - -Add your extension to an app group by going to your extension's target in the project; in the Signings & Capabilities tab, click the + button in the top left and add App Groups. If you haven't done so already, add App Groups to your main app as well, ensuring that the App Group identifier is the same for both. - -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/ios-setup-03.png) -![meeting UI screenshot with labeled parts](/static/mobile/0.x.x/ios-setup-1.png) - -### Setup SampleHandler - -- Place the `DyteSampleHandler.swift` file present [here](https://github.com/dyte-io/iOS-ScreenShare/blob/main/DyteSampleHandler.swift) in the `ios//` folder in your flutter project. - -- Create a `SampleHandler.swift` file or replace the contents of the file if already present in the same `ios//` to look something like this: - -```swift - -import ReplayKit - -class SampleHandler: DyteSampleHandler { - -} - -``` - -### Modify Info.plist - -Make sure **both of them** (App and Extension Info.plist) contains these keys - -``` - RTCAppGroupIdentifier - (name of the group) - RTCScreenSharingExtension - (Bundle Identifier) -``` - -![Info.plist screenshot](/static/mobile/0.x.x/ios-setup-info.png) - -### Start the Screenshare - -Call the method `enableScreenshare()` - -``` -dyteClient.localUser.enableScreenshare() -``` - -![screenshot](/static/mobile/0.x.x/ios-setup-app.png) -![screenshot](/static/mobile/0.x.x/ios-setup-demo.png) - - - Flutter Core Sharing screen on iOS - diff --git a/docs/flutter-core/participants/_category_.json b/docs/flutter-core/participants/_category_.json deleted file mode 100644 index 1506bb147c..0000000000 --- a/docs/flutter-core/participants/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 7, - "label": "Remote Participants", - "collapsible": true -} diff --git a/docs/flutter-core/participants/events.mdx b/docs/flutter-core/participants/events.mdx deleted file mode 100644 index 30c6e60f5b..0000000000 --- a/docs/flutter-core/participants/events.mdx +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Participant Events -description: >- - Explore events related to participants in Flutter. Follow our documentation - for effective handling of participant events in your Flutter app. -sidebar_position: 3 -tags: - - flutter-core - - participants - - self ---- - -## Participant joined - -Trigger an event when any participant joins the meeting. - -```dart -class ParticipantsEventListener extends DyteParticipantEventsListener { - ... - @override - void onParticipantJoin(DyteJoinedMeetingParticipant participant) { - // your code here to handle new participant - } - ... -} -``` - -## Participant updated - -Trigger an event when any participant update in meeting. For example, when a participant changes their name. - -```dart -... - -@override -void onParticipantUpdated(DyteJoinedMeetingParticipant participant) { - // your code here to handle new participant -} - -... -``` - -## Participant left - -Trigger an event when any participant leaves the meeting. - -```dart -... - -@override -void onParticipantLeave(DyteJoinedMeetingParticipant participant) { - // your code here to handle participant left from meeting -} - -... -``` - -## Video update - -Trigger an event when any participant starts or stops the video. - -```dart -... - -@override -void onVideoUpdate({ - required bool videoEnabled, - required DyteJoinedMeetingParticipant participant, -}) { - // your code here to handle participant video toggle update -} - -... -``` - -## Audio update - -Triggers an event when a participant starts or stops the audio. - -```dart -... - -@override -void onAudioUpdate({ - required bool audioEnabled, - required DyteJoinedMeetingParticipant participant, -}) { - // your code here to handle participant audio toggle update -} - -... -``` - -## Screen share update - -Triggers an event when a participant starts or stops screen share. - -```dart -... - -@override -void onScreenShareStarted(DyteJoinedMeetingParticipant participant) { - /// handle screen share started of `DyteJoinedMeetingParticipant` participant -} - -@override -void onScreenShareEnded(DyteJoinedMeetingParticipant participant) { - /// handle screen share ended of `DyteJoinedMeetingParticipant` participant -} - -... -``` - -## Screen share participants list - -Obtain the list of the screenshare participants, using the `participants.screenshares` function which returns a `DyteRoomParticipants` object that maintains a record of participants who have joined, pinned, and screenshared. This object updates with each `onUpdate` call. - -## Screen share view - -To get the screenshare widget, create an object of the `ScreenshareView` class. - -```dart -// To show screenshare of a participant -final screenshareView = ScreenShareView(meetingParticipant); -``` - -## Active Participants changed - -This event is triggered when the active participant changes, for example, when the user moves to the next page of participants. It provides the list of participants on the current page. - -```dart -... - -@override -void onActiveParticipantsChanged(List active) { - /// handle active participants changed -} - -... -``` - -Other events: - -| **Event** | **Description** | -| ------------------------ | ------------------------------------------------------------------------------------------ | -| `onActiveSpeakerChanged` | Triggered when active speaker is change. Updated active speaker is sent as payload. | -| `onNoActiveSpeaker` | Triggered when there is no active participant. | -| `onParticipantPinned` | Triggered when a participant is pinned. Pinned participant details is sent as payload. | -| `onParticipantUnpinned` | Triggered when a participant is unpinned. Unpinned participant details is sent as payload. | - - - Flutter Core Participant Events - - diff --git a/docs/flutter-core/participants/introduction.mdx b/docs/flutter-core/participants/introduction.mdx deleted file mode 100644 index 25b552fbbc..0000000000 --- a/docs/flutter-core/participants/introduction.mdx +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: Introduction -description: >- - Learn about participants in Flutter and how to integrate participant features - with Dyte's documentation. Follow our guide for a smooth introduction. -sidebar_position: 1 -tags: - - flutter-core - - participants - - participant ---- - -# Introduction - Participants - -The data regarding all meeting participants is stored under `participants` -objects of `DyteMobileClient()` instance. To get all the objects and methods -related to participants: - -```dart - final participants = dyteClient.participants; -``` - -Use the methods and events to consume the participants data. For example, to get -all the participants who joined the meeting: - -```dart -// get all joined participants -final joinedParticipants = dyteClient.participants.joined; -``` - -The `dyteClient.participants` object has the following properties. - -- `waitlisted`: A list that contains all the participants waiting to join the - meeting. All elements of this array are of type _DyteWaitlistedParticipant_. -- `joined`: A list that contains all the participants who have joined the - meeting. All elements of this array are of type _DyteJoinedMeetingParticipant_. -- `active`: A list that contains all the participants except the local user who - are supposed to be on the screen at the moment. All elements of this array are of type _DyteJoinedMeetingParticipant_. -- `screenshares`: A list that contains all the participants who have shared - screen in the meeting. All elements of this array are of type _DyteJoinedMeetingParticipant_. -- `pinned`: Pinned participant of the meeting. It can be nullable as well. This is of type _DyteJoinedMeetingParticipant_. - -Therefore, if you were to make a grid of participants, you'd use the `active` -list, but to display all participants in the meeting you'd use the `joined` -list. - -- `dyteClient.pinned` is of type `DyteJoinedMeetingParticipant`. -- All participant in each of the `joined`, `waitlisted`, `active`, and - `screenshares` list is of type `DyteJoinedMeetingParticipant`. - -## Grid info for the room - -`DyteGridPagesInfo` object is designed to help you with pagination decisions. It -is returned with `onGridUpdated` event. It contains the following properties: - -- `currentPageNumber`: Int, returns the current page number (currently displayed - by the client). -- `pageCount`: Int, max pages possible with current number of participants. -- `isNextPagePossible`: bool, if the next page of participants is available. -- `isPreviousPagePossible`: bool, if previous page of participants is available. - -## Video view - -To access the video view of a participant, create an object of the `VideoView` class. - -```dart -// To show the video of a participant -final videoView = VideoView(meetingParticipant: participant); -// To get video view for a local user -final selfVideoView = VideoView(isSelfTrue: true); -``` - -## Move between pages in paginated mode - -The `setPage(int pageNumber)` method allows you to switch between pages of -participants present in the meeting. - -_Note: Indexing of page starts from 0_ - -```dart -// switch to page 1 -dyteClient.setPage(1); -``` - -## Broadcast Message to all participants - -```dart -// payload is a Map -const payload = { - "message": "Hello World", -}; -dyteClient.broadcastMessage("type", payload); -``` - -## Video update for all participants - -Triggered when any participant of the meeting enable/disable it's video. It also passes the participant details who has updated it's video status. - -```dart -class ParticipantNotifier implements DyteParticipantEventsListener{ - - ... - @override - void onVideoUpdate( - bool videoEnabled, - DyteJoinedMeetingParticipant participant, - ) { - // - } - ... -} - - -``` - -## Audio update - -Triggered when any participant of the meeting enable/disable it's audio. It also passes the participant details who has updated it's audio status. - -```dart - -class ParticipantNotifier implements DyteParticipantEventsListener{ - - ... - @override - void onAudioUpdate( - bool audioEnabled, - DyteJoinedMeetingParticipant participant, - ) { - // - } - ... -} - -``` - - - Flutter Core Introduction - - diff --git a/docs/flutter-core/participants/participant-object.mdx b/docs/flutter-core/participants/participant-object.mdx deleted file mode 100644 index 7e852e7c77..0000000000 --- a/docs/flutter-core/participants/participant-object.mdx +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Participant Object -description: >- - Understand the participant object and its integration in Flutter. Follow - Dyte's documentation for effective implementation in your app. -sidebar_position: 2 -tags: - - flutter-core - - participants - - participant ---- - -# The Participant object - -The `DyteMeetingParticipant` object consists of all the information related to a -particular participant. For instance, it contains a participants -video/audio/screenshare stream, and the participant's name. It also contains -state variables that indicate whether a participant's camera is on or off, and -whether they are muted or unmuted. - -The participant object has the following properties. - -- `id`: The `participantId` of the participant (aka `peerId`). -- `userId`: The `userId` of the participant. -- `name`: Contains participant's name. -- `picture`: Contains participant's picture (if any). -- `isHost`: Boolean value indicating whether this user is host of current - meeting or not. -- `clientSpecificId`: Arbitrary ID that can be set to identify the participant. -- `videoEnabled`: Set to true if the participant's camera is on. -- `audioEnabled`: Set to true if the participant is unmuted. - -You can subscribe to various participants events. For subscribing: - -- Implement `DyteParticipantEventsListener` to a class say - `ParticipantEventListener`, and listen to event from - `DyteParticipantEventsListener` by overriding them. This class can be user to - manage your state in the application. - -```dart -class ParticipantEventListener extends DyteParticipantEventsListener { - - @override - void onAudioUpdate({ - required bool audioEnabled, - required DyteJoinedMeetingParticipant participant, - }) { - /// handle audioUpdate of `DyteJoinedMeetingParticipant` participant - } - - @override - void onActiveSpeakerChanged(DyteJoinedMeetingParticipant participant) { - /// handle active speaker changing to `DyteJoinedMeetingParticipant` participant - } - - @override - void onNoActiveSpeaker() { - /// handle no active speaker - } - - @override - void onParticipantPinned(DyteJoinedMeetingParticipant participant) { - /// handle pinning of `DyteJoinedMeetingParticipant` participant - } - - - @override - void onParticipantUnpinned(DyteJoinedMeetingParticipant participant) { - /// handle unpinning the pinned participant - } - - @override - void onScreenShareStarted(DyteJoinedMeetingParticipant participant) { - /// handle screen share started of `DyteJoinedMeetingParticipant` participant - } - - @override - void onScreenShareEnded(DyteJoinedMeetingParticipant participant) { - /// handle screen share ended of `DyteJoinedMeetingParticipant` participant - } - - @override - void onVideoUpdate({ - required bool videoEnabled, - required DyteJoinedMeetingParticipant participant, - }) { - /// handle videoUpdate of `DyteJoinedMeetingParticipant` participant - } - -} -``` - -- Now to subscribe, pass the instance of `DyteParticipantEventsListener` class - created above to `addParticipantEventsListener()` method of `dyteClient` - instance as follows: - -```dart {2} -dyteClient.addParticipantEventsListener(ParticipantEventListener()); -``` - -## Audio/Video updates for participant - -```dart - -... - -@override -void onVideoUpdate(bool videoEnabled) { - if (videoEnabled) { - // video is enabled, and other participants in room can see local user - } else { - // video is disabled, and other participants in room can not see local user. - } -} - -@override -void onAudioUpdate({ - required bool audioEnabled, - required DyteJoinedMeetingParticipant participant, -}) { - if (audioEnabled) { - // audio is enabled, and other participants in room can hear local user - } else { - // audio is disabled, and other participants in room can not hear local user. - } -} - -... - -``` - -## Host controls methods - -If you (the local user) have the relevant permissions in the meeting, you can -disable a participant's video/audio streams, or even remove them from the -meeting. - -```dart -final participant = meeting.participants.joined.first; - -// To disable a participant's video stream -participant.disableVideo(); - -// To disable a participant's audio stream -participant.disableAudio(); - -// To kick a participant from the meeting -participant.kick(); - -// to pin a participant in a meeting -participant.pin(); - -``` - - - Flutter Core The participant object - - diff --git a/docs/flutter-core/participants/remote-participants.mdx b/docs/flutter-core/participants/remote-participants.mdx deleted file mode 100644 index 445ab6d84b..0000000000 --- a/docs/flutter-core/participants/remote-participants.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Participant Types -description: 'Events, methods and data pertaining to meeting participants.' -sidebar_position: 1 -slug: /participants/ -tags: - - flutter-core - - participants ---- - -# Participant Types - -The data regarding all meeting participants is stored under `meeting.participants`. These **does not** include the local user. Use the methods and events to consume the participants data. For example, to get all the participants who joined the meeting: - -```kotlin -// get all joined participants -final List joined = dyteMobileClient.participants.active; - -// get active participants -final List active = dyteMobileClient.participants.active; -``` - -The `dyteMobileClient.participants` object has the following **lists** of participants - -- **joined**: A list that contains all the participants who are currently in the meeting - except the local user -- **waitlisted**: A list that contains all the participants waiting to join the - meeting. -- **active**: A list that contains all the participants, **including** the local user whose media is subscribed to i.e participants who are supposed to be on the screen at the moment, including the local user. -- **pinned**: A list that contains all the pinned participants of the meeting. -- **screenShares**: A list that contains all the participants who are sharing their screen. - -Therefore if you were to make a video / audio grid of participants, you'd use the `active` list, but to display the list of all participants in the meeting you'd use the `joined` list. - -Each participant in each of the `joined`, `active`, `pinned` and `screenShares` list are of type `DyteJoinedMeetingParticipant`, `waitlisted` list is of type `DyteWaitlistedParticipant`. - - - Flutter Core Participants - diff --git a/docs/flutter-core/participants/waitlisted-participants.mdx b/docs/flutter-core/participants/waitlisted-participants.mdx deleted file mode 100644 index 6d5858edd6..0000000000 --- a/docs/flutter-core/participants/waitlisted-participants.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Waitlisted Participants -description: 'Events, methods and data to manage waiting room participants.' -sidebar_position: 4 -tags: - - flutter-core - - participants - - waitlisted - - waiting room ---- - -Participants in the waiting room are represented by `DyteWaitlistedParticipant` objects. If the local user has the permission to -accept waiting room requests (`dyteMobileClient.permissions.waitingRoom.canAcceptRequests` is _true_), you can manage pending waiting room requests, -accepting or rejecting them as needed. -You can access the list of waitlisted participants via the `dyteMobileClient.participants.waitlisted` property. - -**Note**: If the local user is not a host, `dyteMobileClient.participants.waitlisted` property returns an empty list. - -### Accepting Requests - -To accept a waiting room request, use the `acceptWaitListedRequest()` method on a `dyteMobileClient.hostActions` object: - -```dart -final waitlistedParticipant = dyteMobileClient.participants.waitlisted[0]; -dyteMobileClient.hostActions.acceptWaitlistedParticipant(waitlistedParticipant); -``` - -### Rejecting Requests - -To deny a waiting room request, use the `rejectWaitListedRequest()` method on a `dyteMobileClient.hostActions` object: - -```dart -final waitlistedParticipant = dyteMobileClient.participants.waitlisted[0]; -dyteMobileClient.hostActions.rejectWaitListedRequest(waitlistedParticipant); -``` - -### Waiting Room Events - -Implement the `DyteWaitlistEventsListener` interface to listen for events related to the waiting room: - -```kotlin -class WaitlistStatusNotifier extends DyteWaitingRoomEventsListener { - @override - void onWaitListParticipantJoined(DyteWaitlistedParticipant participant) { - // Triggered when a new participant joins the waiting room - } - - @override - void onWaitListParticipantAccepted(DyteWaitlistedParticipant participant) { - // Triggered when a waitlisted participant is accepted into the meeting - } - - @override - void onWaitListParticipantRejected(DyteWaitlistedParticipant participant) { - // Triggered when a waitlisted participant is denied entry into the meeting - } - - @override - void onWaitListParticipantClosed(DyteWaitlistedParticipant participant) { - // Triggered when a waitlisted participant leaves the waiting room - } -} - -dyteMobileClient.addWaitingRoomListener(WaitlistStatusNotifier()); -``` - - - Flutter Core Waitlisted Participants - diff --git a/docs/flutter-core/polls/_category_.json b/docs/flutter-core/polls/_category_.json deleted file mode 100644 index 3d3e19b415..0000000000 --- a/docs/flutter-core/polls/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 7, - "label": "Polls", - "collapsible": true -} diff --git a/docs/flutter-core/polls/creating-a-poll.mdx b/docs/flutter-core/polls/creating-a-poll.mdx deleted file mode 100644 index e78fcdffe6..0000000000 --- a/docs/flutter-core/polls/creating-a-poll.mdx +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Creating a poll -description: >- - Learn how to create polls in Flutter using Dyte's features. Follow our - documentation for seamless integration and effective poll creation. -sidebar_position: 2 -tags: - - flutter-core - - polls - - create ---- - -# Creating a poll - -A new poll can be created using the `create` method from the -[`dyteClient.polls`](./introduction) object. The `dyteClient.polls.create()` -method accepts the following params. - -| Param | Type | Default Value | Required | Description | -| --------- | -------- | ------------- | -------- | ------------------------------------------ | -| question | string | - | yes | The question that is to be voted for. | -| options | string[] | - | yes | The options of the poll. | -| anonymous | boolean | - | yes | If true, the poll votes are anonymous. | -| hideVotes | boolean | - | yes | If true, the votes on the poll are hidden. | - -The following snippet creates a poll where votes are anonymous. - -```dart -dyteClient.polls.create( - question: "Are you an early bird or a night owl?", - options: ["Early bird", "Night owl"], - anonymous: true, - hideVotes: false, -); -``` - - - Flutter Core creating/voting a poll - - diff --git a/docs/flutter-core/polls/introduction.mdx b/docs/flutter-core/polls/introduction.mdx deleted file mode 100644 index 264b97b039..0000000000 --- a/docs/flutter-core/polls/introduction.mdx +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Introduction -description: >- - Get started with Dyte's polling features in Flutter. Follow our documentation - for an introduction to polling capabilities in your app. -sidebar_position: 1 -tags: - - flutter-core - - polls ---- - -# Introduction - -The meetings polls object can be accessed using `dyteClient.polls`. It provides -methods to create polls, vote, and more. - -`dyteClient.polls.polls` returns an array of all polls created in a meeting, -where each element is an object of type `DytePollMessage`. - -```dart -class DytePollMessage { - final String id; - final String question; - final bool anonymous; - final bool hideVotes; - final String createdBy; - final List options; - final List voted; -} -``` - -The `DytePollMessage` class has the following properties: - -- `id`: Unique ID assigned to each poll. -- `question`: Question of the poll. -- `anonymous`: To hide the votes of each user even after completion. (false by - default) -- `hideVotes`: Hide votes until the voting is complete. (enabled if anonymous is - enabled) -- `createdBy`: Name of creator the poll. -- `options`: Array of `DytePollOption` object, contains all the options to the - poll question. - -The type `DytePollMessage` represents a poll in a Dyte meeting. It also -contains list of `DytePollOption` which are _options_ for a given poll. And every -`DytePollOption` has list of votes inside of it. Votes are objects of class -`DytePollVote` which internally has id and name of the vote. - -```dart -class DytePollOption( - final String text; // Option text. - final List votes; // List of votes. - final int count; // Number of votes. -); - -class DytePollVote { - final String id; // ID of the voter. - final String name; // Name of the voter. -} -``` - -### Listening to new polls in a meeting - -To be able to receive new poll messages you need to implement a method -`onPollUpdates()` method from callback `DytePollEventsListener`: - -To get poll updates, listen to `onPollUpdates()` callback: - -```dart - -class PollEventsListeners extends DytePollEventsListener { - - @override - void onPollUpdates(List polls) { - /// code to handle polls - } - - @override - void onNewPoll(DytePollMessage poll) { - /// code to handle new poll - } - -} - -``` - -You can subscribe to these events as follows: - -```dart -dyteClient.addPollEventsListener(PollEventsListeners()); -``` - - - Flutter Core Introduction - - diff --git a/docs/flutter-core/polls/voting-on-a-poll.mdx b/docs/flutter-core/polls/voting-on-a-poll.mdx deleted file mode 100644 index e0ec56ce0b..0000000000 --- a/docs/flutter-core/polls/voting-on-a-poll.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Voting on a poll -description: >- - Understand how users can vote on polls in Flutter with Dyte's features. Follow - our documentation for effective implementation in your app. -sidebar_position: 3 -tags: - - flutter-core - - polls - - votes ---- - -# Voting on a poll - -The `dyteClient.polls.vote()` method can be used to register a vote on a poll. -It accepts the following params. - -| Param | Type | Default Value | Required | Description | -| ----------- | --------------- | ------------- | -------- | ---------------------------------------------------------- | -| pollMessage | DytePollMessage | - | yes | Contains all the poll properties (question, options, etc.) | -| pollOption | DytePollOption | yes | yes | Option on which the user voted | - -The following snippet votes for the 1st option on the 1st poll created in the -meeting. - -```dart -final poll = dyteClient.polls.polls[0]; -final selectedPollOption = poll.options[0]; -dyteClient.polls.vote(poll, selectedPollOption); -``` - - - Flutter Core Voting on a poll - - diff --git a/docs/flutter-core/pre-call/1-media-preview.mdx b/docs/flutter-core/pre-call/1-media-preview.mdx deleted file mode 100644 index 1f99eb6f73..0000000000 --- a/docs/flutter-core/pre-call/1-media-preview.mdx +++ /dev/null @@ -1,123 +0,0 @@ -# Media Preview - -Before joining a meeting, users may want to preview and configure their media devices like camera, microphone, and audio output. -This section provides developers with the tools to prepare the media environment before joining a Dyte meeting. - -If you are using our UI Kits, this functionality can be handled by `DyteSetupScreen` or built with `DyteParticipantTile` widget. - -## Properties - -- `dyteMobileClient.localUser.audioEnabled`: A boolean value indicating if the audio is currently enabled. -- `dyteMobileClient.localUser.videoEnabled`: A boolean value indicating if the video is currently enabled. - -## Methods - -### Toggling Media - -The same methods used for controlling media during a meeting are also applicable for pre-call media configuration. - -**1. Mute/Unmute microphone** - -```dart -// Mute Audio -dyteMobileClient.localUser.disableAudio() - -// Unmute Audio -dyteMobileClient.localUser.enableAudio() - -``` - -```mermaid -flowchart LR - classDef basic fill:white; - - eam("enableAudio()") --> success("Gives onAudioUpdate callback to DyteSelfEventsListener") - - class eam basic; -``` - -
- -Anytime there is an update in the audio state of the local user, the Core SDK notifies the client through the `onAudioUpdate` callback -from `DyteSelfEventsListener`. Here's how you can register the listener: - -```dart -class SelfAudioNotifier extends DyteSelfEventsListener{ - override fun onAudioUpdate(bool audioEnabled) { - // Show local user's VideoView if video is enabled - } -} - -dyteMobileClient.addSelfEventsListener(SelfAudioNotifier()) -``` - -**2. Enable/Disable camera** - -```dart -// Disable Video -dyteMobileClient.localUser.disableVideo() - -// Enable Video -dyteMobileClient.localUser.enableVideo() -``` - -```mermaid -flowchart LR - classDef basic fill:white; - - eam("enableVideo()") --> success("Gives onVideoUpdate callback to DyteSelfEventsListener") - - class eam basic; -``` - -
- -Whenever there is an update in the video state of the local user, the Core SDK notifies the client through the `onVideoUpdate` callback -from `DyteSelfEventsListener`. Here's how you can register the listener: - -```dart -class SelfVideoNotifier extends DyteSelfEventsListener{ - override fun onVideoUpdate(bool videoEnabled) { - // Show local user's VideoView if video is enabled - } -} - -dyteMobileClient.addSelfEventsListener(SelfVideoNotifier()); -``` - -### Changing Media Device - -Media devices represent the hardware for the camera, microphone, and speaker devices. To get the list of media devices currently -available, use the following methods: - -```dart -// Get all audio devices -final audioDevices = dyteMobileClient.localUser.getAudioDevices() - -// Get all video devices -final videoDevices = dyteMobileClient.localUser.getVideoDevices() -``` - -To get the currently selected media device, use the following methods: - -```dart -// Get current audio device being used -final currentAudioDevice = dyteMobileClient.localUser.getSelectedAudioDevice() - -// Get current video device being used -final currentVideoDevice = dyteMobileClient.localUser.getSelectedVideoDevice() -``` - -Use these methods to create a UI that allows users to configure their media devices. When the user selects a device, use the below methods to set the device. - -**Set device** - -```kotlin -// Set audio device -dyteMobileClient.localUser.setAudioDevice(device) -// eg. device = audioDevices[0] - -// Set video device -dyteMobileClient.localUser.setVideoDevice(device) -// eg. device = videoDevices[0] -``` diff --git a/docs/flutter-core/pre-call/3-meeting-meta.mdx b/docs/flutter-core/pre-call/3-meeting-meta.mdx deleted file mode 100644 index 04b44b324b..0000000000 --- a/docs/flutter-core/pre-call/3-meeting-meta.mdx +++ /dev/null @@ -1,11 +0,0 @@ -# Meeting Metadata - -### Change the name of the user - -You can allow the user to edit their name by using the `setDisplayName` method. - -```dart -dyteMobileClient.localUser.setDisplayName("New Name") -``` - -**Note**: The name change will only be reflected to other participants if this method is called before joining the room. diff --git a/docs/flutter-core/pre-call/4-waiting-room.mdx b/docs/flutter-core/pre-call/4-waiting-room.mdx deleted file mode 100644 index 5b2c4782f0..0000000000 --- a/docs/flutter-core/pre-call/4-waiting-room.mdx +++ /dev/null @@ -1,60 +0,0 @@ -# Waiting Room - -When you call `dyteMobileClient.joinRoom()`, the user either enters the meeting room directly if allowed, or they are placed in the waiting room -if they are a waitlisted participant. - -The diagram illustrates the possible room states the local user can be in. - -```mermaid -stateDiagram-v2 - init --> joined - init --> waitlisted - waitlisted --> joined - waitlisted --> rejected -``` - -
- -### Meeting Room Joined - -If user joins the room successfully, you receive the `onMeetingRoomJoinCompleted()` callback in `DyteMeetingRoomEventsListener`. -You can listen for this callback as follows: - -```dart - -class MeetingRoomNotifier extends DyteMeetingRoomEventsListener{ - override fun onMeetingRoomJoinCompleted() { - // Local user is in the meeting - } -} - -dyteMobileClient.addMeetingRoomEventsListener(MeetingRoomNotifier()); -``` - -### Waitlisted Participant - -If the user is waitlisted, the `onWaitListStatusUpdate` callback in `DyteSelfEventsListener` notifies you of any changes in the -user's waitlist status. You can check the `waitListStatus` to determine their status: - -- `WAITING`: Local user is in the waiting room. -- `REJECTED`: Local user's join room request is rejected by the host. - -```dart -class WaitingRoomNotifier extends DyteSelfEventsListener{ - @override - void onWaitListStatusUpdate(DyteWaitListStatus waitListStatus) { - switch (waitListStatus) { - case DyteWaitListStatus.waiting: - // Local user is in the waiting room - case DyteWaitListStatus.rejected: - // Local user's join room request was rejected by the host - default: - break; - } - } -} - -dyteMobileClient.addSelfEventsListener(WaitingRoomNotifier()); -``` - -Host can use [these methods to accept/reject participants](/flutter-core/participants#waiting-room-methods). diff --git a/docs/flutter-core/pre-call/_category_.json b/docs/flutter-core/pre-call/_category_.json deleted file mode 100644 index 2e19b91163..0000000000 --- a/docs/flutter-core/pre-call/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "position": 2, - "label": "Pre-call", - "collapsible": true, - "className": "pre-call-docs" -} diff --git a/docs/flutter-core/quickstart.mdx b/docs/flutter-core/quickstart.mdx deleted file mode 100644 index f2d7059779..0000000000 --- a/docs/flutter-core/quickstart.mdx +++ /dev/null @@ -1,336 +0,0 @@ ---- -title: Quickstart -description: >- - Dive into the core of Flutter development with Dyte. Explore essential - documentation to streamline your Flutter app integration. -sidebar_position: 1 -tags: - - flutter-core - - quickstart -slug: / ---- - -# Flutter Core SDK Quickstart - -This quickstart shows how to use Dyte's Flutter Core SDK to add live video and -audio call to your Flutter applications. - -For getting started quickly, you can use our sample code. You can clone and run -a sample application from the -[Flutter Core SDK GitHub repository](https://github.com/dyte-io/flutter-samples/tree/main/flutter_core). - -## Objective - -You'll learn how to: - -- Install the Dyte SDK -- Initialize the SDK -- Configure a Dyte meeting -- Initialize the Dyte meeting -- And go live with your Dyte meeting - -## Before Getting Started - -- Make sure you've read the - [Getting Started with Dyte](/getting-started) topic and - completed the steps in the - [Integrate Dyte](/getting-started#integrate-dyte) section. - You must complete the following steps: - - Create a [Dyte Developer Account](https://dev.dyte.io/) - - Create a - [Dyte Meeting](/api/?v=v2#/operations/create_meeting) - - [Add Participant](/api/?v=v2#/operations/add_participant) - to the meeting -- Install Flutter on your system -- (For iOS apps) Install - [Xcode](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwin55bqodH8AhUVQXwKHaR-DAsQFnoECA0QAQ&url=https%3A%2F%2Fapps.apple.com%2Fus%2Fapp%2Fxcode%2Fid497799835%3Fmt%3D12&usg=AOvVaw2fEvMbfRtGhB4SPHYB54NX) -- Ensure that Rosetta is installed with Xcode on Mac computers with Apple - silicon. -- Make sure your Mac computers are running macOS version 12.0 Monterey or - higher. -- (For Android apps) Install - [Android Studio](https://developer.android.com/studio), or install the Android - SDK for Command-Line Interface (CLI) only. - -## Step 1: Install the SDK - -1. To install the SDK, add the Dyte Core Flutter SDK dependency into the - `pubspec.yaml` file. - - ```dart - flutter pub add dyte_core - ``` - -2. Then import the following package into your project: - - ```dart - import 'package:dyte_core/dyte_core.dart'; - ``` - -After importing the package, perform the following steps for Android and iOS. - -### For Android - -Set `compileSdkVersion 33` and `minSdkVersion 21` inside `build.gradle` file at the `/android/app/build.gradle` file. - -```kotlin - defaultConfig { - ... - - compileSdkVersion 33 - minSdkVersion 21 - - ... - } -``` - -And change the kotlin version to `1.9.0` - -```kotlin - ext.kotlin_version = '1.9.0' -``` - -### For iOS - -1. Set your platform to iOS 13.0 or above in your Podfile. - -```dart -platform :ios, '13.0' -``` - -2. Add the following entries to the `Info.plist` file. This gives permission to - your app to access the camera and microphone, access photos, install the - required fonts and icons. - -```dart -NSBluetoothPeripheralUsageDescription -We will use your Bluetooth to access your Bluetooth headphones. - -NSBluetoothAlwaysUsageDescription -We will use your Bluetooth to access your Bluetooth headphones. - -NSCameraUsageDescription -For people to see you during meetings, we need access to your camera. - -NSMicrophoneUsageDescription -For people to hear you during meetings, we need access to your microphone. - -NSPhotoLibraryUsageDescription -For people to share, we need access to your photos. - -UIBackgroundModes - - audio - voip - fetch - remote-notification - - -``` - -In iOS, if you are allowing user to download attachments in chat, add the following permissions in your app's Info.plist: - -``` -LSSupportsOpeningDocumentsInPlace - -UIFileSharingEnabled - -``` - -:::tip Note - -If you intend to publish your app to the Google Play or App Store, you'll need -to perform a few additional steps. So if you're working on release builds and -not debug builds, refer to the [Release Builds](#release-builds) section. - -::: - -## Step 2: Initialize the SDK - -The `DyteMobileClient` is the main class of the SDK. It is the entry point and -the only class required to initialize Dyte SDK. - -```dart -final dyteClient = DyteMobileClient(); -``` - -## Step 3: Set the meeting properties - -Set the properties in the `DyteMeetingInfo` class. You just need to provide the -participant's `authToken`. - -| Name | Description | -| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `authToken` | After you've created the meeting,
add each participant to the meeting
using the [Add Participant API](/api?v=v2#/operations/add_participant)
(The presetName created earlier
must be passed in the body
of the Add Participant API request)
The API response contains the `authToken`. | -| `baseUrl` | The base URL of the Dyte server. Default value is `https://api.dyte.io/v2`. This is an optional argument. | -| `enableAudio` | A boolean value to enable or disable audio in the meeting. Default value is `true`. This is an optional argument. | -| `enableVideo` | A boolean value to enable or disable video in the meeting. Default value is `true`. This is an optional argument. | - -```dart -final meetingInfo = DyteMeetingInfoV2( - authToken: '', - baseUrl: 'https://api.dyte.io/v2', // optional argument, if you want to pass your own baseUrl - enableAudio: false, // optional argument, to enable or disable audio in the meeting - enableVideo: false, // optional argument, to enable or disable video in the meeting - ); -``` - -## Step 4: Initialize the connection request - -To initialize the connection request, call the `init()` method obtained on -`dyteClient` with the `meetingInfo` argument. This will establish the connection -with the Dyte meeting server. - -```dart -dyteClient.init(meetingInfo); -``` - -By registering state observers, you receive callbacks for this action on the -meeting object. - -```dart - -class RoomStateNotifier implements DyteMeetingRoomEventsListener { - - ... - - @override - void onMeetingInitStarted() { - /// on meeting init started - } - - override - void onMeetingInitCompleted() { - /// on meeting init completed - } - - @override - void onMeetingInitFailed(Exception exception) { - /// on meeting init failed - } - - ... -} - -``` - -Subscibe to the `DyteMeetingRoomEventsListener` to receive the callbacks for the meeting object. - -```dart -dyteClient.addMeetingRoomEventsListener(RoomStateNotifier()); -``` - -## Step 5: Connect to the meeting - -Now, if you have established the connection with the Dyte meeting server -successfully i.e. if you received `onMeetingInitCompleted` callback, next step is to join the room. - -### Join the room - -To join the meeting room, call `joinRoom()` method on the `dyteClient` instance -as shown below. - -```dart -dyteClient.joinRoom(); -``` - -By registering state observers, you receive callbacks for join related actions on the -meeting object. - -```dart -class RoomStateNotifier implements DyteMeetingRoomEventsListener { - - ... - - @override - void onMeetingRoomJoinStarted() { - /// Handle join start state - } - - @override - void onMeetingRoomJoined() { - /// Handle joining completion, ex: move to room screen - } - - @override - void onMeetingRoomJoinFailed(exception){ - /// Handle failure - } - - ... -} -``` - -Successful joining of meeting is indicated by `onMeetingRoomJoined` callback. - -### Leave the room - -Once the meeting is over, you can leave the meeting room. - -Once leave meeting is completed or you decide to `release()` the meeting [called when user exits the SDK without joining the meeting room, say user exited from setup/waiting room], make sure to cleanup all listeners by calling `dyteClient.cleanAllNativeListeners()`. - -To leave the meeting room, call `leaveRoom()` method on the `dyteClient` as -shown below. - -```dart -dyteClient.leaveRoom(); -``` - -### Cleanup listeners - -Introduced in `dyte_core: 0.3.6`, `cleanAllNativeListeners()` method which needs to be called when you're done with current session of dyte meeting. It interally calls individual new clean methods for each listener `cleanNativeMeetingRoomEventsListener()`, `cleanNativeParticipantEventListener()`, `cleanNativePollListener()`, `cleanNativeRecordingListener()`, `cleanNativeStageEventsListener()`, `cleanNativeSelfParticipantEventListener()`, `cleanNativeChatListener()`, `cleanNativeDataUpdateListener()`, `cleanNativeLivestreamListener()`, `cleanNativePluginEventsListener()`. - -By registering state observers, you receive callbacks for this action on the -meeting object. - -```dart -class RoomStateNotifier implements DyteMeetingRoomEventsListener { - - ... - - @override - void onMeetingRoomLeaveStarted() { - /// on meeting room leave started - } - - @override - void onMeetingRoomLeaveCompleted() { - dyteClient.removeMeetingRoomEventsListener(this); - dyteClient.cleanupAppListeners(); - /// on meeting room left - } - - ... - -} -``` - -Successfully exiting the meeting is indicated by `onMeetingRoomLeaveCompleted` callback. - -## Release Builds - -If you intend to publish your app to the Google Play or App Store, perform the -following steps after installing the SDKs. So if you're working on release -builds and not debug builds, do the following: - -### For iOS release builds - -Disable `BITCODE` in your Podfile. - -```dart -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - end - end -end -``` - - - Flutter Core Quickstart - - diff --git a/docs/flutter-core/recording.mdx b/docs/flutter-core/recording.mdx deleted file mode 100644 index aeb5a53ee5..0000000000 --- a/docs/flutter-core/recording.mdx +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Recording -description: >- - Explore recording features in Flutter with Dyte's documentation. Learn how to - enable and configure recording for a seamless user experience. -sidebar_position: 9 -tags: - - flutter-core - - recording ---- - -# Recording - -The `dyteClient.recording` object can be used start and stop recordings in a -meeting. - -### Recording State - -The `dyteClient.recording.recordingState` property indicates the current state of the recording. Possible states include `idle`, `recording`, `starting`, `stopping`. - -### Start a recording - -To start a recording, you need to call the `start()` method in the -`dyteClient.recording` object, as shown below. - -```dart -dyteClient.recording.start(); -``` - -### Stop a recording - -To stop a recording, you need to call the `stop()` method in the -`dyteClient.recording` object, as shown below. - -```dart -dyteClient.recording.stop(); -``` - -### Listening for Recording Events - -To handle recording-related updates, you need to listen for -`onMeetingRecordingStateUpdated()` event. This returns `DyteRecordingState` -object with it. - -### Listen to recording state changes - -To handle recording-related updates, you need to implement `DyteMeetingRoomEventsListener`. This interface provides callbacks for various recording events as described in excerpt below: - -- `onMeetingRecordingStarted()`: Called when the recording is started or resumed, either by the user or their peer. -- `onMeetingRecordingEnded()`: Called when the recording is stopped or paused, either by the user or their peer. -- `onMeetingRecordingStateUpdated(DyteRecordingState` recordingState): Notifies when there is a change in the recording state. -- `onMeetingRecordingStopError(String error)`: Indicates an error occurred while stopping an active recording. -- `onMeetingRecordingPauseError(String error)`: Indicates an error occurred while pausing an active recording. -- `onMeetingRecordingResumeError(String error)`: Indicates an error occurred while resuming a paused recording. - -```dart - -class RecordingListener with DyteRecordingEventsListener { - - @override - void onMeetingRecordingStarted() { - /// Handle starting of recording - } - - @override - void onMeetingRecordingStateUpdated(DyteRecordingState recordingState) { - /// Handle status update of recording - } - - @override - void onMeetingRecordingEnded() { - /// Handle recording ended - } - - @override - void onMeetingRecordingStopError(String error) { - /// Handle recording error - } - -} - -``` - -You can subscribe to this events by `addRecordingListener` method: - -```dart -dyteClient.addRecordingListener(RecordingListener()); -``` - - - Flutter Core Recording - - diff --git a/docs/flutter-core/release-notes.mdx b/docs/flutter-core/release-notes.mdx deleted file mode 100644 index 69bdf461c8..0000000000 --- a/docs/flutter-core/release-notes.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Release Notes -sidebar_position: 101 -sidebar_class_name: releaseSidebarHeading -tags: - - mobile-core - - releasenotes ---- - -import ReleaseNotesGenerator from '@site/src/components/ReleaseNotesGenerator'; - - - - - Flutter Core Release Notes - diff --git a/docs/flutter-core/room-metadata.mdx b/docs/flutter-core/room-metadata.mdx deleted file mode 100644 index 0eecfa4ad7..0000000000 --- a/docs/flutter-core/room-metadata.mdx +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Room Metadata -description: >- - Understand how to manage room metadata in Flutter. Follow Dyte's documentation - for effective integration and management of room metadata. -sidebar_position: 4 -tags: - - flutter-core - - room-metadata ---- - -# Room Metadata - -All metadata related to a meeting is stored in `meeting.meta`. This includes: - -- `roomName`: The name of the room the current participant is connected to. -- `roomType`: Indicates the meeting is a group-call, webinar or livestream. -- `meetingTitle`: The title of the meeting. -- `meetingStartedTimestamp`: The timestamp when the meeting started. - -For example, if you want to get the name of the room the current participant is -connected to, you can do so by doing: - -```dart -final roomName = meeting.meta.roomName; -print("The local user has joined room ${roomName}."); -``` - - - Flutter Core Room Metadata - - diff --git a/docs/flutter-core/stage-management/_category_.json b/docs/flutter-core/stage-management/_category_.json deleted file mode 100644 index 064be588fb..0000000000 --- a/docs/flutter-core/stage-management/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "position": 7, - "label": "Stage Management", - "collapsible": true, - "className": "pre-call-docs" -} diff --git a/docs/flutter-core/stage-management/host-controls.mdx b/docs/flutter-core/stage-management/host-controls.mdx deleted file mode 100644 index 77e3118dcc..0000000000 --- a/docs/flutter-core/stage-management/host-controls.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Stage Host Controls -description: Stage management APIs for Host in Dyte meetings. -sidebar_position: 2 -tags: - - flutter-core - - stage ---- - -In a stage management-enabled meeting, a user with the `selfPermissions.host.canAcceptStageRequests` permission as `true` is -considered a host. The `dyteMobileClient.stage` object in Dyte's Flutter Core SDK provides stage management APIs that allow hosts to -manage stage access requests, invite participants to the stage, and remove participants from the stage. - -### List of Stage Access Requests - -You can retrieve the list of pending stage access requests by accessing the `dyteMobileClient.stage.accessRequests` property. This property -provides a list of `DyteJoinedMeetingParticipant` objects who have requested stage access. - -:::note -If the local user is not a host, this property returns an empty list. -::: - -### Grant stage access - -A privileged user can grant access to stage for a set of users with `grantAccess` method. - -| **Parameters** | **Type** | -| -------------- | ------------------------------ | -| peer | _DyteJoinedMeetingParticipant_ | - -```dart -dyteClient.stage.grantAccess(peer); -``` - -To grant access to all stage requests at a time, you can user `grantAccessToAll()` method. This method takes no parameters. - -```dart -dyteClient.stage.grantAccessToAll(); -``` - -### Deny stage access - -A privileged user can deny access to stage for a set of users with `denyAccess` method. - -| **Parameters** | **Type** | -| -------------- | ------------------------------ | -| peer | _DyteJoinedMeetingParticipant_ | - -```dart -dyteClient.stage.denyAccess(peer); -``` - -To deny all stage requests at a time, you can user `denyAccessToAll()` method. This method takes no parameters. - -```dart -dyteClient.stage.denyAccessToAll(); -``` - -### Kick participant from stage - -A privileged user can kick a participant from stage with `kick` method. - -| **Parameters** | **Type** | -| -------------- | ------------------------------ | -| peer | _DyteJoinedMeetingParticipant_ | - -```dart -dyteClient.stage.kick(peer); -``` - -### Listening to Stage Access Requests - -You can listen to incoming stage access requests or changes in the access requests list if you are a host. The SDK provides the -following callbacks to `DyteStageEventsListener`: - -```dart -class StageEventListener extends DyteStageEventsListener { - @override - void onPresentRequestAdded(DyteJoinedMeetingParticipant participant) { - // Called when a participant requests to join the stage. Triggered only if the local user is a host. - } - - @override - void onPresentRequestClosed(DyteJoinedMeetingParticipant participant) { - // Called when a participant with a pending stage access request leaves the meeting. - // Triggered only if the local user is a host. - } - - @override - void onPresentRequestRejected(DyteJoinedMeetingParticipant participant) { - // Called when a participant's stage access request is denied by the host. - // Triggered only if the local user is a host. - } - - @override - void onPresentRequestWithdrawn(DyteJoinedMeetingParticipant participant) { - // Called when a participant cancels their stage access request. - // Triggered only if the local user is a host. - } - - @override - void onStageRequestsUpdated(List accessRequests) { - // Called when the list of stage access requests is updated. - } -} -``` - -You need to attach the listener to meeting client as follows: - -```dart -dyteClient.addStageEventsListener(StageEventsListener()) -``` - -These APIs enable you to manage stage access requests and participants effectively in Dyte meetings. Next, we'll explore the -Stage APIs available to Viewer participants. diff --git a/docs/flutter-core/stage-management/introduction.mdx b/docs/flutter-core/stage-management/introduction.mdx deleted file mode 100644 index 90ed3ded8c..0000000000 --- a/docs/flutter-core/stage-management/introduction.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Introduction -description: Stage management in Dyte meetings. -sidebar_position: 1 -tags: - - flutter-core - - stage ---- - -_Below documentation is relevant for Interactive Livestream(LHLS) and Webinar(WebRTC) use cases._ - -Instead of a traditional publish-subscribe model, where a user can publish their media and others can choose to subscribe, Dyte -comes with an optional managed configuration. In this managed configuration, a less privileged user can be configured with a -default behavior to not publish media. The user can then request permission to publish their media, which a privileged user can -choose to grant or deny. - -### Accessing the Stage APIs - -Dyte's stage management APIs allow users to perform actions such as joining and leaving the stage, managing stage requests and -permissions, and kicking participants from the stage. These APIs are accessible through the `dyteMobileClient.stage` object. - -### Stage Status - -In meetings where stage management is enabled, a user's stage status can change within the values represented by the `DyteStageStatus` -enum. These status values include: - -- `onStage`: Indicates that the user is currently on the stage and is allowed to publish media. -- `offStage`: Indicates that the user is a viewer and is not on the stage. They can see and listen to those on stage. -- `requestedToJoinStage`: Indicates that the user has a pending request to join the stage. This status is assigned to the user - until the host accepts or rejects their request. -- `acceptedToJoinStage`: Indicates that the host has accepted the user's request to join the stage. -- `rejectedToJoinStage`: Indicates that the host has rejected the user's request to join the stage. The user can request again - to join from this status. - -The `dyteMobileClient.stage.status` property provides the current stage status of the local user. - -### Viewers - -You can retrieve a list of off-stage participants (viewers) in a stage-enabled meeting by accessing the `meeting.stage.viewers` -property. This property provides a list of `DyteJoinedMeetingParticipant` objects whose stage status is not `onStage`. - -### Joining the Stage - -To interact with peers and publish media, users can join the stage. This action is only possible if the user's preset allows them -to publish media or if their request to join the stage has been accepted by a host (i.e., their stage status is `acceptedToJoinStage`). - -```dart -dyteClient.stage.join(); -``` - -### Leaving the Stage - -When users want to stop interacting with peers, they can leave the stage. This action stops their media from being published, -and their audio and video are no longer received by others in the room. - -```dart -dyteClient.stage.leave(); -``` - -### List of Stage Events - -The `DyteStageEventListener` interface provides callback methods for various stage events. Implement these callbacks to handle -stage-related events in your application: - -```dart -class StageEventListener extends DyteStageEventsListener { - @override - void onAddedToStage() { - // Called when the local user successfully joins the stage. - } - - @override - void onParticipantRemovedFromStage( - DyteJoinedMeetingParticipant participant) { - // Called when a participant is removed from the stage by the host. - } - - @override - void onPresentRequestAdded(DyteJoinedMeetingParticipant participant) { - // Called when a participant requests to join the stage. Triggered only if the local user is a host. - } - - @override - void onPresentRequestClosed(DyteJoinedMeetingParticipant participant) { - // Called when a participant with a pending stage access request leaves the meeting. - // Triggered only if the local user is a host. - } - - @override - void onPresentRequestReceived() { - // Called when the local user's stage access request is accepted by the host, - // or when the local user, who is a viewer, is invited to the stage by the host. - } - - @override - void onPresentRequestRejected(DyteJoinedMeetingParticipant participant) { - // Called when a participant's stage access request is denied by the host. - // Triggered only if the local user is a host. - } - - @override - void onPresentRequestWithdrawn(DyteJoinedMeetingParticipant participant) { - // Called when a participant cancels their stage access request. - // Triggered only if the local user is a host. - } - - @override - void onRemovedFromStage() { - // Called when the local user is removed from the stage. - } - - @override - void onStageRequestsUpdated(List accessRequests) { - // Called when the list of stage access requests is updated. - } - - @override - void onStageStatusUpdated(DyteStageStatus stageStatus) { - // Called when the local user's stage status is updated. - } - - @override - void onParticipantStartedPresenting(DyteJoinedMeetingParticipant participant) { - // Called when a participant joins the stage. - } - - @override - void onParticipantStoppedPresenting(DyteJoinedMeetingParticipant participant) { - // Called when a participant leaves the stage. - } -} -``` - -You need to attach the listener to meeting client as follows: - -```dart -dyteClient.addStageEventsListener(StageEventsListener()) -``` - -Next, we'll explore the Stage Management APIs for hosts, allowing them to manage stage requests, participants in Dyte meetings. diff --git a/docs/flutter-core/stage-management/viewer-participants.mdx b/docs/flutter-core/stage-management/viewer-participants.mdx deleted file mode 100644 index 387ed81e19..0000000000 --- a/docs/flutter-core/stage-management/viewer-participants.mdx +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Stage Access for Viewers -description: Stage APIs for Viewers in Dyte meetings. -sidebar_position: 3 -tags: - - flutter-core - - stage ---- - -Viewer participants in a stage-enabled meeting are users whose preset permission for media production is set as `canRequest`. -The `dyteMobileClient.stage` object provides APIs for viewer participants to request stage access and withdraw their join stage request. - -### Request access - -This method is used to create a new stage request which can be approved by the host. - -```dart -dyteClient.stage.requestAccess(); -``` - -When a host accepts the user's stage access request or allows the user directly to the stage, the SDK triggers the -`onPresentRequestReceived` callback in `DyteStageEventListener`. You can listen to this event: - -```dart -class StageEventListener with DyteStageEventsListener { - @override - void onPresentRequestReceived() { - // Host accepted the join stage request or invited user directly to stage - } -} -``` - -### Withdraw join request - -To cancel or withdraw a pending stage access request, you can call the `withdrawJoinRequest()` method: - -```dart -dyteClient.stage.withdrawJoinRequest(); -``` diff --git a/docs/flutter/Components/_category_.json b/docs/flutter/Components/_category_.json deleted file mode 100644 index c3d1cb5125..0000000000 --- a/docs/flutter/Components/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 4, - "label": "Components", - "collapsible": true -} diff --git a/docs/flutter/Components/dyte-audio-indicator-icon-widget.mdx b/docs/flutter/Components/dyte-audio-indicator-icon-widget.mdx deleted file mode 100644 index 8b778f5964..0000000000 --- a/docs/flutter/Components/dyte-audio-indicator-icon-widget.mdx +++ /dev/null @@ -1,26 +0,0 @@ -# DyteAudioIndicatorIconWidget - -A widget that displays audio status of a participant in dyte meeting. - -:::info - -[`DyteProvider`](./dyte-provider.mdx) needs to be added above `DyteAudioIndicatorIconWidget` which will manage dyte client object for polls screen by itself. - -::: - -## Usage - -```dart -DyteAudioIndicatorIconWidget( - participant: participant -); - -``` - -Here, `participant` is dyte participant object of type `DyteJoinedMeetingParticipant` of whom you want to show audio status. - -## Screenshot - -| Audio Icon | Participant Screen | -| ---------------------------------------------------------------------- | -------------------------------------------------------------------------- | -| | | diff --git a/docs/flutter/Components/dyte-chat-icon-widget.mdx b/docs/flutter/Components/dyte-chat-icon-widget.mdx deleted file mode 100644 index 4537809dcd..0000000000 --- a/docs/flutter/Components/dyte-chat-icon-widget.mdx +++ /dev/null @@ -1,28 +0,0 @@ -# DyteChatIconWidget - -A widget for displaying a chat icon in a Dyte-based Flutter application, enabling users to navigate to the chat page.. The icon triggers navigation to the `ChatsPage` upon being pressed and marks all messages as read. - -:::info - -[`DyteProvider`](./dyte-provider.mdx) needs to be added above `DyteChatIconWidget` which will manage dyte client object for polls screen by itself. - -::: - -## Usage - -Below is an example illustrating the integration of `DyteChatIconWidget` within a Flutter application: - -```dart -DyteChatIconWidget() -``` - -## Details - -When the `DyteChatIconWidget` is tapped, it performs two primary actions: - -1. Marks all chat messages as read. -2. Navigates the user to the `ChatsPage`. - -| Chat Icon | Chat Screen | -| --------------------------------------------------------------------- | --------------------------------------------------------------- | -| | | diff --git a/docs/flutter/Components/dyte-join-button.mdx b/docs/flutter/Components/dyte-join-button.mdx deleted file mode 100644 index 8f627e09f6..0000000000 --- a/docs/flutter/Components/dyte-join-button.mdx +++ /dev/null @@ -1,32 +0,0 @@ -# DyteJoinButton - -A button widget specifically designed for joining a Dyte meeting room. This widget encapsulates functionality related to the meeting room joining process, providing visual feedback to the user based on the current state of the joining process. - -## Usage - -Here is a basic example of how to use the `DyteJoinButton` in your Flutter app: - -```dart -DyteJoinButton( - dyteMobileClient = yourDyteMobileClientInstance, - onMeetingJoined = () { - // Your code to execute after joining the meeting - }, - height = 50.0, - width = 200.0, - isDisabled = false, -) -``` - -## Properties - -- `dyteMobileClient`: (**Required**) An instance of `DyteMobileClient` to manage meeting room events. -- `onMeetingJoined`: (Optional) A callback that gets called when the meeting room is successfully joined. -- `dyteDesignToken`: (Optional) An instance of `DyteDesignTokens` for customizing the button's appearance according to the Dyte Design System. -- `height`: (Optional) The height of the button. If not specified, it defaults to the height defined by the button style. -- `width`: (Optional) The width of the button. If not specified, it defaults to the width defined by the button style. -- `isDisabled`: (Optional) A boolean that disables the button when set to `true`. Default is `false`. - -## Screenshot - - diff --git a/docs/flutter/Components/dyte-leave-button.mdx b/docs/flutter/Components/dyte-leave-button.mdx deleted file mode 100644 index 9a8d67e7ca..0000000000 --- a/docs/flutter/Components/dyte-leave-button.mdx +++ /dev/null @@ -1,32 +0,0 @@ -# DyteLeaveButton - -A specialized button widget for leaving a Dyte meeting. This widget is designed in accordance with the Dyte UI Kit and facilitates a seamless exit process from a meeting environment. - -## Usage - -Here is how you can use the `DyteLeaveButton` in your Flutter application: - -```dart -DyteLeaveButton( - dyteMobileClient: yourDyteMobileClientInstance, - height: 50.0, - width: 50.0, -) -``` - -## Properties - -- `dyteMobileClient`: (**Required**) An instance of `DyteMobileClient` used to perform the leave meeting operation. -- `designToken`: (Optional) An instance of `DyteDesignTokens` for customizing the appearance according to the Dyte Design System. If not specified, the widget will default to the global design tokens. -- `height`: (Optional) The height of the button. If not specified, it defaults to a predefined size based on the design tokens. -- `width`: (Optional) The width of the button. If not specified, it defaults to a predefined size based on the design tokens. - -## Features - -- **Customizable Size**: The size of the button can be adjusted using the `height` and `width` properties. -- **Consistent Styling**: Adheres to the Dyte Design System for visual consistency across the Dyte UI Kit. -- **Leave Dialog**: Upon pressing the button, a confirmation dialog is displayed to the user to prevent accidental meeting exits. - -## Screenshot - - diff --git a/docs/flutter/Components/dyte-leave-meeting-dialog.mdx b/docs/flutter/Components/dyte-leave-meeting-dialog.mdx deleted file mode 100644 index 4ad73b18ad..0000000000 --- a/docs/flutter/Components/dyte-leave-meeting-dialog.mdx +++ /dev/null @@ -1,39 +0,0 @@ -# DyteLeaveMeetingDialog - -A dialog widget designed for confirming the action of leaving a Dyte meeting. This widget is part of the Dyte UI Kit and is intended to provide a clear and concise user interface for confirming the exit process from a meeting environment. - -## Usage - -Here is how you can use the `DyteLeaveMeetingDialog` in your Flutter application: - -```dart -DyteLeaveMeetingDialog( - dyteMobileClient: yourDyteMobileClientInstance, -) -``` - -## Properties - -- `dyteMobileClient`: (**Required**) An instance of `DyteMobileClient` used to perform actions like leaving the meeting room or ending the meeting for all participants. -- `designToken`: (Optional) An instance of `DyteDesignTokens` for customizing the appearance according to the Dyte Design System. If not specified, the widget will default to the global design tokens. - -## Design Token - -The `DyteLeaveMeetingDialog` utilizes `DyteDesignTokens` for theming: - -- `borderRadius`: The border radius of the dialog box, which defaults to a value defined in the design tokens. -- `fillColor`: The background color of the dialog, typically set to provide a neutral or alerting backdrop for the content. -- `textColor`: The color of the text within the dialog, ensuring it is readable against the `fillColor`. - -## Features - -- **Confirmation Prompt**: Provides a clear prompt asking the user if they are sure they want to leave the meeting. -- **Action Buttons**: Includes "Cancel" and "Leave" buttons, allowing the user to either cancel the action or confirm their intent to leave the meeting. -- **Host Controls**: If the user has host permissions, an additional button "End meeting for all" is displayed, providing the option to end the meeting for all participants. - -## Screenshot - - diff --git a/docs/flutter/Components/dyte-meeting-title.mdx b/docs/flutter/Components/dyte-meeting-title.mdx deleted file mode 100644 index c861b16528..0000000000 --- a/docs/flutter/Components/dyte-meeting-title.mdx +++ /dev/null @@ -1,22 +0,0 @@ -# DyteMeetingTitle - -A simple, customizable widget designed to display the title of a Dyte meeting. This widget is part of the Dyte UI Kit and integrates seamlessly with Dyte's design system and meeting services. - -## Usage - -Below is a basic example of how to use the `DyteMeetingTitle` widget in your Flutter app: - -```dart -DyteMeetingTitle( - dyteMobileClient: yourDyteMobileClientInstance, -) -``` - -## Properties - -- `dyteMobileClient`: (**Required**) An instance of `DyteMobileClient`. This is used to fetch and display the current meeting's title. -- `designToken`: (Optional) An instance of `DyteDesignTokens` for customizing the appearance according to the Dyte Design System. If not specified, the widget will use the global design tokens. - -## Screenshot - - diff --git a/docs/flutter/Components/dyte-name-tag-widget.mdx b/docs/flutter/Components/dyte-name-tag-widget.mdx deleted file mode 100644 index da3300a1fa..0000000000 --- a/docs/flutter/Components/dyte-name-tag-widget.mdx +++ /dev/null @@ -1,19 +0,0 @@ -# DyteNameTag - -A widget with name tag of the participant in participant tile. - -## Usage - -```dart -DyteNameTag( - size: size, // type: double, size of the name tag - color: widget.textColor, // color: Color, color of the name tag - participant: widget.participant, // type: DyteMeetingParticipant -); -``` - -## Screenshot - -| Name Tag Widget | Meeting Screen | -| ------------------------------------------------------------- | -------------------------------------------------------------------- | -| | | diff --git a/docs/flutter/Components/dyte-participant-tile.mdx b/docs/flutter/Components/dyte-participant-tile.mdx deleted file mode 100644 index 8d184ff021..0000000000 --- a/docs/flutter/Components/dyte-participant-tile.mdx +++ /dev/null @@ -1,41 +0,0 @@ -# DyteParticipantTile - -A comprehensive widget designed to display a participant's video or avatar within a Dyte meeting environment. This widget is part of the Dyte UI Kit and is optimized for showing participant information, including live video feed, name, and audio status. - -:::info - -[`DyteProvider`](./dyte-provider.mdx) needs to be added above `DyteParticipantTile` which will manage dyte client object for polls screen by itself. - -::: - -## Usage - -Below is an example of how to use the `DyteParticipantTile` in your Flutter application: - -```dart -DyteParticipantTile( - participant, - designToken: yourDesignToken, - height: 240, - width: 180, -) -``` - -## Properties - -- `participant`: (**Required**) An instance of `DyteMeetingParticipant`. This represents the participant whose information and video are to be displayed. -- `designToken`: (Optional) An instance of `DyteDesignTokens` for customizing the appearance according to the Dyte Design System. If not specified, the widget will use the global design tokens. -- `height`: (Optional) The height of the tile. Default is `240`. -- `width`: (Optional) The width of the tile. Default is `180`. - -## Features - -- **Video or Avatar Display**: Automatically displays the participant's video feed if available; otherwise, shows the participant's avatar. -- **Dynamic Resizing**: Adapts size based on the constraints provided by the parent widget. -- **Pinned Status**: Indicates if the participant is pinned in the meeting. -- **Audio Status**: Shows an icon indicating whether the participant's audio is on or off. -- **Name Tag**: Displays the participant's name and, if applicable, indicates if they are the local user with a "You" tag. - -## Screenshot - - diff --git a/docs/flutter/Components/dyte-participants-icon-widget.mdx b/docs/flutter/Components/dyte-participants-icon-widget.mdx deleted file mode 100644 index 11758b16ec..0000000000 --- a/docs/flutter/Components/dyte-participants-icon-widget.mdx +++ /dev/null @@ -1,27 +0,0 @@ -# DyteParticipantsIconWidget - -This widget is designed to integrate a participants icon within a Dyte-based Flutter application. It facilitates navigation to the `DyteParticipantPage` when pressed, serving as a user interface element for accessing the participants list of a Dyte session. - -:::info - -[`DyteProvider`](./dyte-provider.mdx) needs to be added above `DyteParticipantsIconWidget` which will manage dyte client object for polls screen by itself. - -::: - -## Usage - -To use the `DyteParticipantsIconWidget` in a Flutter application, instantiate it directly in your widget tree: - -```dart -DyteParticipantsIconWidget() -``` - -## Details - -Upon interacting with the widget, the following actions occur: - -- The application navigates to the `DyteParticipantPage`, which displays the list of participants in the current session. - -| Participant Icon | Participant Screen | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| | | diff --git a/docs/flutter/Components/dyte-plugins-screen.mdx b/docs/flutter/Components/dyte-plugins-screen.mdx deleted file mode 100644 index 163b556156..0000000000 --- a/docs/flutter/Components/dyte-plugins-screen.mdx +++ /dev/null @@ -1,15 +0,0 @@ -# DytePluginsScreen - -A widget that provides a well-built plugins screen using molecular components. This widget integrates with the Dyte UI Kit and return our plugins page as a widget. - -:::info - -[`DyteProvider`](./dyte-provider.mdx) needs to be added above `DytePluginsScreen` which will manage dyte client object for polls screen by itself. - -::: - -## Usage - -```dart -DytePluginsScreen() -``` diff --git a/docs/flutter/Components/dyte-polls-screen.mdx b/docs/flutter/Components/dyte-polls-screen.mdx deleted file mode 100644 index 5c43754d15..0000000000 --- a/docs/flutter/Components/dyte-polls-screen.mdx +++ /dev/null @@ -1,15 +0,0 @@ -# DytePollsScreen - -A widget that provides a well-built polls screen using molecular components. This widget integrates with the Dyte UI Kit and return our polls page as a widget. - -:::info - -[`DyteProvider`](./dyte-provider.mdx) needs to be added above `DytePollsScreen` which will manage dyte client object for polls screen by itself. - -::: - -## Usage - -```dart -DytePollsScreen(); -``` diff --git a/docs/flutter/Components/dyte-provider.mdx b/docs/flutter/Components/dyte-provider.mdx deleted file mode 100644 index 612b4666be..0000000000 --- a/docs/flutter/Components/dyte-provider.mdx +++ /dev/null @@ -1,57 +0,0 @@ -# DyteProvider - -A foundational widget designed to initialize and provide the necessary Dyte environment for a Flutter application. The `DyteProvider` acts as a context wrapper that sets up design tokens, client configurations, and UI Kit information required for Dyte components. It ensures that Dyte functionalities are available and properly initialized throughout the widget tree where it's used. - -## Usage - -To use `DyteProvider`, wrap the root of your application: - -```dart -DyteProvider( - client: dyteMobileClientInstance, - uiKitInfo: dyteUIKitInfoInstance, - child: MaterialApp( - // Your app's home screen or an entry widget - home: YourAppHome(), - ), -) -``` - -if you don't want to wrap the root of your app inside `DyteProvider`, you can also wrap a specific part of your app where you want to use Dyte components but after adding `DyteProvider` you need a `MaterialApp` widget under it. - -This approach ensures that all the necessary Dyte setup is done before your app UI starts, allowing you to utilize Dyte features seamlessly within your application. - -## Properties - -- `child`: (**Required**) The widget below this widget in the tree. This is usually your MaterialApp or your application's home widget. -- `client`: (**Required**) An instance of `DyteMobileClient`. This represents the Dyte client configuration that includes authentication and other essential settings. -- `uiKitInfo`: (**Required**) An instance of `DyteUIKitInfo`. This holds information related to the Dyte UI Kit such as design tokens and other UI configurations. - -## Notes - -Ensure that the `DyteMobileClient` and `DyteUIKitInfo` are properly configured before passing them to the `DyteProvider`. This is crucial for the proper functioning of all Dyte-related components within your application. - -## Example - -Here is an example of using `DyteProvider` in an application: - -```dart -class MyApp extends StatelessWidget { - @override - Widget build(BuildContext context) { - return DyteProvider( - client: DyteMobileClient( - // Dyte client configuration - ), - uiKitInfo: DyteUIKitInfo( - // UI Kit information and design tokens - ), - child: MaterialApp( - home: HomeScreen(), - ), - ); - } -} -``` - -By wrapping your app with `DyteProvider`, you ensure that all necessary Dyte setups are initialized and available for your app components, allowing you to build a fully functional Dyte-enabled application. diff --git a/docs/flutter/Components/dyte-self-audio-toggle.mdx b/docs/flutter/Components/dyte-self-audio-toggle.mdx deleted file mode 100644 index 3c803f7aec..0000000000 --- a/docs/flutter/Components/dyte-self-audio-toggle.mdx +++ /dev/null @@ -1,35 +0,0 @@ -# DyteSelfAudioToggleButton - -A toggle button widget designed for controlling the audio state in the Dyte video conference environment. This widget integrates with the Dyte UI Kit and allows users to enable or disable their microphone audio during a meeting. - -## Usage - -Here is a basic example of how to use the `DyteSelfAudioToggleButton` in your Flutter app: - -```dart -DyteSelfAudioToggleButton( - dyteMobileClient: yourDyteMobileClientInstance, - onAudioToggle: () { - // Your code to handle toggle - }, - iconSize: 24.0, - iconColor: Colors.blue, - showLabel: true, -) -``` - -## Properties - -- `dyteMobileClient`: (**Required**) An instance of `DyteMobileClient` to manage the audio state and events. -- `onAudioToggle`: (Optional) A callback that gets called when the audio toggle button is pressed. -- `iconSize`: (Optional) Size of the icon inside the toggle button. If not specified, the default size is used. -- `iconColor`: (Optional) Color of the icon inside the toggle button. If not specified, the default color from the design tokens is used. -- `showLabel`: (Optional) Boolean to show or hide the label next to the icon. Default is `false`. - -## Design Token - -The widget uses `DyteDesignTokens` for theming, which allows for customization according to the Dyte Design System. The `designToken` can be passed as a parameter or will default to the global design token. - -## Screenshot - - diff --git a/docs/flutter/Components/dyte-self-video-toggle.mdx b/docs/flutter/Components/dyte-self-video-toggle.mdx deleted file mode 100644 index 1f0b7b53d0..0000000000 --- a/docs/flutter/Components/dyte-self-video-toggle.mdx +++ /dev/null @@ -1,36 +0,0 @@ -# DyteSelfVideoToggleButton - -A custom Flutter widget designed for toggling video state in a Dyte video conference environment. This widget is part of the Dyte UI Kit and allows users to enable or disable their video during a meeting. - -## Usage - -Below is an example of how to integrate the `DyteSelfVideoToggleButton` into your Flutter app: - -```dart -DyteSelfVideoToggleButton( - dyteMobileClient: yourDyteMobileClientInstance, - onVideoToggle: () { - // Code to execute after video toggle - }, - iconSize: 24.0, - iconColor: Colors.red, - showLabel: true, -) -``` - -## Properties - -- `dyteMobileClient`: (**Required**) An instance of `DyteMobileClient` to manage video state and events. -- `onVideoToggle`: (Optional) A callback that is called when the video toggle button is pressed. -- `iconSize`: (Optional) Size of the icon inside the toggle button. If not specified, a default size is used. -- `iconColor`: (Optional) Color of the icon inside the toggle button. If not specified, the default color from the design tokens is used. -- `showLabel`: (Optional) A boolean to show or hide the label next to the icon. Default is `false`. -- `dyteDesignToken`: (Optional) An instance of `DyteDesignTokens` for customizing the appearance according to the Dyte Design System. - -## Design Token - -The widget utilizes `DyteDesignTokens` for theming, which allows customization following the Dyte Design System. The `designTokens` can either be passed as a parameter or will default to the global design tokens. - -## Screenshot - - diff --git a/docs/flutter/Components/dyte-setup-screen-component.mdx b/docs/flutter/Components/dyte-setup-screen-component.mdx deleted file mode 100644 index 1ce0a8198f..0000000000 --- a/docs/flutter/Components/dyte-setup-screen-component.mdx +++ /dev/null @@ -1,26 +0,0 @@ -# DyteSetupScreen - -A widget that provides a well-built setup screen using our exportable components itself. This widget integrates with the Dyte UI Kit and gives our setup page as a widget. - -:::info - -[`DyteProvider`](./dyte-provider.mdx) needs to be added above `DyteSetupScreen` which will manage dyte client object for polls screen by itself. - -::: - -## Usage - -Here is a basic example of how to use the `DyteSetupScreen` in your Flutter app: - -```dart -DyteSetupScreen( - selectedAudioDevice, - selectedVideoDevice, -); -``` - -Here, `selectedAudioDevice` and `selectedVideoDevice` can be fetched using `dyteClient.getSelectedAudioDevice()` & `dyteClient.getSelectedVideoDevice()` respectively. - -## Screenshot - - diff --git a/docs/flutter/design-token.mdx b/docs/flutter/design-token.mdx deleted file mode 100644 index e393f2abe0..0000000000 --- a/docs/flutter/design-token.mdx +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: Design System -description: >- - Explore design token integration in Flutter with Dyte's documentation. Follow - our guide for effective design token implementation in your app. -sidebar_position: 3 -tags: - - Flutter UI Kit - - Design System ---- - -# Design System - -A design system is a collection of reusable components, defined by clear standards, that can be assembled together to build any number of applications. - -Dyte's UI kit uses the Atomic design principle, which logically organizes screens for various devices, making it a versatile system. Design tokens are used in Dyte's UI Kit to maintain a consistent look across platforms. By combining design tokens and Atomic design principles, Dyte ensures a smooth and adaptable user interface experience on different platforms. - -## Design Tokens - -Design tokens are the single source of truth to name and store design decisions.They are values that help keep the design consistent and flexible. These values include things like font styles, spacing, colors, borders, and more, allowing you to easily customize the overall look and feel of a system. - -In the Flutter UI kit, design tokens are shared and managed using `themes`. Themes in Flutter use the `ThemeData` class to store and propagate design properties, such as colors, fonts, and more, throughout the widget tree. - -Let's understand how you can customize your UI with Dyte's Flutter UI Kit using design tokens. - -### Customize themes with design tokens - -Dyte offers the `DyteDesignToken` class to customize the theme of the UI kit. Pass the `DyteDesignToken` object within the `DyteUIKitInfo` object to customize the theme. - -With `DyteDesignToken`, you can customize the following design properties: - -- `backgroundColor`:The background color of the UI Kit. -- `textOnBackground`: The text color on the background of the UI Kit. -- `backgroundColorSwatch`: The background color swatch of the UI Kit. -- `brandColor`: The primary color of the UI Kit. -- `textOnBrand`: The text color on the brand color of the UI Kit. -- `brandColorSwatch`: The brand color swatch of the UI Kit. -- `danger`: The danger color of the UI Kit. -- `success`: The success color of the UI Kit. -- `warning`: The warning color of the UI Kit. - -You have two options to customize the UI Kit's theme: - -#### Pass a single color. - -You can pass a single color to the `backgroundColor`, `brandColor` parameters. Or you can use a combination of `backgroundColorSwatch` and `brandColor` to customize the theme. - -#### Use a color swatch. - -For the brand color swatch, make sure it contains 5 entries with keys 300, 400, 500, 600, and 700. -For the background color swatch, provide 5 entries with keys 600, 700, 800, 900, and 1000. - -To achieve this, utilize the `DyteColorSwatch` class with two parameters: the default color key and a map of colors. - -```dart -final primarySwatch = DyteColorSwatch( - 500, - { - 300: Colors.blue.shade300, - 400: Colors.blue.shade400, - 500: Colors.blue.shade500, - 600: Colors.blue.shade600, - 700: Colors.blue.shade700, - }, - ); -``` - -### Customize borders with configuration - -To customize the border radius and border width of the UI Kit, you can use the `DyteBorderRadius` and `DyteBorderWidth` enum values in the design token. - -Here are the available `DyteBorderRadius` values: - -| Token Name | values | -| ------------------ | ---------------------------------------------- | -| `DyteBorderRadius` | `sharp`, `rounded`, `extraRounded`, `circular` | - -Here are the available `DyteBorderWidth` values: - -| Token Name | values | -| ----------------- | --------------------- | -| `DyteBorderWidth` | `none`, `thin`, `fat` | - -## Example - -Here's an example of how you can customize the Flutter UI Kit using the design token: - -```dart -final uikitInfo = DyteUIKitInfo(meetingInfo, - designToken: DyteDesignToken( - colorToken: DyteColorToken( - borderRadius: DyteBorderRadius.circular, - borderWidth: DyteBorderWidth.fat, - backgroundColor: Colors.black, - textOnBrand: Colors.white, - textOnBackground: Colors.white, - danger: Colors.red, - success: Colors.green, - warning: Colors.yellow, - brandColorSwatch: DyteColorSwatch( - 500, - { - 300: Colors.blue.shade300, - 400: Colors.blue.shade400, - 500: Colors.blue.shade500, - 600: Colors.blue.shade600, - 700: Colors.blue.shade700, - }, - )), - )); -``` - -
- {[ - '/static/mobile/0.x.x/flutter-setup-ct.png', - '/static/mobile/0.x.x/flutter-vc-ct.png', - '/static/mobile/0.x.x/flutter-host-actions-ct.png', - '/static/mobile/0.x.x/flutter-poll-ct.png', - '/static/mobile/0.x.x/flutter-participants-list-ct.png', - ].map((i) => ( - Image 1 - ))} -
- - - Flutter Design System - - diff --git a/docs/flutter/introduction.mdx b/docs/flutter/introduction.mdx deleted file mode 100644 index 0d539344ee..0000000000 --- a/docs/flutter/introduction.mdx +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Introduction -description: Beginner's guide to Dyte's Flutter UI Kit. -sidebar_position: 1 -slug: / ---- - -# Introduction - -Dyte's Flutter UI Kit is a prebuilt design library of UI components that makes it easy to integrate video and voice calls into any Flutter app within minutes. - -## Usage - -The UI Kit under the hood works on top of the same Core SDK that is publicly available. Core SDK handles all the low-level media and network handling parts -of a meeting and exposes methods and properties that the UI Kit uses - -Uses a layered design structure, allowing you to start with one prebuilt component and slowly go down layers and add custom UI incrementally as your needs evolve. - -- **Use prebuilt component**: You can use prebuilt component to - create your meeting quickly. With this component, you don't have to handle all - the states, dialogs, and other aspects of managing the application. The UI kit - also respect your permissions and theming configuration from the preset. - - For more information, see [UI Kit Quickstart](/flutter/quickstart). - -- **Mix and match**: Use some components from our component library, build some custom components yourself. - -## Supported Versions - -Here are the version requirements: - -- Android SDK version: 23+ -- iOS deployment version: 13.0+ - -## Setup - -In iOS, for downloading attachments in chat, add the following permissions in your app's Info.plist: - -``` -LSSupportsOpeningDocumentsInPlace - -UIFileSharingEnabled - -``` - - - Flutter Introduction - - diff --git a/docs/flutter/meeting-locale.mdx b/docs/flutter/meeting-locale.mdx deleted file mode 100644 index 0d30515035..0000000000 --- a/docs/flutter/meeting-locale.mdx +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Custom Meeting Locale -description: Beginner's guide to Dyte's Flutter UI Kit. -sidebar_position: 4 ---- - -Dyte's Flutter UI Kit allows you to customize the locale of the whole UI Kit. This means you can change the language of the UI Kit to any language you want. You can do this by providing an arb path to the `DyteUIKitBuilder` object. Follow the following steps to achieve the same: - -1. Create an Application Resource Bundle (_.arb_) file and place it in your project's assets folder. The arb file should contain the translations for the UI Kit in the desired language. For example, if you want to change the language to French, you can create a file `fr.arb` and place it in you `/assets/` folder. - -:::info -To know more about ARB files in Flutter, head [here](https://localizely.com/flutter-arb/). -::: - -2. Pass the path of the arb file to the `DyteUIKitBuilder.build()` method. The arb file should be passed as a string. For example, if you have placed the arb file in the assets folder, you can pass the path as `assets/fr.arb` as a second argument as follows: - -```dart -/// assuming Step 1 is completed: - -import 'package:dyte_uikit/dyte_uikit.dart'; - -// Declare and assign a DyteMeetingInfo object. -final DyteMeetingInfo meetingInfo = DyteMeetingInfoV2(authToken: ); - -// Build the DyteUiKit object with the meetingInfo and the arb file path. -final DyteUiKit uikit= DyteUIKitBuilder.build(meetingInfo, 'assets/fr.arb'); - -// Push the uikit widget to the navigator to launch the UI Kit. -Navigator.push(context, MaterialPageRoute(builder: (context) => uikit),); -``` - -You can have the following `keys` in the arb file: - -| `key` | `value` | -| ----------------------------------------------------------------- | -------------------- | -| ------------- **_Newer strings introduced in v0.7.9_** ---------- | -------------------- | -| "endMeetingForAll" | "_\_" | -| "message" | "_\_" | -| "newPollCreated" | "_\_" | -| "waitingToGoLive" | "_\_" | -| "frontCamera" | "_\_" | -| "rearCamera" | "_\_" | -| "externalCamera" | "_\_" | -| "headset" | "_\_" | -| "speaker" | "_\_" | -| "bluetooth" | "_\_" | -| "earpiece" | "_\_" | -| ----------------------------------------------------------- | -------------------- | -| "join" | "_\_" | -| "joinInAs" | "_\_" | -| "enterYourName" | "_\_" | -| "micOn" | "_\_" | -| "micOff" | "_\_" | -| "leave" | "_\_" | -| "cancel" | "_\_" | -| "areYouSureYouWantToLeaveTheCall" | "_\_" | -| "more" | "_\_" | -| "selectAudioDevice" | "_\_" | -| "selectVideoDevice" | "_\_" | -| "videoOn" | "_\_" | -| "videoOff" | "_\_" | -| "mute" | "_\_" | -| "unmute" | "_\_" | -| "unpin" | "_\_" | -| "pin" | "_\_" | -| "kick" | "_\_" | -| "removeFromStage" | "_\_" | -| "screenShare" | "_\_" | -| "plugins" | "_\_" | -| "createPoll" | "_\_" | -| "question" | "_\_" | -| "askAQuestion" | "_\_" | -| "options" | "_\_" | -| "enterAnOption" | "_\_" | -| "addOption" | "_\_" | -| "anonymous" | "_\_" | -| "hideResultsBeforeVoting" | "_\_" | -| "questionAndOptionsCantBeEmpty" | "_\_" | -| "polls" | "_\_" | -| "pollBy" | "_\_" | -| "vote" | "_\_" | -| "voted" | "_\_" | -| "viewVoters" | "_\_" | -| "stopRecording" | "_\_" | -| "startRecording" | "_\_" | -| "muteAll" | "_\_" | -| "disableAllVideos" | "_\_" | -| "settings" | "_\_" | -| "rec" | "_\_" | -| "camera" | "_\_" | -| "microphoneInput" | "_\_" | -| "chat" | "_\_" | -| "noMessages" | "_\_" | -| "chatMessagesWillAppearHere" | "_\_" | -| "file" | "_\_" | -| "image" | "_\_" | -| "send" | "_\_" | -| "participants" | "_\_" | -| "waitlisted" | "_\_" | -| "inCall" | "_\_" | -| "you" | "_\_" | -| "turnOffVideo" | "_\_" | -| "videoAlreadyOff" | "_\_" | -| "dyte" | "_\_" | -| "back" | "_\_" | -| "waitingForTheHostToLetYouIn" | "_\_" | -| "shareScreen" | "_\_" | -| "stopSharing" | "_\_" | - -3. All set, run the app and view the UI Kit in the desired language! - - - Flutter Custom Locale - - diff --git a/docs/flutter/quickstart.mdx b/docs/flutter/quickstart.mdx deleted file mode 100644 index a8717e08de..0000000000 --- a/docs/flutter/quickstart.mdx +++ /dev/null @@ -1,240 +0,0 @@ ---- -title: Quickstart -description: Quickstart guide for Dyte's Flutter UI Kit. -sidebar_position: 2 ---- - -# Quickstart - -This quickstart shows how to use Dyte's Flutter UI Kit SDK to add live video and -audio to your Flutter applications. - -For getting started quickly, you can use our sample code. You can clone and run -a sample application from the -[Flutter UI Kit Sample App GitHub repository](https://github.com/dyte-io/flutter-samples/tree/main/flutter_uikit). - -## Objective - -You’ll learn how to: - -- Install the Dyte SDK -- Configuring Android & iOS permissions -- Initialize the SDK -- Configure a Dyte meeting -- Launch the meeting UI - -## Before Getting Started - -Make sure you've read the -[Getting Started with Dyte](https://docs.dyte.io/getting-started) topic and -completed the steps in the -[Integrate Dyte](https://docs.dyte.io/getting-started#integrate-dyte) section. -You must complete the following steps: - -- Create a [Dyte Developer Account](https://dev.dyte.io/) -- Create [Presets](https://dev.dyte.io/roles-presets) -- Create a - [Dyte Meeting](https://docs.dyte.io/api/?v=v2#/operations/create_meeting) -- [Add Participant](https://docs.dyte.io/api/?v=v2#/operations/add_participant) - to the meeting - -## Step 1: Install the SDK - -Install the SDK from [pub.dev](https://pub.dev). - -```shell - -flutter pub add dyte_uikit - -``` - -## Step 2: Configure permissions for Android and iOS - -Perform the following steps: - -### Android - -Set `compileSdkVersion 33` and `minSdkVersion 21` inside `build.gradle` file at the `/android/app/build.gradle` file. - -```kotlin - defaultConfig { - ... - - compileSdkVersion 33 - minSdkVersion 21 - - ... - } -``` - -And change the kotlin version to `1.9.0` - -```kotlin - ext.kotlin_version = '1.9.0' -``` - -### iOS - -1. Set minimum deployment target for your Flutter app to 13.0 or higher. - -``` -platform :ios, '13.0' -``` - -2. Add the following keys to your `Info.plist` file, located in `/ios/Runner/Info.plist` : - -``` -/* Attach the permission to use camera & microphone. */ -NSBluetoothPeripheralUsageDescription -We will use your Bluetooth to access your Bluetooth headphones. - -NSBluetoothAlwaysUsageDescription -We will use your Bluetooth to access your Bluetooth headphones. - -NSCameraUsageDescription -For people to see you during meetings, we need access to your camera. - -NSMicrophoneUsageDescription -For people to hear you during meetings, we need access to your microphone. - -NSPhotoLibraryUsageDescription -For people to share, we need access to your photos. - - -UIBackgroundModes - - audio - voip - fetch - remote-notification - -``` - -3. In iOS, if you are allowing user to download attachments in chat, add the following permissions in your app's Info.plist: - -``` -LSSupportsOpeningDocumentsInPlace - -UIFileSharingEnabled - -``` - -## Step 3: Configure a Dyte meeting - -To initiate Dyte Meeting for any participant you just need to pass `authToken` as an argument. You can get the `authToken` via the [Add Participant API](https://docs.dyte.io/api?v=v2#/operations/add_participant). - -After getting the `authToken`, you need to create the `DyteMeetingInfoV2` object as follows: - -| Name | Description | -| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `authToken` | After you've created the meeting,
add each participant to the meeting
using the [Add Participant API](/api?v=v2#/operations/add_participant)
(The presetName created earlier
must be passed in the body
of the Add Participant API request)
The API response contains the `authToken`. | -| `baseUrl` | The base URL of the Dyte server. Default value is `https://api.dyte.io/v2`. This is an optional argument. | -| `enableAudio` | A boolean value to enable or disable audio in the meeting. Default value is `true`. This is an optional argument. | -| `enableVideo` | A boolean value to enable or disable video in the meeting. Default value is `true`. This is an optional argument. | - -```dart -final meetingInfo = DyteMeetingInfoV2( - authToken: '', - baseUrl: 'https://api.dyte.io/v2', // optional argument, if you want to pass your own baseUrl - enableAudio: false, // optional argument, to enable or disable audio in the meeting - enableVideo: false, // optional argument, to enable or disable video in the meeting - ); -``` - -## Step 4: Initialize the SDK - -The `DyteUIKit` is the main class of the SDK. It is the entry point and the only -class required to initialize Dyte UI Kit SDK. To initialize it we have to pass `DyteUIKitInfo` object as an argument. - -```dart - -/* Passing the DyteMeetingInfoV2 object `meetingInfo` you created in the Step 3, -*/ - -final uikitInfo = DyteUIKitInfo( - meetingInfo, - // Optional: Pass the DyteDesignTokens object to customize the UI - designToken: DyteDesignTokens( - colorToken: DyteColorToken( - brandColor: Colors.purple, - backgroundColor: Colors.black, - textOnBackground: Colors.white, - textOnBrand: Colors.white, - ), - ), - ); - -final uiKit = DyteUIKitBuilder.build(uiKitInfo: uikitInfo, - skipSetupScreen: true, // optional argument, to skip the setup screen, defaults to false -); - -``` - -:::info Note - -Note: To skip the setup screen, you need to pass the `skipSetupScreen` argument as `true` in the `DyteUIKitBuilder.build` method. - -::: - -You can learn more about customization of the uikit in the [Design System](/flutter/design-token) section. - -## Step 5: Launch the meeting UI - -To launch the meeting you can simply use the object returned after calling `build` method. The `uikit` above is a widget itself. -You can push this widget as a page to start the flow of prebuilt Flutter UI Kit. - -```dart -import 'package:dyte_uikit/dyte_uikit.dart'; -import 'package:flutter/material.dart'; - -class DyteMeetingPage extends StatelessWidget { - const DyteMeetingPage({super.key}); - - @override - Widget build(BuildContext context) { - ... - // Push this widget as page in your app - // Earlier it was uikit.loadUI() which is now deprecated,just use uikit. - return uiKit; - } -} - -``` - -Voila! You're all done. Here is the pictorial representation of all the configuration options passed. - -
- {[ - '/static/mobile/0.x.x/flutter-setup-page.png', - '/static/mobile/0.x.x/flutter-video-call.png', - '/static/mobile/0.x.x/flutter-participant-list.png', - '/static/mobile/0.x.x/flutter-advanced-features.png', - '/static/mobile/0.x.x/flutter-chat.png', - ].map((i) => ( - Image 1 - ))} -
- - - Flutter Quickstart - - diff --git a/docs/flutter/release-notes.mdx b/docs/flutter/release-notes.mdx deleted file mode 100644 index 8e0d78d875..0000000000 --- a/docs/flutter/release-notes.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Release Notes -sidebar_position: 101 -sidebar_class_name: releaseSidebarHeading -tags: - - releasenotes ---- - -import ReleaseNotesGenerator from '@site/src/components/ReleaseNotesGenerator'; - - - - - Flutter Release Notes - diff --git a/docs/guides/authentication.md b/docs/guides/authentication.md new file mode 100644 index 0000000000..ddd0131456 --- /dev/null +++ b/docs/guides/authentication.md @@ -0,0 +1,52 @@ +--- +title: Authentication +sidebar_position: 3 +--- + +# Authentication + +The API has exactly one way to authenticate a request — a single `Authorization: Bearer ` header — but two kinds of token behind it. + +## JWTs, for people + +`POST /auth/register` and `POST /auth/login` both return a token pair: + +```json +{ + "accessToken": "eyJhbGciOiJIUzI1NiIs...", + "refreshToken": "d1b2c3...", + "expiresIn": 900 +} +``` + +- The **access token** goes in `Authorization: Bearer ` and is short-lived — 15 minutes or less. +- The **refresh token** goes to `POST /auth/refresh` to get a new access token, without asking the user to log in again. + +Each refresh token backs a `Session` row (device/IP metadata, absolute 7-day expiry). `GET /auth/sessions` lists them; `DELETE /auth/sessions/:id` or `POST /auth/logout-all` revokes them. Revocation blocks *future* refreshes immediately, but an access token already in flight keeps working until its own natural expiry — plan for a ≤15 minute window between "I revoked this session" and "every request using it actually fails." + +## API keys, for machines + +For a server-to-server integration (an ERP sync, a scheduled import), don't share a human's JWT — mint a dedicated API key instead: + +```http +POST /api/v1/auth/api-clients +Authorization: Bearer +Content-Type: application/json + +{ "name": "ERP sync", "scopes": ["products:write", "inventory:write"] } +``` + +The response includes a key formatted `ospi_.` — store it like a password, it's shown once. Use it exactly like a JWT: `Authorization: Bearer ospi_.`. + +`scopes` must be real, enforced permission codes (see [Roles & Permissions](/guides/roles-and-permissions)) — minting a key requires `org:manage`, and the scopes you request are capped at what your own role can grant. + +## Choosing between them + +| | JWT | API key | +| --- | --- | --- | +| Who | A human, via login | A service/integration | +| Lifetime | Minutes (access) / days (refresh) | Until revoked | +| Revocation | Per session, near-immediate for refresh | `DELETE` the client | +| Scoping | Whatever the user's role grants | Explicit `scopes[]`, capped at the caller's own permissions | + +See [API Reference → Authentication](/api-reference/authentication) for the full endpoint list. diff --git a/docs/guides/capabilities/_category_.json b/docs/guides/capabilities/_category_.json deleted file mode 100644 index f03d7a7f83..0000000000 --- a/docs/guides/capabilities/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "position": 5, - "label": "Capabilities", - "collapsible": true, - "className": "releaseSidebarHeading" -} diff --git a/docs/guides/capabilities/ai/_category_.json b/docs/guides/capabilities/ai/_category_.json deleted file mode 100644 index d06ca9fd4f..0000000000 --- a/docs/guides/capabilities/ai/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 4, - "label": "AI", - "collapsible": true -} diff --git a/docs/guides/capabilities/ai/index.mdx b/docs/guides/capabilities/ai/index.mdx deleted file mode 100644 index 3b0486df52..0000000000 --- a/docs/guides/capabilities/ai/index.mdx +++ /dev/null @@ -1,19 +0,0 @@ -# Meeting AI - -Learn how you can harnesses the power of Artificial Intelligence in Dyte meetings to perform transcription, summarization, and so on. - - - - - - - - Meeting AI Guide - - diff --git a/docs/guides/capabilities/ai/meeting-summary.mdx b/docs/guides/capabilities/ai/meeting-summary.mdx deleted file mode 100644 index 2535dcc973..0000000000 --- a/docs/guides/capabilities/ai/meeting-summary.mdx +++ /dev/null @@ -1,108 +0,0 @@ ---- -sidebar_position: 1 -description: >- - Learn how to generate and utilize meeting summaries with Dyte's AI. - This guide will help you understand and implement summarization features effectively. ---- - -# Meeting Summary - -Dyte's meeting summary feature allows you to automatically generate concise summaries of your meeting based on the transcription data. -This feature makes it easy to capture key points and action items, providing a concise overview of your discussions. - -:::info -To generate a meeting summary, transcription must be enabled. The summarization feature relies on the transcription data to create accurate and meaningful summaries. -::: - -## Enabling Meeting Summarization - -To enable automatic summarization post meeting, you can set the `summarize_on_end` flag when creating a meeting using the [REST API](/api#/operations/create_meeting). - -### Summarization Configuration Options - -You can tailor the summarization process using the following configuration options: - -#### Word Limit - -Define the word limit for the summary, ensuring it fits your needs. You can set a limit between 150 and 1000 words. - -```json lines -"word_limit": 500 -``` - -#### Text Format - -Choose the format for the summary text. Supported formats are: - -- `plain_text` -- `markdown` - -```json lines -"text_format": "markdown" -``` - -#### Summary Type - -Select the type of summary based on the nature of the meeting. Supported types are: - -- `general` -- `team_meeting` -- `sales_call` -- `client_check_in` -- `interview` -- `daily_standup` -- `one_on_one_meeting` -- `lecture` -- `code_review` - -```json lines -"summary_type": "team_meeting" -``` - -### Example Configuration - -Here is an example of how to enable summarization in the meeting creation API call: - -```json -{ - "title": "Team Meeting", - "ai_config": { - "summarization": { - "word_limit": 500, - "text_format": "plain_text", - "summary_type": "team_meeting" - } - }, - "summarize_on_end": true -} -``` - -## Consuming Summaries - -There are two ways to consume the generated summaries: - -1. **Webhooks:** Receive the meeting summary via a webhook after the meeting ends. -2. **API Call:** Fetch the meeting summary using the [REST API](/api#/operations/GetMeetingSummary). - -### Fetching Summary via Webhook - -To receive the meeting summary automatically once the meeting concludes, configure a webhook with the `meeting.summary` event enabled. This can be done either on our [Developer Portal](https://dev.dyte.io/webhooks) or using a [REST API](/api#/operations/addWebhook). - -You can see the webhook format [here](/guides/capabilities/webhooks/webhook-events#meetingsummary). - -### Fetching Summary via API Call - -You can use API to fetch the summary for a meeting at a later time using [REST API](/api#/operations/GetSessionSummary) -Dyte stores the summary of a meeting for 7 days since the start of the meeting. - -## Triggering Summary manually - -If you need to generate a summary after the meeting has ended, you can trigger the summary using [REST API](/api#/operations/post-sessions-session_id-summary). - - - Meeting Summary Guide - - diff --git a/docs/guides/capabilities/ai/meeting-transcription.mdx b/docs/guides/capabilities/ai/meeting-transcription.mdx deleted file mode 100644 index 4a8fcd5c34..0000000000 --- a/docs/guides/capabilities/ai/meeting-transcription.mdx +++ /dev/null @@ -1,173 +0,0 @@ ---- -sidebar_position: 1 -description: >- - Explore meeting transcription capabilities with Dyte's AI. Follow our guide to - understand and implement transcription features. ---- - -# Meeting Transcription - -Dyte's meeting transcription allows you to transcribe your Dyte meetings in real-time, making it easy to capture important discussions and refer back to them later. -This guide will walk you through how to use this feature effectively. - -## Control transcriptions for participants using presets - -You can control whether or not a participant's audio will be transcribe with the help of the `transcription_enabled` flag in the participant's preset. -All participants with the `transcription_enabled` turned on in their preset will be able to generate transcripts in real-time in a Dyte meeting. - -You can create a new preset on our [Developer Portal](https://dev.dyte.io/presets), or using our [REST API](/api#/operations/post-presets). - -## Modify Transcription Behavior with AI Config - -You can control transcription behavior through a configurable AI setup. When creating a meeting using the [REST API](/api#/operations/create_meeting), you can pass an AI configuration for transcriptions. This allows for greater control over the transcription process. - -### Supported Languages - -You can specify the language for transcription to ensure accurate and relevant results. The following languages are supported: - -- _English (United States):_ `en-US` -- _English (India):_ `en-IN` -- _German:_ `de` -- _Hindi:_ `hi` -- _Swedish:_ `sv` -- _Russian:_ `ru` -- _Polish:_ `pl` -- _Greek:_ `el` -- _French:_ `fr` -- _Dutch:_ `nl` -- _Turkish_ `tr` -- _Spanish_ `es` -- _Italian_ `it` -- _Portuguese_ `pt` -- _Romanian_ `ro` -- _Korean_ `ko` -- _Indonesia_ `id` -- _Multi_ `multi` - -```json lines -"language": "en-US" -``` - -### Keywords - -Keywords can be added to help the transcription engine accurately detect and transcribe specific terms, such as names, technical jargon, or other context-specific words. This is particularly useful in meetings where certain terms are frequently used and need to be recognized correctly. - -```json lines -"keywords": ["Dyte", "Mary", "Sue"] -``` - -### Profanity Filter - -You can enable or disable the profanity filter based on your needs. This feature ensures that any offensive language is either included or excluded from the transcriptions, depending on your preference. - -```json lines -"profanity_filter": false -``` - -By utilizing these new features, you can customize the transcription experience to better suit your needs. - -### Example Configuration - -Here is an example of how to pass the AI configuration in the [meeting creation API](/api#/operations/create_meeting): - -```json -{ - "title": "Meeting Transcriptions", - "ai_config": { - "transcription": { - "keywords": ["Dyte"], - "language": "en-US", - "profanity_filter": false - } - } -} -``` - -## Consuming transcripts - -There are 3 ways in which these transcripts can be consumed. - -1. Client core SDK: The transcripts can be consumed on the client-side using the Dyte SDK that's suitable for your platform. These transcripts are generated on the server in real-time. -2. Webhooks: The meeting transcript can be consumed via a [webhook after the meeting ends](#consume-transcript-via-a-post-meeting-webhook). -3. REST API: The meeting transcript can also be fetched via the [rest API](/api#/operations/GetSessionTranscript). - -### Consuming transcripts in real-time - -For consuming transcripts in real-time on the client SDK of your choice, you just need to ensure that the `transcription_enabled` flag is enabled in the preset. -Transcripts for all the participants having this flag set will be broadcasted in the meeting. - -You can use the `meeting.ai` object to access the transcripts. - -```ts -console.log(meeting.ai.transcripts); -``` - -The transcripts are also emitted by the `meeting.ai` object, so a listener can be attached to it. - -```ts -meeting.ai.on('transcript', (transcriptData) => { - console.log('Transcript:', transcriptData); -}); -``` - -As participants speak during the meeting, you'll receive partial transcripts, giving you real-time feedback even before they finish their sentences. The `isPartialTranscript` flag in the transcript data shows whether the transcript is partial or final. - -```json -{ - "id": "1a2b3c4d-5678-90ab-cdef-1234567890ab", - "name": "Alice", - "peerId": "4f5g6h7i-8j9k-0lmn-opqr-1234567890st", - "userId": "uvwxyz-1234-5678-90ab-cdefghijklmn", - "customParticipantId": "abc123xyz", - "transcript": "Hello?", - "isPartialTranscript": true, - "date": "Wed Aug 07 2024 10:15:30 GMT+0530 (India Standard Time)" -} -``` - -In the example above, `isPartialTranscript` is true, indicating the transcript is still in progress. Once the participant finishes speaking, the final transcript will be sent with `isPartialTranscript` set to false. This helps you distinguish between ongoing speech and completed transcriptions, making the transcription process more dynamic and responsive. - -### Consume transcript via a post-meeting webhook - -You can configure a webhook with the `meeting.transcript` event enabled to receive the meeting transcript after the meeting has ended. -You can do this either on our [Developer Portal](https://dev.dyte.io/webhooks), or using a [REST API](/api#/operations/addWebhook). - -You can see the webhook format [here](/guides/capabilities/webhooks/webhook-events#meetingtranscript). - -## Fetch the meeting transcript - -You do not need to rely on the webhook to get the transcript for a meeting. Dyte provides a [REST API](/api#/operations/GetSessionTranscript) using which you can obtain the transcripts for a particular session. -You can use this API to get the transcript for a meeting at a later time. Dyte stores the transcript of a meeting for 7 days since the start of the meeting. - -The transcript is received in the form of a CSV. Here is the format of the said CSV: - -```csv -Timestamp, Participant ID, User ID, Custom Participant ID, Participant Name, Transcript -``` - -The following is a description of all the fields specified in the above CSV. - -1. Timestamp: An ISO 8601 format string indicating the time of utterance (or the time of speech). -2. Participant ID: An identifier for individual peers in the meeting. For instance, if the participant joins the meeting twice, both the "peers" will have the same User ID but different Participant IDs. -3. User ID: An identifier for a participant in the meeting, as returned by the [add participant API call](/api#/operations/add_participant#response-body). -4. Custom Participant ID: An identifier that you can specify to identify a user. This can be sent in the request body of the [add participant API call](/api#/operations/add_participant#request-body). -5. Participant Name: The display name of the user. -6. Transcript: The transcribed utterance. - -## Testing transcription - -Once you have configured a preset and a webhook according to the instructions above, you can proceed to test whether meeting transcription is working for your organization. -To test if meeting transcription has been configured for your organization, perform the following steps. - -1. [Create a meeting](/api#/operations/create_meeting). -2. [Add a participant](/api#/operations/add_participant) to the meeting. Make sure that the preset you use was configured according to this guide. -3. Join the meeting with the `authToken` you just obtained. As you unmute and speak, your speech should be getting transcribed in real-time for all the participants in the meeting. -4. Once the meeting ends, you will be getting a webhook with the event `meeting.transcript`. The body of this webhook will consist of the entire meeting transcript. - - - Meeting Transcription Guide - - diff --git a/docs/guides/capabilities/audio/_category_.json b/docs/guides/capabilities/audio/_category_.json deleted file mode 100644 index 8ba33428e9..0000000000 --- a/docs/guides/capabilities/audio/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 1, - "label": "Audio & Transcriptions", - "collapsible": true -} diff --git a/docs/guides/capabilities/audio/processing.mdx b/docs/guides/capabilities/audio/processing.mdx deleted file mode 100644 index ed950104e0..0000000000 --- a/docs/guides/capabilities/audio/processing.mdx +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Processing - Middlewares -sidebar_position: 1 -sidebar_slug: audio-processing-middlewares ---- - -# Audio Processing - -Dyte's SDK supports middlewares which are pluggable functions that can be applied to both audio and video streams in a meeting. This lets you tap in the media to either observe or modify. This guide covers the following. - -1. Create an audio middleware -2. Add or remove audio middlewares - -## Create an audio middleware
Core
- - - - -Audio can be altered using **ScriptProcessor** and **AudioWorkletProcessor**. We support both ways of performing audio alterations. The middleware function has access to the `audioContext` which can help the developer perform operations on the audio track. Audio middleware function can be synchronous or asychronous and is expected to return a `AudioWorkletNode` or `ScriptProcessorNode`. Here is a sample audio middleware function for your reference: - -```jsx -//Somewhere in your codebase -const meeting = await DyteClient.init(...); - -async function addWhiteNoise(audioContext) { - const moduleScript = ` - class WhiteNoiseProcessor extends AudioWorkletProcessor { - process (inputs, outputs, parameters) { - const output = outputs[0] - output.forEach(channel => { - for (let i = 0; i - - -## Add or remove audio middlewares
Core
- - - - -Middlewares can be added to a meeting, which is why they are associated with a meeting object. To add a audio middleware, you need to call the `addAudioMiddleware`. This method takes in a audio middleware function as a parameter, creating this middleware object was covered in the previous section. To remove a audio middleware, you need to call the `removeAudioMiddleware` method. This method also takes in the audio middleware function as a parameter. - -```jsx -meeting.self.addAudioMiddleware(YourMiddlewareFunction); - -// once done, in a later section remove the middleware -meeting.self.removeAudioMiddleware(YourMiddlewareFunction); -``` - -:::info Note - -In case you are building an Audio Transcriptions middleware or any sort of middleware that doesn’t alter the original audio stream, remember to feed the output channel with whatever you get from inputChannel so that the audio can be sent to the next middleware. Otherwise, a blank audio buffer will be sent to the next middleware. - -::: - -If you'd instead like to perform operations on the audio stream through your own implementation, you can also programatically access the meeting's audio stream. This is accessed from the meeting object. - -```jsx -//Somewhere in your codebase -const meeting = await DyteClient.init(...); - -// You can get the final track which everybody will hear if your microphone is turned on after all the middlewares are applied -meeting.self.audioTrack() - -// You can also get raw audio track which is the raw microphone track before any middlewares are applied to it -meeting.self.rawAudioTrack(); -``` - - - - - - Processing - Middlewares Guide - diff --git a/docs/guides/capabilities/audio/transcriptionAWS.mdx b/docs/guides/capabilities/audio/transcriptionAWS.mdx deleted file mode 100644 index ef09696bfa..0000000000 --- a/docs/guides/capabilities/audio/transcriptionAWS.mdx +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Transcriptions - AWS Transcribe -sidebar_position: 3 -sidebar_slug: transcriptions-aws ---- - -To add the realtime audio transcriptions in a Dyte meeting you can use AWS Transcribe & AWS Translate services - -These AWS services are paid, an AWS account is required to proceed. - -:::note - -This integration is Web only at the moment - -::: - -# Integration Steps - -## 1. Setup AWS IAM account, get credentials - -To use AWS services, you should either be an IAM user, or your backend services should be deployed using roles & policies. - -For ease of use, we are going ahead with IAM user credentials. Please ensure that the IAM user can actually use AWS transcribe & AWS translate services. - -To proceed further, we need - -- `accessKeyId` -- `secretAccessKey` - -## 2. Setup a Server - -Setup a server to forward the Audio Data from client to AWS Transcribe. You don't want to put your IAM credentials on client side and therefore need a server which forwards audio data to AWS - -For this, we have provided the sample in NodeJS for you to checkout [dyte-io/aws-transcribe](https://github.com/dyte-io/aws-transcribe/tree/main/server). Currently, we only have an ExpressJS sample, if you working on a different backend, feel free to port this code or connect with us so that we can help you out in porting it. - -To use this sample, Please clone this using the following command. - -``` -git clone git@github.com:dyte-io/aws-transcribe.git -``` - -### 2.1 Add your keys - -``` -cp .env.example .env -``` - -Edit it as per your AWS service account credentials and Save it. - -### 2.2 Run the server - -``` -npm install -npm run dev -``` - -The HTTP endpoint where this server is accessible will now be called `backend_url` for remaining section of the guide - -## Frontend Setup - -### 3.1 Installation - -``` -npm install @dytesdk/aws-transcribe -``` - -Source available at (dyte-io/aws-transcribe)(https://github.com/dyte-io/aws-transcribe/tree/main/client) - -### 3.2 Integrate - -The second step is to look for the place in your codebase where you are initiating a Dyte meeting. - -Once you have found the place and got a hold of the meeting object. Add the following code on top of the file to import the FE SDK. - -``` -import DyteAWSTranscribe from '@dytesdk/aws-transcribe'; -``` - -Add the following code just after the point where you have access to the meeting object. - -```ts -const awsTranscribe = new DyteAWSTranscribe({ - meeting, - target: 'hi', // Optional if translate is false, Supported languages: https://docs.aws.amazon.com/translate/latest/dg/what-is-languages.html - translate: true, // Control whether to translate the source language to target language or just transcribe - source: 'en-US', // Supported languages: https://docs.aws.amazon.com/translate/latest/dg/what-is-languages.html - preSignedUrlEndpoint: 'http://localhost:3001/aws-transcribe-presigned-url', - translationEndpoint: 'http://localhost:3001/translate', // ${backend_url}/translate. backend_url is from step 2.4 -}); - -awsTranscribe.on('transcription', async (data) => { - // ... do something with transcription -}); - -awsTranscribe.transcribe(); -``` - -Here you are setting up the DyteAWSTranscribe with the values that the current user would prefer and activating the recognition just afterward using awsTranscribe.transcribe(). Then we are listening to every new transcription using awsTranscribe.on('transcription', aJsCallbackFunction) - -To see the support languages, please refer to https://docs.aws.amazon.com/transcribe/latest/dg/supported-languages.html and https://docs.aws.amazon.com/translate/latest/dg/what-is-languages.html. - -With this, now you would be able to receive the live transcriptions. Feel free to put them in UI as per your need. - -If you need a sample of this guide, please refer to https://github.com/dyte-io/aws-transcribe/blob/main/client/demo/index.ts. - - - Transcriptions - AWS Transcribe Guide - diff --git a/docs/guides/capabilities/audio/transcriptionGoogle.mdx b/docs/guides/capabilities/audio/transcriptionGoogle.mdx deleted file mode 100644 index 3724deeceb..0000000000 --- a/docs/guides/capabilities/audio/transcriptionGoogle.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Transcriptions - Google STT -sidebar_position: 4 -sidebar_slug: transcriptions-google ---- - -To add the realtime audio transcriptions in a Dyte meeting you can use Google Cloud Speech-to-Text and Cloud translation APIs. - -These Google services are paid, a Google Cloud account is required to proceed. - -:::note - -This integration is Web only at the moment - -::: - -# Integration Steps - -## 1. Setup Google Cloud Credentials - -You must have a project & a service account with GCP (Google Cloud Platform) to use Google transcriptions. Make sure that service account allows Google Speech-to-Text and Google Translation API. - -Once done, download the keys for the service account. - -## 2. Setup a Server - -Setup a server to forward the Audio Data from client to Google Cloud. You don't want to put your GCP credentials on client side and therefore need a server which forwards audio data to Google Cloud - -For this, we have provided a sample in NodeJS for you to checkout (dyte-io/google-transcription)[https://github.com/dyte-io/google-transcription/tree/main/server]. Please find it here. Currently, we only have NodeJS samples; if you're working on a different backend, feel free to port this code. - -To use this sample, please clone the repository using the following command. - -``` -git clone git@github.com:dyte-io/google-transcription.git -``` - -### 2.1 Environment Setup - -``` -cp .env.example .env -``` - -Edit the `.env` file as per your GCP service account credentials and Save it. - -Note: PRIVATE_KEY should be in a single line. Try picking the value from the service account's key's JSON file as is. - -### 2.2 Run the server - -``` -npm install -``` - -This would automatically install @google-cloud/speech, and @google-cloud/translate. - -``` -npm run dev -``` - -The HTTP endpoint where this server is accessible will now be called `backend_url` for remaining section of the guide - -## Frontend Setup - -### 3.1 Installation - -``` -npm install @dytesdk/google-transcription -``` - -Source available at (dyte-io/google-transcription)(https://github.com/dyte-io/google-transcription/tree/main/client) - -### 3.2 Integrate - -The second step is to look for the place in your codebase where you are initiating a Dyte meeting. - -Once you have found the place and got a hold of the meeting object, add the following code to the file to import the SDK. - -``` -import DyteGoogleSpeechRecognition from '@dytesdk/google-transcription'; -``` - -Add the following code just after the point where you have access to the meeting object. - -```ts -const speech = new DyteGoogleSpeechRecognition({ - meeting, // Dyte meeting object from DyteClient.init - target: 'hi', // Language that the current user wants to see - source: 'en-US', // Language that the current user would speak in - baseUrl: , // Backend URL from step 2.2 -}); - -speech.on('transcription', async (data) => { - // ... do something with transcription -}); - -speech.transcribe(); -``` - -Here you are setting up the GoogleSpeechRecognition with the values that the current user would prefer and activating the recognition just afterward using speech.transcribe(). Then we listen to every new transcription using speech.on('transcription', aJsCallbackFunction) - -To see the support languages, please refer to - -- https://cloud.google.com/speech-to-text/docs/speech-to-text-supported-languages -- https://cloud.google.com/translate/docs/languages - -With this, you would now be able to receive the live transcriptions. -Feel free to put them in UI as per your need. - -If you need a sample of this guide, please refer to https://github.com/dyte-io/google-transcription/blob/main/client/demo/index.ts - - - Transcriptions - Google STT Guide - diff --git a/docs/guides/capabilities/audio/transcriptions.mdx b/docs/guides/capabilities/audio/transcriptions.mdx deleted file mode 100644 index 68dce6353c..0000000000 --- a/docs/guides/capabilities/audio/transcriptions.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Transcriptions -sidebar_position: 2 -sidebar_slug: transcriptions-inbuilt ---- - -# Meeting Transcription - -Dyte's meeting transcription allows you to transcribe your Dyte meetings in real-time, making it easy to capture important discussions and refer back to them later. -This guide will walk you through how to use this feature effectively. - -## Control transcriptions for participants using presets - -You can control whether or not a participant's audio will be transcribe with the help of the `transcription_enabled` flag in the participant's preset. -All participants with the `transcription_enabled` turned on in their preset will be able to generate transcripts in real-time in a Dyte meeting. - -You can create a new preset on our [Developer Portal](https://dev.dyte.io/presets), or using our [REST API](/api#/operations/post-presets). - -## Consuming transcripts - -There are 3 ways in which these transcripts can be consumed. - -1. Client core SDK: The transcripts can be consumed on the client-side using the Dyte SDK that's suitable for your platform. These transcripts are generated on the server in real-time. -2. Webhooks: The meeting transcript can be consumed via a [webhook after the meeting ends](#consume-transcript-via-a-post-meeting-webhook). -3. REST API: The meeting transcript can also be fetched via the [rest API](/api#/operations/GetSessionTranscript). - -### Consuming transcripts in real-time - -For consuming transcripts in real-time on the client SDK of your choice, you just need to ensure that the `transcription_enabled` flag is enabled in the preset. -Transcripts for all the participants having this flag set will be broadcasted in the meeting. - -You can use the `meeting.ai` object to access the transcripts. - -```ts -console.log(meeting.ai.transcripts); -``` - -The transcripts are also emitted by the `meeting.ai` object, so a listener can be attached to it. - -```ts -meeting.ai.on('transcript', (transcriptData) => { - console.log('Transcript:', transcriptData); -}); -``` - -### Consume transcript via a post-meeting webhook - -You can configure a webhook with the `meeting.transcript` event enabled to receive the meeting transcript after the meeting has ended. -You can do this either on our [Developer Portal](https://dev.dyte.io/webhooks), or using a [REST API](/api#/operations/addWebhook). - -You can see the webhook format [here](/guides/capabilities/webhooks/webhook-events#meetingtranscript). - -## Fetch the meeting transcript - -You do not need to rely on the webhook to get the transcript for a meeting. Dyte provides a [REST API](/api#/operations/GetSessionTranscript) using which you can obtain the transcripts for a particular session. -You can use this API to get the transcript for a meeting at a later time. Dyte stores the transcript of a meeting for 7 days since the start of the meeting. - -The transcript is received in the form of a CSV. Here is the format of the said CSV: - -```csv -Timestamp, Participant ID, User ID, Custom Participant ID, Participant Name, Transcript -``` - -The following is a description of all the fields specified in the above CSV. - -1. Timestamp: An ISO 8601 format string indicating the time of utterance (or the time of speech). -2. Participant ID: An identifier for individual peers in the meeting. For instance, if the participant joins the meeting twice, both the "peers" will have the same User ID but different Participant IDs. -3. User ID: An identifier for a participant in the meeting, as returned by the [add participant API call](/api#/operations/add_participant#response-body). -4. Custom Participant ID: An identifier that you can specify to identify a user. This can be sent in the request body of the [add participant API call](/api#/operations/add_participant#request-body). -5. Participant Name: The display name of the user. -6. Transcript: The transcribed utterance. - -## Testing transcription - -Once you have configured a preset and a webhook according to the instructions above, you can proceed to test whether meeting transcription is working for your organization. -To test if meeting transcription has been configured for your organization, perform the following steps. - -1. [Create a meeting](/api#/operations/create_meeting). -2. [Add a participant](/api#/operations/add_participant) to the meeting. Make sure that the preset you use was configured according to this guide. -3. Join the meeting with the `authToken` you just obtained. As you unmute and speak, your speech should be getting transcribed in real-time for all the participants in the meeting. -4. Once the meeting ends, you will be getting a webhook with the event `meeting.transcript`. The body of this webhook will consist of the entire meeting transcript. - - - Transcriptions Guide - diff --git a/docs/guides/capabilities/breakoutroom/_category_.json b/docs/guides/capabilities/breakoutroom/_category_.json deleted file mode 100644 index 44e4741b6e..0000000000 --- a/docs/guides/capabilities/breakoutroom/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 7, - "label": "Breakout Rooms", - "collapsible": true -} diff --git a/docs/guides/capabilities/breakoutroom/create-breakout-rooms.mdx b/docs/guides/capabilities/breakoutroom/create-breakout-rooms.mdx deleted file mode 100644 index b2b1badeba..0000000000 --- a/docs/guides/capabilities/breakoutroom/create-breakout-rooms.mdx +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: Create a Breakout Room -sidebar_position: 2 -description: >- - Learn how to create breakout rooms with Dyte's capabilities. Follow our guide - for effective implementation and management of breakout rooms. ---- - -Breakout rooms allow the participants to split in separate sessions. The host can create breakout rooms, assign participants, start and close the breakout rooms. - -## Prerequisites - -- For hosts ensure that you've created a preset with the Full Access permissions. See [hosts permissions](/guides/capabilities/breakoutroom/create-breakout-rooms#host). -- For participants you've created a preset with Switch to Parent Meeting and/or Switch Connected Meetings permissions. See [participants permissions](/guides/capabilities/breakoutroom/create-breakout-rooms#participants). - -To create a breakout room, do the following: - -## Step 1: Create a Dyte Developer Account​ - -Login to the [Developer Portal](https://dev.dyte.io/) and create an account. - -## Step 2: Create Presets​ - -A preset is a set of permissions and UI configurations that are applied to hosts and participants. They determine the look, feel, and behavior of the breakout room, with options to set varied permissions, such as the ability to create polls or chat, control access for plugins, and more. - -For breakout rooms, you must provide the following permissions for hosts and participants in the **Connected Meetings**. However, ensure that you've provided other necessary permissions as well for your meeting other than the **Connected Meetings** permissions for hosts and participants. - -### Host - -| **Full Access** | **Permission** | -| ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | -| breakout-room-perms | Allows you to create breakout rooms, assign participants, start and close the breakout rooms, switch between breakout rooms. | - -### Participants - -| **Switch Connected Meetings** | **Permission** | -| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| breakout-room-part-perms | Allows you to create breakout rooms, assign participants, start and close the breakout rooms, switch between breakout rooms. | - -| **Switch to Parent Meeting** | **Permission** | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -| breakout-room-switch-perms | Allows you to switch to the main meeting. | - -You can choose to provide **Switch Connected Meetings** and **Switch to Parent Meeting** permissions both to the participants. - -## Step 3: Save the Preset Changes​ - -1. Once you've made all the changes that you need to add to your preset, click **Save** at the right-corner. -2. Enter the name for your preset and click **Save**. -3. Your preset is listed. Click **Edit** to make any changes to the preset. - -## Step 4: Create a Meeting​ - -Create a Dyte meeting using the [Create Meeting API](/api#/operations/create_meeting). This API returns a unique identifier for your meeting. - -## Step 5: Add Participants​ - -After you've created the meeting, add each participant to the meeting using the [Add Participant API](/api#/operations/add_participant). -The `presetName` created earlier must be passed in the body of the Add Participant API request. - -## Step 6: Start Breakout Room - -1. In your Dyte meeting, click **Breakout Rooms**. - -breakout-room - -2. In the **Create Breakout**, add the number of rooms you want and click **Create**. - -breakout-room - -Once you've created a breakout room, assign participants to the breakout rooms. You have the option to either individually select the participants and add them to the room manually or allow Dyte to split your participants evenly across the rooms. - -### Assign participants automatically - -To assign participants automatically, do the following: - -1. In the **Assign Participants**, click the shuffle button. - -breakout-room - -2. Participants are assigned to the rooms. - -breakout-room-assign-participants - -3. You can also edit the room names. To edit the room name, click the pencil icon beside the room name. - -breakout-room-edit-participants - -4. You can also choose to move the participants to different rooms. - -5. Once you've made all the changes, click **Start Breakout**. - -6. Click **Yes, start** in the **Start breakout rooms** pop-up. You will enter the breakout room. - -### Assign participants manually - -You can select which participants you would like in each room. To assign participants manually, do the following: - -1. In the **Assign Participants**, select the participant/s that you want to assign to a room. - -breakout-room-assign-manual - -2. In the **Rooms**, click **Assign**. - -3. Once you've assigned all the participants to the rooms of your choice, click **Start Breakout**. - -4. Click **Yes, start** in the **Start breakout rooms** pop-up. You will enter the breakout room. - - - Create a Breakout Room Guide - - diff --git a/docs/guides/capabilities/breakoutroom/integrating-breakout-rooms.mdx b/docs/guides/capabilities/breakoutroom/integrating-breakout-rooms.mdx deleted file mode 100644 index ac95a7c69d..0000000000 --- a/docs/guides/capabilities/breakoutroom/integrating-breakout-rooms.mdx +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: Integrating Breakout Rooms -sidebar_position: 3 ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; -import { WebCoreCDNInstallation } from '@site/src/components/LatestInstallation'; - -## Step 1: Install the SDK - -You can install the package using CDN, npm or Yarn. - - - -Install the SDK using npm. - -```shell -npm install @dytesdk/web-core -``` - -[![npm version](https://badge.fury.io/js/@dytesdk%2Fweb-core.svg)](https://badge.fury.io/js/@dytesdk%2Fweb-core) - - - -Install the SDK using yarn. - -```shell -yarn add @dytesdk/web-core -``` - -[![npm version](https://badge.fury.io/js/@dytesdk%2Fweb-core.svg)](https://badge.fury.io/js/@dytesdk%2Fweb-core) - - - -Add the following script tag in the head of your HTML file. - - - - - -## Step 2: Initialize the SDK - -| | | -| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `authToken` | After you've created the meeting, add each participant to the meeting using the [Add Participant API](/api#/operations/add_participant). The API response contains the authToken. | - -```js -let meeting = await DyteClient.init({ - authToken, -}); - -// add additional event handler for breakout rooms -meeting.connectedMeetings.on('meetingChanged', (newMeeting) => { - meeting = newMeeting; -}); -``` - -## Step 3: Pass the meeting object to pre-built ui component - - - - -```html - - - - -``` - -For detailed guide, check out - https://docs.dyte.io/ui-kit/quickstart - - - - -```jsx - -``` - -For detailed guide, check out - https://docs.dyte.io/react-ui-kit/quickstart - - - - -```js -class AppComponent { - title = 'MyProject'; - @ViewChild('myid') meetingComponent: DyteMeeting; - dyteMeeting: DyteClient; - - async ngAfterViewInit() { - const meeting = await DyteClient.init({ - authToken: '', - }); - meeting.join(); - this.dyteMeeting = meeting; - if (this.meetingComponent) this.meetingComponent.meeting = meeting; - } -} -``` - -For detailed guide, check out - https://docs.dyte.io/angular-ui-kit/quickstart - - - - - - Integrating Breakout Rooms Guide - diff --git a/docs/guides/capabilities/breakoutroom/introduction-breakout-rooms.mdx b/docs/guides/capabilities/breakoutroom/introduction-breakout-rooms.mdx deleted file mode 100644 index 8b52aab667..0000000000 --- a/docs/guides/capabilities/breakoutroom/introduction-breakout-rooms.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Introduction to Dyte's Breakout Rooms -sidebar_position: 1 -description: >- - Get an introduction to breakout rooms with Dyte's capabilities. Follow our - guide for a smooth understanding and integration. ---- - -:::info Beta -The breakout rooms feature is currently in beta, which means it is still being tested and evaluated, and may undergo some change. Please [contact us](https://dyte.io/contact) if you encounter any issues or have suggestions for improvements to the feature. -::: - -Breakout rooms allow participants of a meeting to split into smaller groups for targeted discussions and collaboration. With the rise of remote work and online learning, breakout rooms have become an essential tool for enhancing engagement and building community in virtual settings. They are an ideal choice for workshops, online classrooms, or even if you require a moment to speak privately with a select few participants outside the main meeting. - -:::info note - -Currently, Dyte breakout rooms are supported on the web only. - -::: - -## Key features of Dyte's breakout rooms - -The following are some of the key features of Dyte's breakout rooms: - -- You can manage permissions and privileges of [hosts](/guides/capabilities/breakoutroom/create-breakout-rooms#hosts) and [participants](/guides/capabilities/breakoutroom/create-breakout-rooms#participants) using presets. -- Hosts can create breakout rooms, assign participants, start and close the breakout rooms, and switch between rooms. -- Participants can start and stop video any time, interact with the participants in the breakout rooms using chat and polls, mute and unmute the audio at any time. -- You can record all the breakout sessions individually like any other Dyte meeting. - -## Roles in a breakout room - -Roles in the breakout room are managed by the presets. - -**Host**: Hosts can create breakout rooms, assign participants, start and close the breakout rooms, switch between rooms. - -**Participants**: As a participant in a breakout room, you can do the following: - -- Switch to Parent Meeting: You can switch to the main meeting (only if you've the required permissions). -- Switch Connected Meetings: You can switch from the main meeting to smaller, more focused discussion groups (breakout rooms) where you can collaborate and exchange ideas. You can collaborate using tools such as chat and poll. - -| **Features** | **Host** | **Participants** | -| -------------------------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| Create breakout rooms | Yes | No | -| Assign participants to a breakout room | Yes | No | -| Switch between breakout rooms | Yes | Yes (if you've the required [permissions](/guides/capabilities/breakoutroom/create-breakout-rooms#participants)) | -| Record the breakout rooms | Yes (you must be an admin for the meeting or the required permissions to record the meeting) | Yes (you must be an admin for the meeting or the required permissions to record the meeting) | -| Interact within the breakout room, send chat, poll | Yes | Yes | - -## Audio and video in a breakout room - -Each breakout room functions as an independent meeting. When you switch to a breakout room from the main meeting, it automatically switches over to the audio and video of the breakout session. You can mute or unmute your audio and start or stop your video at any time during the breakout session, just as you can in the main meeting. - -When the breakout session ends, your audio and video automatically switches back to the main meeting. - -- If your video was turned on during a breakout session, it will remain on when you return to the main session. -- However, your audio will be muted or turned off when you switch back to the main meeting. - -## Recording of breakout sessions - -As mentioned earlier, each breakout session is a separate session. Each breakout session's recording is stored and managed separately, just like any other Dyte meeting. For more information on Dyte recording, see the [Recording Overview](/guides/capabilities/recording/recording-overview). - - - Introduction to Dyte's Breakout Rooms Guide - - diff --git a/docs/guides/capabilities/chat/_category_.json b/docs/guides/capabilities/chat/_category_.json deleted file mode 100644 index dbe2c84466..0000000000 --- a/docs/guides/capabilities/chat/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 4, - "label": "Chat", - "collapsible": true -} diff --git a/docs/guides/capabilities/chat/export-chat-dump.mdx b/docs/guides/capabilities/chat/export-chat-dump.mdx deleted file mode 100644 index 517124b022..0000000000 --- a/docs/guides/capabilities/chat/export-chat-dump.mdx +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: Export Chat Messages -sidebar_position: 8 -sidebar_slug: export-chat-dump ---- - -# Export Chat of a Session - -You can programmatically retrieve all chat messages of a Dyte session in the following ways: - -- Using [Chat Replay API](/api/?v=v2#/operations/GetSessionChat) -- Setting up webhook for the [meeting.chatSynced](/guides/capabilities/webhooks/webhook-events#meetingchatsynced) event - -This guide walks you through the steps involved in exporting chat dump of a session using Chat Replay API. - -If you wish to use webhooks, see [Set Up Webhooks](/guides/capabilities/webhooks/webhooks-and-events) and [meeting.chatSynced](/guides/capabilities/webhooks/webhook-events#meetingchatsynced). - -Once [Chat Replay API](/api/?v=v2#/operations/GetSessionChat) is enabled, do the -following: - -1. Get the `chat_download_url` using - [Chat Replay API](/api/?v=v2#/operations/GetSessionChat). -2. Download the chat dump CSV file. - -## Get `chat_download_url` - -To get the `chat_download_url`, make a `HTTP GET` request to -[Chat Replay API](/api/?v=v2#/operations/GetSessionChat). The API returns the -following: - -```json -{ - "success": true, - "data": { - "chat_download_url": "string", - "chat_download_url_expiry": "string" - } -} -``` - -- The `chat_download_url` is a URL that allows you to download the entire chat dump of a session in CSV format from AWS S3. -- `chat_download_url_expiry` indicates the expiry timestamp of the `chat_download_url`. If the `chat_download_url` gets expired, simply call this endpoint again to obtain a new download URL. - -## Download the chat dump file - -You can download the chat dump file in CSV format by making `HTTP GET` request -to `chat_download_url` that you obtained in the previous step. - -The process of downloading any file from a HTTP URL in JavaScript differs -slightly based on whether you are doing it on client side or server side. - -### Download on the client - -To download at client side, do the following: - -1. Make a GET request to the `chat_download_url`. -2. Convert response to blob. -3. Create an invisible `` HTML element with download attribute and add the - above blob to it's `href`. -4. Programmatically click on the `` element so that the browser automatically - starts downloading and then remove the `` element. - -### Download on the server - -We use `Node.js` streams to download files on the server, so the steps are as -follows: - -1. Create a writable stream for a local file. -2. Make a GET request to `chat_download_url`. -3. Get a readable stream using `res.body` and pipe to the writable stream - created in the first step. - -## Example: CSV chat dump file - -This CSV file contains all the chat messages along with the participant's name -and some other metadata. It includes the following column headings: - -- `id`: Unique chat message ID -- `participantId`: ID of the participant who sent the message -- `sessionId`: The session ID from which the chat message was sent -- `meetingId`: The ID of the meeting to which this session belongs -- `displayName`: Display name of the participant who sent this message -- `pinned`: A boolean that indicates if the current message was pinned or not -- `isEdited`: A boolean that indicates if the current message was edited or not -- `payloadType`: An ENUM that indicates the type of payload sent in the chat - message. It can be one of TEXT_MESSAGE, IMAGE_MESSAGE, FILE_MESSAGE -- `payload`: The actual payload sent in the chat message -- `createdAt`: Timestamp when this chat message was sent - -![Sample Chat Dump File](https://dyte.io/blog/content/images/size/w1600/2022/11/Dyte-Blog---Sample-Chat-Dump.png) - -For more information on downloading the file, refer to -[How to Fetch Chat History of a Dyte Session](https://dyte.io/blog/fetch-chat-history-of-a-dyte-session/) -blog. - - - Export Chat Messages Guide - - diff --git a/docs/guides/capabilities/misc/_category_.json b/docs/guides/capabilities/misc/_category_.json deleted file mode 100644 index 8fe502aae5..0000000000 --- a/docs/guides/capabilities/misc/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "position": 9, - "label": "Misc", - "collapsible": true -} diff --git a/docs/guides/capabilities/misc/embed.mdx b/docs/guides/capabilities/misc/embed.mdx deleted file mode 100644 index 8c7bd8590c..0000000000 --- a/docs/guides/capabilities/misc/embed.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: No code Integration -sidebar_position: 5 ---- - -# No Code Integration - -You can easily integrate Dyte into your project without any SDK using an iFrame. An iFrame is a quick and easy way to embed a live video solution into your own website or application without modifying the underlying code. - -You can use iFrame for a variety of reasons, including lack of resources, technical expertise, or simply a preference for a lighter integration method. -You simply need to add a small piece of HTML code to your website or application. - -## Before Getting Started - -- Create a [Dyte Developer Account](https://dev.dyte.io/) -- Create a - [Dyte Meeting](/api/?v=v2#/operations/create_meeting) -- [Add Participant](/api/?v=v2#/operations/add_participant) - to the meeting - -## Embed using an iFrame - -Pass your options with meeting ID auth token in the URL query. Here's an example with all the available options: - -```html -