From ae575678ece8f28f8bca77b4e8642095e37c1b44 Mon Sep 17 00:00:00 2001 From: quacumque Date: Thu, 20 Feb 2025 15:52:25 +0900 Subject: [PATCH 1/5] fix: extend default theme correctly Signed-off-by: quacumque --- .vitepress/theme/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index e923fafdb..3b8bb4e56 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -10,7 +10,7 @@ import './style/index.scss' import { defineAsyncComponent } from 'vue' export default { - ...ThemeDefault, + extends: ThemeDefault, Layout: LayoutCustom, enhanceApp({ app }: EnhanceAppContext) { app.component('MermaidRenderWrap', MermaidRenderWrap) @@ -23,4 +23,4 @@ export default { defineAsyncComponent(async () => import('./components/CompatibilityMatrixTableIcon.vue')), ) }, -} +} satisfies import('vitepress').Theme From 5b68617faf50fc6b6f3bd4b9af0e14fcc1933937 Mon Sep 17 00:00:00 2001 From: quacumque Date: Thu, 20 Feb 2025 15:52:46 +0900 Subject: [PATCH 2/5] docs: update torii reference according to `rc.1.0` Signed-off-by: quacumque --- src/reference/torii-endpoints.md | 344 +++++++++++++++++++------------ 1 file changed, 212 insertions(+), 132 deletions(-) diff --git a/src/reference/torii-endpoints.md b/src/reference/torii-endpoints.md index 0796c380a..cd5c4f8b6 100644 --- a/src/reference/torii-endpoints.md +++ b/src/reference/torii-endpoints.md @@ -2,15 +2,26 @@ ::: tip About Parity SCALE Codec -Messages for certain `TORII` operations are encoded with the Parity SCALE Codec (`SCALE`) commonly used with the [Parity Substrate](https://www.parity.io/technologies/substrate/) blockchain framework, and other blockchains utilizing it. +Messages for certain `TORII` operations are encoded with the Parity +SCALE Codec +(`SCALE`) commonly used with the +[Parity Substrate](https://www.parity.io/technologies/substrate/) blockchain +framework, and other blockchains utilizing it. -For more information on `SCALE`, see the [Substrate Documentation: Type encoding (SCALE)](https://docs.substrate.io/reference/scale-codec/) article and its [official GitHub repository](https://github.com/paritytech/parity-scale-codec). +For more information on `SCALE`, see the +[Substrate Documentation: Type encoding (SCALE)](https://docs.substrate.io/reference/scale-codec/) +article and its +[official GitHub repository](https://github.com/paritytech/parity-scale-codec). ::: -Torii (Japanese: 鳥居 — Shinto shrine gateway) is the Iroha 2 module in charge of handling `HTTP` and `WebSocket` requests. It is the main API for interacting with Iroha 2. Such interactions include sending transactions, making queries, listening for blocks stream, etc. +Torii (Japanese: 鳥居 — Shinto shrine gateway) is the Iroha 2 module in charge +of handling `HTTP` and `WebSocket` requests. It is the main +API for interacting with +Iroha 2. Such interactions include sending transactions, making queries, +listening for blocks stream, etc. +[[toc]] + ## API Version ::: info -This operation requires the specific Iroha node being requested to be compiled with the `telemetry` feature enabled. +This operation requires the specific Iroha node being requested to be compiled +with the `telemetry` feature enabled. @@ -73,7 +87,10 @@ A `GET` request to the endpoint. ::: info -The API version is retrieved from and is the same as the version of the [genesis block](../guide/configure/genesis.md), which means that at least a minimal subnet of four peers must be running, and the genesis block must already be submitted at the time of the request. +The API version is retrieved from and is the same as the version of the +[genesis block](../guide/configure/genesis.md), which means that at least a +minimal subnet of four peers must be running, and the genesis block must already +be submitted at the time of the request. ::: @@ -85,11 +102,20 @@ The API version is retrieved from and is the same as the version of the [genesis #### Handshake -Since the `/block/stream` endpoint handles continuous two-way data exchange, a `WebSocket` handshake between the client and server must first be performed to initiate communication with this endpoint. +Since the `/block/stream` endpoint handles continuous two-way data exchange, a +`WebSocket` handshake between the client and server must first be performed to +initiate communication with this endpoint. #### Data Exchange -After establishing a `WebSocket` connection, the client must send a [`BlockSubscriptionRequest`](/reference/data-model-schema#blocksubscriptionrequest) request with the starting block number provided (i.e., the `height` value). Then, upon sending the confirmation and [`BlockMessage`](/reference/data-model-schema#blockmessage) messages, the server starts streaming all of the blocks, beginning with the block specified with `height` up to the most recent one, and then continues to stream new blocks as they are added to the blockchain. +After establishing a `WebSocket` connection, the client must send a +[`BlockSubscriptionRequest`](/reference/data-model-schema#blocksubscriptionrequest) +request with the starting block number provided (i.e., the `height` value). +Then, upon sending the confirmation and +[`BlockMessage`](/reference/data-model-schema#blockmessage) messages, the server +starts streaming all of the blocks, beginning with the block specified with +`height` up to the most recent one, and then continues to stream new blocks as +they are added to the blockchain. ## Configuration / Retrieve @@ -120,7 +146,9 @@ A `GET` request to the endpoint. ::: info -The subset of configuration parameters returned by this operation is equal to the one accepted by the [Configuration / Update](#configuration-update) operation, i.e., it only contains the `logger.level` parameter as of now. +The subset of configuration parameters returned by this operation is equal to +the one accepted by the [Configuration / Update](#configuration-update) +operation, i.e., it only contains the `logger.level` parameter as of now. ::: @@ -133,15 +161,21 @@ The subset of configuration parameters returned by this operation is equal to th #### Requests -This endpoint expects a subset of configuration parameters serialized into JSON format. Currently, it only supports dynamic updating of the `logger.level` parameter. +This endpoint expects a subset of configuration parameters serialized into JSON +format. Currently, it only supports dynamic updating of the `logger.level` +parameter. ::: info -The list of all accepted values is currently unavailable and will be a part of the configuration reference that is still WIP. +The list of all accepted values is currently unavailable and will be a part of +the configuration reference that is still +WIP. -Until then, to get assistance with the acceptable values and their definitions, consult [Receive Support](/help/) for ways to contact us. +Until then, to get assistance with the acceptable values and their definitions, +consult [Receive Support](/help/) for ways to contact us. -The progress on the configuration reference can be tracked in the following GitHub issue:\ +The progress on the configuration reference can be tracked in the following +GitHub issue:\ [iroha-2-docs > Issue #392: Tracking issue for Configuration Reference as per RFC](https://github.com/hyperledger-iroha/iroha-2-docs/issues/392). ::: @@ -164,7 +198,10 @@ The progress on the configuration reference can be tracked in the following GitH ::: tip Guarantees -A successful configuration update does not guarantee that the configuration is indeed updated. While a follow-up [Configuration / Retrieve](#configuration-retrieve) request will return updated values, the actual update is performed asynchronously. +A successful configuration update does not guarantee that the configuration is +indeed updated. While a follow-up +[Configuration / Retrieve](#configuration-retrieve) request will return updated +values, the actual update is performed asynchronously. ::: @@ -178,21 +215,37 @@ A successful configuration update does not guarantee that the configuration is i The status of a transaction event can be one of the following: -- `Validating` — The transaction has been successfully submitted and is currently being validated by peers. -- `Committed` — The transaction has been successfully validated and is committed to the blockchain. -- `Rejected` — The transaction has been rejected by at least one peer and is __not__ committed to the blockchain. - -All transactions are designated with the `Validating` status upon creation, which later proceeds to either `Committed` or `Rejected`. However, due to the distributed nature of the network, some peers might receive events out of order (e.g., `Committed` before `Validating`). - -Some peers in the network may be offline for the validation round. If a client connects to them while they are offline, the peers might not respond with the `Validating` status. But when the offline peers come back online they will automatically synchronize the blocks. These peers are then guaranteed to respond with either `Committed` or `Rejected` status, depending on the information found in the block. +- `Validating` — The transaction has been successfully submitted and is + currently being validated by peers. +- `Committed` — The transaction has been successfully validated and is committed + to the blockchain. +- `Rejected` — The transaction has been rejected by at least one peer and is + **not** committed to the blockchain. + +All transactions are designated with the `Validating` status upon creation, +which later proceeds to either `Committed` or `Rejected`. However, due to the +distributed nature of the network, some peers might receive events out of order +(e.g., `Committed` before `Validating`). + +Some peers in the network may be offline for the validation round. If a client +connects to them while they are offline, the peers might not respond with the +`Validating` status. But when the offline peers come back online they will +automatically synchronize the blocks. These peers are then guaranteed to respond +with either `Committed` or `Rejected` status, depending on the information found +in the block. #### Handshake -Since the `/events` endpoint handles continuous two-way data exchange, a `WebSocket` handshake between the client and server must first be performed to initiate communication with this endpoint. +Since the `/events` endpoint handles continuous two-way data exchange, a +`WebSocket` handshake between the client and server must first be performed to +initiate communication with this endpoint. #### Data Exchange -After establishing a `WebSocket` connection, the client must send an [`EventSubscriptionRequest`](/reference/data-model-schema#eventsubscriptionrequest) request, after which the server sends an [`EventMessage`](/reference/data-model-schema#eventmessage) response. +After establishing a `WebSocket` connection, the client must send an +[`EventSubscriptionRequest`](/reference/data-model-schema#eventsubscriptionrequest) +request, after which the server sends an +[`EventMessage`](/reference/data-model-schema#eventmessage) response. ## Health @@ -217,11 +270,105 @@ A `GET` request to the endpoint. "Healthy" ``` -## Metrics +## Query + +- **Protocol**: `HTTP` +- **Method**: `POST` +- **Encoding**: `SCALE` +- **Endpoint**: `/query` + +#### Requests + +This endpoint expects requests with two shapes: + +Start a query: + +- **Body**: [`SignedQuery`](/reference/data-model-schema#signedquery) + +OR + +Get the next batch of a previously started query: + +- **Parameters**: + - `cursor` - specifies a cursor previously returned as part of query response + +Request + +#### Responses + +| Code | Response | Body | Description | +| :--: | ------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| 200 | Success | [`BatchedResponse`](/reference/data-model-schema#batchedresponse-queryoutputbox) | Successful query request | +| 400 | Conversion Error | [`QueryExecutionFail::Conversion(String)`](/reference/data-model-schema#queryexecutionfail) | Invalid asset query for the actual asset type | +| 400 | Cursor Error | [`QueryExecutionFail::UnknownCursor`](/reference/data-model-schema#queryexecutionfail) | An invalid cursor was provided in the batch request | +| 400 | FetchSizeTooBig Error | [`QueryExecutionFail::FetchSizeTooBig`](/reference/data-model-schema#queryexecutionfail) | Fetch size specified in the query request is too large | +| 400 | InvalidSingularParameters Error | [`QueryExecutionFail::InvalidSingularParameters`](/reference/data-model-schema#queryexecutionfail) | Specified query parameters are not applicable to the (singular) query type | +| 401 | Signature Error | [`QueryExecutionFail::Signature(String)`](/reference/data-model-schema#queryexecutionfail) | The signature on the query is incorrect | +| 403 | Permission Error | [`QueryExecutionFail::Permission(String)`](/reference/data-model-schema#queryexecutionfail) | The user does not have permission to execute this query | +| 404 | Find Error | [`QueryExecutionFail::Find(FindError)`](/reference/data-model-schema#queryexecutionfail) | The queried object was not found | + +::: info + +The `200 Success` response returns results that are ordered by `id`, which use +Rust's [PartialOrd](https://doc.rust-lang.org/std/cmp/trait.PartialOrd.html) and +[Ord](https://doc.rust-lang.org/std/cmp/trait.Ord.html) traits. + +::: + +### Account Not Found 404 + +Whether each prerequisite object was found and +[`FindError`](/reference/data-model-schema#finderror): + +| Domain | Account | [`FindError`](/reference/data-model-schema#finderror) | +| :----: | :-----: | ------------------------------------------------------------------------- | +| N | - | [`FindError::Domain(DomainId)`](/reference/data-model-schema#finderror) | +| Y | N | [`FindError::Account(AccountId)`](/reference/data-model-schema#finderror) | + +### Asset Not Found 404 + +Whether each prerequisite object was found and +[`FindError`](/reference/data-model-schema#finderror): + +| Domain | Account | Asset Definition | Asset | [`FindError`](/reference/data-model-schema#finderror) | +| :----: | :-----: | :--------------: | :---: | ----------------------------------------------------------------------------------------- | +| N | - | - | - | [`FindError::Domain(DomainId)`](/reference/data-model-schema#finderror) | +| Y | N | - | - | [`FindError::Account(AccountId)`](/reference/data-model-schema#finderror) | +| Y | - | N | - | [`FindError::AssetDefinition(AssetDefinitionId)`](/reference/data-model-schema#finderror) | +| Y | Y | Y | N | [`FindError::Asset(AssetId)`](/reference/data-model-schema#finderror) | + +## Schema + +::: info + +This operation requires the Iroha 2 network to be established with the `schema` +feature enabled. + + + +::: + +- **Protocol**: `HTTP` +- **Method**: `GET` +- **Encoding**: `JSON` +- **Endpoint**: `/schema` + +#### Requests + +A `GET` request to the endpoint. + +#### Responses + +| Code | Response | Description | +| :--: | -------- | ------------------------------------------------------------------------------------------------------------------- | +| 200 | OK | Returns the Rust data structures and types of the entire [Data Model Schema](data-model-schema.md) as JSON objects. | + +## Telemetry / Metrics ::: info -This operation requires the Iroha 2 network to be established with the `telemetry` feature enabled. +This operation requires the Iroha 2 network to be established with the +`telemetry` feature enabled. @@ -293,12 +440,12 @@ To learn more about metrics, see [Metrics](../guide/advanced/metrics.md). ::: -## Pending Transactions +## Telemetry / Peers - **Protocol**: `HTTP` - **Method**: `GET` -- **Encoding**: `SCALE` -- **Endpoint**: `/pending_transactions` +- **Encoding**: `JSON` +- **Endpoint**: `/peers` #### Requests @@ -306,105 +453,27 @@ A `GET` request to the endpoint. #### Responses -| Code | Response | Description | -| :--: | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 200 | OK | Returns a list of pending transactions as [`SignedTransaction`](data-model-schema.md#signedtransaction) objects encoded with `SCALE`; must be decoded by the client. | - -## Query - -- **Protocol**: `HTTP` -- **Method**: `POST` -- **Encoding**: `SCALE` -- **Endpoint**: `/query` - -#### Requests - -This endpoint expects requests with two shapes: - -Start a query: - -- **Body**: [`SignedQuery`](/reference/data-model-schema#signedquery) +| Code | Response | +| ---- | -------------------- | +| 200 | List of online peers | -OR - -Get the next batch of a previously started query: - -- **Parameters**: - - `cursor` - specifies a cursor previously returned as part of query response +**Example:** -Request - -#### Responses - -| Code | Response | Body | Description | -|:----:|---------------------------------|----------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------| -| 200 | Success | [`BatchedResponse`](/reference/data-model-schema#batchedresponse-queryoutputbox) | Successful query request | -| 400 | Conversion Error | [`QueryExecutionFail::Conversion(String)`](/reference/data-model-schema#queryexecutionfail) | Invalid asset query for the actual asset type | -| 400 | Cursor Error | [`QueryExecutionFail::UnknownCursor`](/reference/data-model-schema#queryexecutionfail) | An invalid cursor was provided in the batch request | -| 400 | FetchSizeTooBig Error | [`QueryExecutionFail::FetchSizeTooBig`](/reference/data-model-schema#queryexecutionfail) | Fetch size specified in the query request is too large | -| 400 | InvalidSingularParameters Error | [`QueryExecutionFail::InvalidSingularParameters`](/reference/data-model-schema#queryexecutionfail) | Specified query parameters are not applicable to the (singular) query type | -| 401 | Signature Error | [`QueryExecutionFail::Signature(String)`](/reference/data-model-schema#queryexecutionfail) | The signature on the query is incorrect | -| 403 | Permission Error | [`QueryExecutionFail::Permission(String)`](/reference/data-model-schema#queryexecutionfail) | The user does not have permission to execute this query | -| 404 | Find Error | [`QueryExecutionFail::Find(FindError)`](/reference/data-model-schema#queryexecutionfail) | The queried object was not found | - -::: info - -The `200 Success` response returns results that are ordered by `id`, which use -Rust's [PartialOrd](https://doc.rust-lang.org/std/cmp/trait.PartialOrd.html) -and [Ord](https://doc.rust-lang.org/std/cmp/trait.Ord.html) traits. - -::: - -### Account Not Found 404 - -Whether each prerequisite object was found and [`FindError`](/reference/data-model-schema#finderror): - -| Domain | Account | [`FindError`](/reference/data-model-schema#finderror) | -| :----: | :-----: | ------------------------------------------------------------------------- | -| N | - | [`FindError::Domain(DomainId)`](/reference/data-model-schema#finderror) | -| Y | N | [`FindError::Account(AccountId)`](/reference/data-model-schema#finderror) | - -### Asset Not Found 404 - -Whether each prerequisite object was found and [`FindError`](/reference/data-model-schema#finderror): - -| Domain | Account | Asset Definition | Asset | [`FindError`](/reference/data-model-schema#finderror) | -| :----: | :-----: | :--------------: | :---: | ----------------------------------------------------------------------------------------- | -| N | - | - | - | [`FindError::Domain(DomainId)`](/reference/data-model-schema#finderror) | -| Y | N | - | - | [`FindError::Account(AccountId)`](/reference/data-model-schema#finderror) | -| Y | - | N | - | [`FindError::AssetDefinition(AssetDefinitionId)`](/reference/data-model-schema#finderror) | -| Y | Y | Y | N | [`FindError::Asset(AssetId)`](/reference/data-model-schema#finderror) | - -## Schema - -::: info - -This operation requires the Iroha 2 network to be established with the `schema` feature enabled. - - - -::: - -- **Protocol**: `HTTP` -- **Method**: `GET` -- **Encoding**: `JSON` -- **Endpoint**: `/schema` - -#### Requests - -A `GET` request to the endpoint. - -#### Responses - -| Code | Response | Description | -| :--: | -------- | ------------------------------------------------------------------------------------------------------------------- | -| 200 | OK | Returns the Rust data structures and types of the entire [Data Model Schema](data-model-schema.md) as JSON objects. | +```json +[ + { + "address": "0.0.0.0:8081", + "id": "ed0120B23E14F659B91736AAB980B6ADDCE4B1DB8A138AB0267E049C082A744471714E" + } +] +``` -## Status +## Telemetry / Status ::: info -This operation requires the Iroha 2 network to be established with the `telemetry` feature enabled. +This operation requires the Iroha 2 network to be established with the +`telemetry` feature enabled. @@ -421,18 +490,20 @@ A `GET` request to the endpoint. This endpoint also accepts the following: - - **Header**: Specifies the encoding of the retrieved data.\ +- **Header**: Specifies the encoding of the retrieved data.\ Can be set to one of the following: - - `Accept: application/x-parity-scale` — the retrieved data is encoded with `SCALE`. - - `Accept: application/json` — the retrieved data is encoded with `JSON`. + - `Accept: application/x-parity-scale` — the retrieved data is encoded with + `SCALE`. + - `Accept: application/json` — the retrieved data is encoded with `JSON`. -If no header is specified in the request, the `Accept: application/json` header is used by default. +If no header is specified in the request, the `Accept: application/json` header +is used by default. #### Responses -| Code | Response | Description | -| :--: | --------------------- | ------------------------------------------------------------------------------------------ | -| 200 | Iroha Status | Returns the Iroha network status report encoded as specified in the header of the request. | +| Code | Response | Description | +| :--: | ------------ | ------------------------------------------------------------------------------------------ | +| 200 | Iroha Status | Returns the Iroha network status report encoded as specified in the header of the request. | The response body has the following structure: @@ -489,21 +560,29 @@ The following examples represent the same data: ::: warning JSON Precision Lost -Almost all fields in the `Status` structure are 64-bit integers, and they are encoded in JSON as-is. Since native JSON's number type according to the specification effectively is `f64`, the precision might be lost on deserialization, for example, in [JavaScript's `JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse). +Almost all fields in the `Status` structure are 64-bit integers, and they are +encoded in JSON as-is. Since native JSON's number type according to the +specification effectively is `f64`, the precision might be lost on +deserialization, for example, in +[JavaScript's `JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse). -For more details, see the related [GitHub issue](https://github.com/hyperledger-iroha/iroha/issues/3964). +For more details, see the related +[GitHub issue](https://github.com/hyperledger-iroha/iroha/issues/3964). ::: ::: tip Compact Form in SCALE -Fields with `u64` type are serialized in the [Compact form](https://docs.substrate.io/reference/scale-codec/#fn-1). +Fields with `u64` type are serialized in the +[Compact form](https://docs.substrate.io/reference/scale-codec/#fn-1). ::: ### Sub-routing -It is also possible to retrieve the data of a specific `struct` group or variable within it by adding their path to the endpoint address. The sub-routed values are only returned in the JSON format. +It is also possible to retrieve the data of a specific `struct` group or +variable within it by adding their path to the endpoint address. The sub-routed +values are only returned in the JSON format. **Examples**: @@ -552,7 +631,8 @@ It is also possible to retrieve the data of a specific `struct` group or variabl This endpoint expects the following data: - - **Body**: [`SignedTransaction`](/reference/data-model-schema#signedtransaction) +- **Body**: + [`SignedTransaction`](/reference/data-model-schema#signedtransaction) #### Responses From b5bca54d4e24a1c5912bc53a040a28562ec50698 Mon Sep 17 00:00:00 2001 From: quacumque Date: Thu, 20 Feb 2025 15:57:22 +0900 Subject: [PATCH 3/5] ci: bump node version Signed-off-by: quacumque --- .github/workflows/pull-request-ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-ci.yaml b/.github/workflows/pull-request-ci.yaml index dcd411472..2f9a5ebe9 100644 --- a/.github/workflows/pull-request-ci.yaml +++ b/.github/workflows/pull-request-ci.yaml @@ -10,7 +10,7 @@ jobs: - uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 22 # --- Install with caching # https://github.com/pnpm/action-setup#use-cache-to-reduce-installation-time From ad9d5a52f563965a333368c165892c428c714538 Mon Sep 17 00:00:00 2001 From: quacumque Date: Thu, 20 Feb 2025 15:58:36 +0900 Subject: [PATCH 4/5] ci: update corepack to latest Signed-off-by: quacumque --- .github/workflows/pull-request-ci.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pull-request-ci.yaml b/.github/workflows/pull-request-ci.yaml index 2f9a5ebe9..4615c4314 100644 --- a/.github/workflows/pull-request-ci.yaml +++ b/.github/workflows/pull-request-ci.yaml @@ -16,7 +16,9 @@ jobs: # https://github.com/pnpm/action-setup#use-cache-to-reduce-installation-time - name: Enable Corepack - run: corepack enable + run: | + npm i -g corepack@latest + corepack enable - name: Get pnpm store directory id: pnpm-cache From f12305a15f1f582d23a7c87c5612b82ab1cdf043 Mon Sep 17 00:00:00 2001 From: quacumque Date: Thu, 20 Feb 2025 16:11:14 +0900 Subject: [PATCH 5/5] docs: fix broken anchor Signed-off-by: quacumque --- src/reference/torii-endpoints.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/reference/torii-endpoints.md b/src/reference/torii-endpoints.md index cd5c4f8b6..7cd5d3fe2 100644 --- a/src/reference/torii-endpoints.md +++ b/src/reference/torii-endpoints.md @@ -363,7 +363,7 @@ A `GET` request to the endpoint. | :--: | -------- | ------------------------------------------------------------------------------------------------------------------- | | 200 | OK | Returns the Rust data structures and types of the entire [Data Model Schema](data-model-schema.md) as JSON objects. | -## Telemetry / Metrics +## Telemetry / Metrics {#metrics} ::: info