Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[package]
name = "scalar-scalar-typescript-sdk"
version = "0.2.1"
edition = "2021"
rust-version = "1.75"
description = "API for managing Scalar platform resources.\n\n## TypeScript SDK\n\nFor TypeScript, we provide a SDK that makes using our API even easier.\n\n### Install\n\n```bash\nnpm add @scalar/sdk\n```\n\n### Get a Scalar API key\n\nCreate an API key in your Scalar account:\n\n- Dashboard: https://dashboard.scalar.com/account\n- Store it in `.env`, for example:\n\n```bash\nSCALAR_API_KEY=your_personal_token\n```\n\n### Exchange your API key for an access token\n\nThe personal token is not an access token. Exchange it first with `postv1AuthExchange`.\n\nIf you use the personal token directly for authenticated API calls, the API returns `401 Invalid authentication token`.\n\n```ts\nimport { Scalar } from '@scalar/sdk'\n\nconst scalar = new Scalar()\n\nconst exchange = await scalar.auth.postv1AuthExchange({\n personalToken: process.env.SCALAR_API_KEY!,\n})\n\nconst accessToken = exchange.accessToken\n```\n\n### Use the access token\n\nConstruct a second client with bearer auth. Use this authenticated client for API calls.\n\n```ts\nimport { Scalar } from '@scalar/sdk'\n\nconst scalar = new Scalar()\n\nconst exchange = await scalar.auth.postv1AuthExchange({\n personalToken: process.env.SCALAR_API_KEY!,\n})\n\nconst authedScalar = new Scalar({\n bearerAuth: exchange.accessToken,\n})\n```\n\n### Notes\n\n- The exchange request itself can be made from a client constructed with no arguments (`new Scalar()`).\n- The exchanged access token is valid for 12 hours.\n- Timestamps are Unix seconds.\n\n### Read more\n\n- [@scalar/sdk on npm](https://www.npmjs.com/package/@scalar/sdk)"

[features]
default = []
blocking = []

[dependencies]
base64 = "0.22"
bytes = "1.5"
chrono = { version = "0.4", default-features = false, features = ["clock", "serde"] }
futures-core = "0.3"
futures-util = "0.3"
hex = "0.4"
hmac = "0.12"
indexmap = "=2.2.6"
percent-encoding = "2"
reqwest = { version = "=0.11.23", default-features = false, features = ["json", "multipart", "stream", "rustls-tls"] }
ring = "0.17"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_urlencoded = "0.7"
sha2 = "0.10"
tokio = { version = "1", features = ["macros", "rt-multi-thread", "time"] }
url = "=2.5.8"
uuid = { version = "=1.6.1", features = ["serde", "v4"] }
69 changes: 68 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,68 @@
# scalar-rust
# ScalarApi Rust API Library

This crate provides convenient access to the ScalarApi REST API from Rust applications.
It is generated from your OpenAPI document with typed models, async resource methods, pagination helpers, and raw response affordances.

The full generated API reference is available in `api.md` and the operation inventory is available in `reference.md`.

## Installation

```toml
[dependencies]
scalar-scalar-typescript-sdk = "0.2.1"
```

## Usage

```rust
use scalar_scalar_typescript_sdk::prelude::*;

#[tokio::main]
async fn main() -> Result<(), Error> {
let _client = ScalarApiClient::new();
Ok(())
}
```

## Request and Response Types

Request params and response bodies are generated as typed Rust structs and enums with `serde` support.
Methods return `Result<T, Error>` and use owned data so generated models are straightforward to pass around.

## Handling Errors

Non-success responses return generated errors that expose status code, headers, raw response body, and request id metadata when available.
Transport failures are represented separately from HTTP status failures.

## Retries and Timeouts

The runtime supports client-level and per-request timeout, retry, header, query, base URL, and idempotency options.
Retryable responses honor `Retry-After` before exponential backoff.

## Pagination

Paginated operations expose page helpers with data and next-page metadata when pagination is described by the OpenAPI document.

## Raw Responses and Custom Requests

Raw response helpers are available when callers need status, headers, or unparsed response bytes.
Per-request options provide an escape hatch for extra headers and query params.

## Runtime Features

- Async `reqwest` transport with typed request/response models.
- Per-request headers, query params, timeouts, retries, idempotency keys, and auth overrides.
- Raw response helpers with status, headers, and body bytes.
- Cursor/page metadata helpers, byte-stream descriptors, SSE descriptors, and WebSocket request descriptors.

## Requirements

Requires Rust 1.75+ with edition 2021.


## Contributions

This SDK is generated programmatically. Manual edits to generated files will be
overwritten on the next build.

### SDK created by [Scalar](https://www.scalar.com/?utm_source=scalar-typescript-sdk-rust&utm_campaign=sdk)
259 changes: 259 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
# ScalarApi Rust API

## Types

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">AccessGroup</a></code>
- <code><a href="./reference.md">ActiveDeployment</a></code>
- <code><a href="./reference.md">ApiDocument</a></code>
- <code><a href="./reference.md">Email</a></code>
- <code><a href="./reference.md">GithubProject</a></code>
- <code><a href="./reference.md">GithubProjectRepository</a></code>
- <code><a href="./reference.md">LoginPortal</a></code>
- <code><a href="./reference.md">LoginPortalEmail</a></code>
- <code><a href="./reference.md">LoginPortalPage</a></code>
- <code><a href="./reference.md">ManagedDocVersion</a></code>
- <code><a href="./reference.md">ManagedSchemaVersion</a></code>
- <code><a href="./reference.md">Method</a></code>
- <code><a href="./reference.md">Namespace</a></code>
- <code><a href="./reference.md">Nanoid</a></code>
- <code><a href="./reference.md">Rule</a></code>
- <code><a href="./reference.md">Schema</a></code>
- <code><a href="./reference.md">Slug</a></code>
- <code><a href="./reference.md">Team</a></code>
- <code><a href="./reference.md">TeamImage</a></code>
- <code><a href="./reference.md">TeamName</a></code>
- <code><a href="./reference.md">TeamSummary</a></code>
- <code><a href="./reference.md">Theme</a></code>
- <code><a href="./reference.md">Timestamp</a></code>
- <code><a href="./reference.md">Uid</a></code>
- <code><a href="./reference.md">User</a></code>
- <code><a href="./reference.md">Version</a></code>

## Registry

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">AccessGroup</a></code>
- <code><a href="./reference.md">ApiDocument</a></code>
- <code><a href="./reference.md">ManagedDocVersion</a></code>
- <code><a href="./reference.md">Version</a></code>

Methods:

- <code title="GET /v1/apis">client.registry.<a href="./reference.md">listAllApiDocuments</a>(...)</code>
- <code title="GET /v1/apis/{namespace}">client.registry.<a href="./reference.md">listApiDocuments</a>(...)</code>
- <code title="POST /v1/apis/{namespace}">client.registry.<a href="./reference.md">createApiDocument</a>(...)</code>
- <code title="PATCH /v1/apis/{namespace}/{slug}">client.registry.<a href="./reference.md">updateApiDocument</a>(...)</code>
- <code title="DELETE /v1/apis/{namespace}/{slug}">client.registry.<a href="./reference.md">deleteApiDocument</a>(...)</code>
- <code title="GET /v1/apis/{namespace}/{slug}/version/{semver}">client.registry.<a href="./reference.md">retrieveApiDocumentVersion</a>(...)</code>
- <code title="PATCH /v1/apis/{namespace}/{slug}/version/{semver}">client.registry.<a href="./reference.md">updateApiDocumentVersion</a>(...)</code>
- <code title="DELETE /v1/apis/{namespace}/{slug}/version/{semver}">client.registry.<a href="./reference.md">deleteApiDocumentVersion</a>(...)</code>
- <code title="GET /v1/apis/{namespace}/{slug}/version/{semver}/metadata">client.registry.<a href="./reference.md">listApiDocumentVersionMetadata</a>(...) -&gt; ManagedDocVersion</code>
- <code title="POST /v1/apis/{namespace}/{slug}/version">client.registry.<a href="./reference.md">createApiDocumentVersion</a>(...) -&gt; ManagedDocVersion</code>
- <code title="POST /v1/apis/{namespace}/{slug}/access-group">client.registry.<a href="./reference.md">createApiDocumentAccessGroup</a>(...)</code>
- <code title="DELETE /v1/apis/{namespace}/{slug}/access-group">client.registry.<a href="./reference.md">deleteApiDocumentAccessGroup</a>(...)</code>

## Schemas

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">Schema</a></code>
- <code><a href="./reference.md">Uid</a></code>
- <code><a href="./reference.md">Version</a></code>

Methods:

- <code title="GET /v1/schemas/{namespace}">client.schemas.<a href="./reference.md">list</a>(...)</code>
- <code title="POST /v1/schemas/{namespace}">client.schemas.<a href="./reference.md">create</a>(...) -&gt; Uid</code>
- <code title="PATCH /v1/schemas/{namespace}/{slug}">client.schemas.<a href="./reference.md">update</a>(...)</code>
- <code title="DELETE /v1/schemas/{namespace}/{slug}">client.schemas.<a href="./reference.md">delete</a>(...)</code>

### Version

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">Uid</a></code>
- <code><a href="./reference.md">Version</a></code>

Methods:

- <code title="GET /v1/schemas/{namespace}/{slug}/version/{semver}">client.schemas.version.<a href="./reference.md">retrieveSchema</a>(...)</code>
- <code title="DELETE /v1/schemas/{namespace}/{slug}/version/{semver}">client.schemas.version.<a href="./reference.md">deleteSchema</a>(...)</code>
- <code title="POST /v1/schemas/{namespace}/{slug}/version">client.schemas.version.<a href="./reference.md">createSchema</a>(...) -&gt; Uid</code>

### AccessGroup

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">AccessGroup</a></code>

Methods:

- <code title="POST /v1/schemas/{namespace}/{slug}/access-group">client.schemas.accessGroup.<a href="./reference.md">createSchema</a>(...)</code>
- <code title="DELETE /v1/schemas/{namespace}/{slug}/access-group">client.schemas.accessGroup.<a href="./reference.md">deleteSchema</a>(...)</code>

## LoginPortals

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">LoginPortal</a></code>
- <code><a href="./reference.md">LoginPortalEmail</a></code>
- <code><a href="./reference.md">LoginPortalPage</a></code>
- <code><a href="./reference.md">Uid</a></code>

Methods:

- <code title="GET /v1/login-portals/{slug}">client.loginPortals.<a href="./reference.md">retrieve</a>(...)</code>
- <code title="PATCH /v1/login-portals/{slug}">client.loginPortals.<a href="./reference.md">update</a>(...)</code>
- <code title="DELETE /v1/login-portals/{slug}">client.loginPortals.<a href="./reference.md">delete</a>(...)</code>
- <code title="POST /v1/login-portals">client.loginPortals.<a href="./reference.md">create</a>(...) -&gt; Uid</code>
- <code title="GET /v1/login-portals">client.loginPortals.<a href="./reference.md">list</a>(...)</code>

## Rules

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">AccessGroup</a></code>
- <code><a href="./reference.md">Rule</a></code>
- <code><a href="./reference.md">Uid</a></code>

Methods:

- <code title="GET /v1/rulesets/{namespace}">client.rules.<a href="./reference.md">listRulesets</a>(...)</code>
- <code title="POST /v1/rulesets/{namespace}">client.rules.<a href="./reference.md">createRuleset</a>(...) -&gt; Uid</code>
- <code title="PATCH /v1/rulesets/{namespace}/{slug}">client.rules.<a href="./reference.md">updateRuleset</a>(...)</code>
- <code title="DELETE /v1/rulesets/{namespace}/{slug}">client.rules.<a href="./reference.md">deleteRuleset</a>(...)</code>
- <code title="GET /v1/rulesets/{namespace}/{slug}">client.rules.<a href="./reference.md">retrieveRulesetDocument</a>(...)</code>
- <code title="POST /v1/rulesets/{namespace}/{slug}/access-group">client.rules.<a href="./reference.md">createRulesetAccessGroup</a>(...)</code>
- <code title="DELETE /v1/rulesets/{namespace}/{slug}/access-group">client.rules.<a href="./reference.md">deleteRulesetAccessGroup</a>(...)</code>

## Themes

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">Theme</a></code>
- <code><a href="./reference.md">Uid</a></code>

Methods:

- <code title="GET /v1/themes">client.themes.<a href="./reference.md">list</a>(...)</code>
- <code title="POST /v1/themes">client.themes.<a href="./reference.md">create</a>(...) -&gt; Uid</code>
- <code title="PATCH /v1/themes/{slug}">client.themes.<a href="./reference.md">update</a>(...)</code>
- <code title="PUT /v1/themes/{slug}">client.themes.<a href="./reference.md">replaceDocument</a>(...)</code>
- <code title="DELETE /v1/themes/{slug}">client.themes.<a href="./reference.md">delete</a>(...)</code>
- <code title="GET /v1/themes/{slug}">client.themes.<a href="./reference.md">retrieve</a>(...)</code>

## Teams

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">Team</a></code>

Methods:

- <code title="GET /v1/teams">client.teams.<a href="./reference.md">list</a>(...)</code>

## ScalarDocs

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">GithubProject</a></code>
- <code><a href="./reference.md">Slug</a></code>

Methods:

- <code title="GET /v1/guides">client.scalarDocs.<a href="./reference.md">listGuides</a>(...)</code>
- <code title="POST /v1/guides">client.scalarDocs.<a href="./reference.md">createGuide</a>(...)</code>
- <code title="POST /v1/guides/{slug}/publish">client.scalarDocs.<a href="./reference.md">publishGuide</a>(...)</code>

## Namespaces

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>

Methods:

- <code title="GET /v1/namespaces">client.namespaces.<a href="./reference.md">list</a>(...)</code>

## Authentication

Types:

- <code><a href="./reference.md">_400</a></code>
- <code><a href="./reference.md">_401</a></code>
- <code><a href="./reference.md">_403</a></code>
- <code><a href="./reference.md">_404</a></code>
- <code><a href="./reference.md">_422</a></code>
- <code><a href="./reference.md">_500</a></code>
- <code><a href="./reference.md">User</a></code>

Methods:

- <code title="POST /v1/auth/exchange">client.authentication.<a href="./reference.md">exchangePersonalToken</a>(...)</code>
- <code title="GET /v1/auth/me">client.authentication.<a href="./reference.md">listCurrentUser</a>(...) -&gt; User</code>
Loading