diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..3be0838 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,19 @@ +name: Check +on: + push: + branches: + - main + pull_request: + +jobs: + check: + name: check + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Check + run: | + npm install + npm run links diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 682d8de..f33a67c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -36,7 +36,7 @@ usually due to being misaligned with the project vision or out of scope. We will ### Open Issues -If you're ready to contribute, start by looking at our open issues tagged as [`help wanted`](../../issues?q=is%3Aopen+is%3Aissue+label%3A"help+wanted") or [`good first issue`](../../issues?q=is%3Aopen+is%3Aissue+label%3A"good+first+issue"). +If you're ready to contribute, start by looking at our open issues tagged as `help wanted` or `good first issue`. You can comment on the issue to let others know you're interested in working on it or to ask questions. diff --git a/Makefile b/Makefile index 3353fdc..7f8f945 100644 --- a/Makefile +++ b/Makefile @@ -9,15 +9,9 @@ help: | sed -e "s/^Makefile://" -e "s///" \ | awk 'BEGIN { FS = ":.*?## " }; { printf "\033[36m%-30s\033[0m %s\n", $$1, $$2 }' -precommit: ## Install pre-commit hook - mkdir -p .git/hooks - rm -f .git/hooks/pre-commit - cp pre-commit .git/hooks/pre-commit - chmod +x .git/hooks/pre-commit dev.setup: ## Install dependencies npm i mintlify@latest - make precommit dev.up: ## Start dev server make dev.setup diff --git a/api-reference/api-tokens/create.mdx b/api-reference/api-tokens/create.mdx deleted file mode 100644 index cd8ce6d..0000000 --- a/api-reference/api-tokens/create.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Create an ApiToken' -openapi: 'POST /v1/api_tokens' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/api-tokens/delete.mdx b/api-reference/api-tokens/delete.mdx deleted file mode 100644 index 5b75ba3..0000000 --- a/api-reference/api-tokens/delete.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Delete an ApiToken' -openapi: 'DELETE /v1/api_tokens/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/api-tokens/endpoints.mdx b/api-reference/api-tokens/endpoints.mdx deleted file mode 100644 index cf9de01..0000000 --- a/api-reference/api-tokens/endpoints.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 'ApiToken endpoints' -description: 'ApiToken endpoints allow you to create, list, get and delete ApiTokens.' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -As explained in the [authentication documentation](/api-reference/authentication), Edgee API uses API tokens to -authenticate requests. You can view and manage your API tokens in the [Console](https://www.edgee.cloud/~/me/settings/tokens), -but you can also create and manage API tokens using the API itself. - -A token is a string that you can use to authenticate requests to the Edgee API. Tokens are similar to passwords. -As a result, you should treat them with the same level of care. Do not share your token with anyone, including -Edgee support. If you believe your token has been compromised, you can regenerate a new one at any time. - - - -```js ENDPOINTS -POST /v1/api_tokens -GET /v1/api_tokens/:id -DELETE /v1/api_tokens/:id -GET /v1/api_tokens -``` - - - - diff --git a/api-reference/api-tokens/get.mdx b/api-reference/api-tokens/get.mdx deleted file mode 100644 index 2dc9749..0000000 --- a/api-reference/api-tokens/get.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Retrieve an ApiToken' -openapi: 'GET /v1/api_tokens/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/api-tokens/list.mdx b/api-reference/api-tokens/list.mdx deleted file mode 100644 index 9ad7bc3..0000000 --- a/api-reference/api-tokens/list.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'List all ApiTokens' -openapi: 'GET /v1/api_tokens' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/api-tokens/object.mdx b/api-reference/api-tokens/object.mdx deleted file mode 100644 index 427a1a1..0000000 --- a/api-reference/api-tokens/object.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -openapi-schema: ApiToken -title: 'The ApiToken object' -description: 'The ApiToken object is used to represent an API token in Edgee.' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/authentication.mdx b/api-reference/authentication.mdx index a7079c9..632f8f9 100644 --- a/api-reference/authentication.mdx +++ b/api-reference/authentication.mdx @@ -3,10 +3,6 @@ title: "Authentication" description: "How to authenticate to the Edgee API" --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - The Edgee API uses API tokens to authenticate requests. You can view and manage your API token in the Edgee [Console](https://www.edgee.cloud/settings/tokens). @@ -30,12 +26,12 @@ will also fail. ```bash cURL with Bearer - curl 'https://api.edgee.app/v1/projects' \ + curl 'https://api.edgee.ai/v1/projects' \ -H 'Authorization: Bearer ' ``` ```bash cURL with Basic Auth - curl 'https://api.edgee.app/v1/projects' \ + curl 'https://api.edgee.ai/v1/projects' \ -u ':' # The colon prevents curl from asking for a password. ``` diff --git a/api-reference/caching/purge-cache.mdx b/api-reference/caching/purge-cache.mdx index 541b96f..34852c3 100644 --- a/api-reference/caching/purge-cache.mdx +++ b/api-reference/caching/purge-cache.mdx @@ -3,13 +3,6 @@ title: 'Purge Cache' openapi: 'POST /v1/projects/{id}/purge-cache' --- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - When you purge cache, Edgee will remove the specified cached content from all edge locations worldwide, which is useful when you need to update cached content, clear stale data after deployments, force fresh content to be served to users, or troubleshoot caching issues. Query strings are automatically removed from the path before purging and cache is purged for all domains associated with the project across all edge locations worldwide. - -For more information about how caching works in Edgee, see the [Caching Documentation](/services/performance/caching). diff --git a/api-reference/components/create.mdx b/api-reference/components/create.mdx deleted file mode 100644 index ea4d424..0000000 --- a/api-reference/components/create.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Create a Component' -openapi: 'POST /v1/components' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/components/delete.mdx b/api-reference/components/delete.mdx deleted file mode 100644 index b628e68..0000000 --- a/api-reference/components/delete.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Delete a Component' -openapi: 'DELETE /v1/components/{id}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/components/endpoints.mdx b/api-reference/components/endpoints.mdx deleted file mode 100644 index 52790b0..0000000 --- a/api-reference/components/endpoints.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Component endpoints" -description: "Component endpoints allow you to list and get all the Edgee components." ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -A component is a reusable piece of code that can be used in multiple projects. Components can be shared with other users or kept private. - - - -```js ENDPOINTS -GET /v1/components -GET /v1/components/:id -``` - - - diff --git a/api-reference/components/get-by-slug.mdx b/api-reference/components/get-by-slug.mdx deleted file mode 100644 index ba03e8d..0000000 --- a/api-reference/components/get-by-slug.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Retrieve a Component by slug' -openapi: 'GET /v1/components/{orgSlug}/{componentSlug}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/components/get.mdx b/api-reference/components/get.mdx deleted file mode 100644 index e5df086..0000000 --- a/api-reference/components/get.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Retrieve a Component' -openapi: 'GET /v1/components/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/components/list.mdx b/api-reference/components/list.mdx deleted file mode 100644 index 6da5bfa..0000000 --- a/api-reference/components/list.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'List all public components' -openapi: 'GET /v1/components' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/components/object.mdx b/api-reference/components/object.mdx deleted file mode 100644 index de3eddd..0000000 --- a/api-reference/components/object.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -openapi-schema: Component -title: 'The Component object' -description: 'The component object is used to represent a component in Edgee.' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/components/update-by-slug.mdx b/api-reference/components/update-by-slug.mdx deleted file mode 100644 index 9d0f520..0000000 --- a/api-reference/components/update-by-slug.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Update a Component by slug' -openapi: 'PUT /v1/components/{orgSlug}/{componentSlug}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/components/update.mdx b/api-reference/components/update.mdx deleted file mode 100644 index 6c7ad90..0000000 --- a/api-reference/components/update.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Update a Component' -openapi: 'PUT /v1/components/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/components/version-create.mdx b/api-reference/components/version-create.mdx deleted file mode 100644 index 28dce50..0000000 --- a/api-reference/components/version-create.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Create a Component Version' -openapi: 'POST /v1/components/{id}/versions' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/components/version-update.mdx b/api-reference/components/version-update.mdx deleted file mode 100644 index 5bfd19a..0000000 --- a/api-reference/components/version-update.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Update a Component Version' -openapi: 'PUT /v1/components/{orgSlug}/{componentSlug}/versions/{versionId}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/counters/component_list.mdx b/api-reference/counters/component_list.mdx deleted file mode 100644 index 4541202..0000000 --- a/api-reference/counters/component_list.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'List all Projects Component Statistics' -openapi: 'GET /v1/projects/{id}/components/{componentId}/counters' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - \ No newline at end of file diff --git a/api-reference/counters/component_object.mdx b/api-reference/counters/component_object.mdx deleted file mode 100644 index 7d9ecc2..0000000 --- a/api-reference/counters/component_object.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -openapi-schema: ProjectComponentCounters -title: 'The ProjectComponentCounters Object' -description: 'The ProjectComponentCounters object is used to represent statistics for project components in Edgee.' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - \ No newline at end of file diff --git a/api-reference/counters/endpoints.mdx b/api-reference/counters/endpoints.mdx deleted file mode 100644 index 5316f5b..0000000 --- a/api-reference/counters/endpoints.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Statistics endpoints" -description: "Statistics endpoints allows you to get statitics for your projects or components." ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -For projects, you can get the total amount of requests and generated events for a given day or month. - -For project components, you can get the repartition of events (user, page, track) for a given day or month. - - -```js ENDPOINTS -GET /v1/projects/:id/counters -GET /v1/projects/:id/components/:componentId/counters -``` - diff --git a/api-reference/counters/list.mdx b/api-reference/counters/list.mdx deleted file mode 100644 index acf11af..0000000 --- a/api-reference/counters/list.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'List all Projects Statistics' -openapi: 'GET /v1/projects/{id}/counters' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - \ No newline at end of file diff --git a/api-reference/counters/object.mdx b/api-reference/counters/object.mdx deleted file mode 100644 index 762d88d..0000000 --- a/api-reference/counters/object.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -openapi-schema: ProjectCounters -title: 'The ProjectCounters object' -description: 'The ProjectCounters object is used to represent statistics for a project in Edgee.' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - \ No newline at end of file diff --git a/api-reference/data-collection-events/endpoints.mdx b/api-reference/data-collection-events/endpoints.mdx deleted file mode 100644 index 35b1cc0..0000000 --- a/api-reference/data-collection-events/endpoints.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Endpoints" -description: "DataCollectionEvent endpoints reference" ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -There is two types of data collection events: incoming and outgoing. -Edgee will store both incoming and outgoing data collection events for debugging and auditing purposes. - -### The Incoming data collection events - -An incoming data collection event is an event created by edgee, which will be processed and transformed into one or more outgoing data collection events by the components. - -### The Outgoing data collection events - -An outgoing data collection event is an event created by a component, which will be sent to the destination specified by the component. - - - -```js ENDPOINTS -GET /v1/projects/:id/debug/data-collection/incoming -GET /v1/projects/:id/debug/data-collection/outgoing/:eventId -``` - - - diff --git a/api-reference/data-collection-events/incoming-object.mdx b/api-reference/data-collection-events/incoming-object.mdx deleted file mode 100644 index 6bcc5cc..0000000 --- a/api-reference/data-collection-events/incoming-object.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -openapi-schema: IncomingDataCollectionEvent -title: 'The Incoming Event object' -description: 'The IncomingDataCollectionEvent object represents an incoming data collection event.' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/data-collection-events/list-incoming.mdx b/api-reference/data-collection-events/list-incoming.mdx deleted file mode 100644 index ad10b00..0000000 --- a/api-reference/data-collection-events/list-incoming.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'List Incoming Events' -openapi: 'GET /v1/projects/{id}/debug/data-collection/incoming' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/data-collection-events/list-outgoing.mdx b/api-reference/data-collection-events/list-outgoing.mdx deleted file mode 100644 index 3a92d94..0000000 --- a/api-reference/data-collection-events/list-outgoing.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'List Outgoing Events' -openapi: 'GET /v1/projects/{id}/debug/data-collection/outgoing/{event_id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/data-collection-events/outgoing-object.mdx b/api-reference/data-collection-events/outgoing-object.mdx deleted file mode 100644 index 73c3eb7..0000000 --- a/api-reference/data-collection-events/outgoing-object.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -openapi-schema: OutgoingDataCollectionEvent -title: 'The Outgoing Event object' -description: 'The OutgoingDataCollectionEvent object represents an outgoing data collection event.' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/data-collection/event.mdx b/api-reference/data-collection/event.mdx deleted file mode 100644 index 2a30a64..0000000 --- a/api-reference/data-collection/event.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Collect an Edgee event' -openapi: 'POST /_edgee/event' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/data-collection/introduction.mdx b/api-reference/data-collection/introduction.mdx deleted file mode 100644 index d0d9c5c..0000000 --- a/api-reference/data-collection/introduction.mdx +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: 'Introduction' -description: A brief introduction to your project's Data Collection API. ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -This guide will help you understand how to interact with the Data Collection API to -collect events at the edge. - -Please note that the Data Collection API is used automatically by the Edgee SDK, but could also -be used directly for other purposes, such as custom mobile integrations. - - -## Base URL - -The data collection API is special because it is project-specific: - -``` -https://{PROJECT_ID}.edgee.app -``` - -You can find your project's ID on the [Edgee dashboard](https://www.edgee.cloud/~/me) under each project. -The API domain corresponds to your Edgee SDK domain: - -```html - -``` - -## Authentication - -The Data Collection API is meant for your client-side devices to use both for -logged-in and anonymous users, so it doesn't require any authentication. - -## Data structures - -Please refer to the [Edgee Data Layer docs](/services/data-collection/data-layer) to learn more about the events and context fields. - -## Debugging - -To enable [debugging](/getting-started/debugging) via API you'll need to include a `_edgeedebug=true` cookie -in your requests. - -For example: - - - -```bash curl {4} -curl --request POST \ - --url https://{project_id}.edgee.app/_edgee/event \ - --header 'Content-Type: application/json' \ - --cookie '_edgeedebug=true' \ - --data '...' -``` - -```python python {6} -import requests -url = "https://{project_id}.edgee.app/_edgee/event" -payload = {...} -headers = { - "Content-Type": "application/json", - "cookie": "_edgeedebug=true", -} -response = requests.request("POST", url, json=payload, headers=headers) -``` - -```javascript JavaScript {5} -const options = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'cookie': '_edgeedebug=true', - }, - body: '...' -}; -fetch('https://{project_id}.edgee.app/_edgee/event', options) -``` - - - -## Errors - -When an error occurs, the Edgee API responds with a conventional HTTP response code and a JSON object containing more -details about the error. For more information, please refer to the [Errors](../errors) page. - diff --git a/api-reference/data-collection/openapi.json b/api-reference/data-collection/openapi.json deleted file mode 100644 index 84b11ea..0000000 --- a/api-reference/data-collection/openapi.json +++ /dev/null @@ -1,443 +0,0 @@ -{ - "openapi": "3.0.1", - "info": { - "title": "Edgee endpoints", - "version": "1" - }, - "servers": [ - { - "url": "https://{project_id}.edgee.app", - "variables": { - "project_id": { - "default": "demo", - "description": "Project ID assigned by Edgee at creation time" - } - } - } - ], - "security": [], - "paths": { - "/_edgee/event": { - "post": { - "summary": "Collect a new Edgee event", - "description": "Collects a new Edgee event at the edge and forwards it to the configured components.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EdgeeEvent" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "No response" - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "EdgeeEvent": { - "type": "object", - "description": "This is a wrapper for the Edgee event object.", - "required": ["data_collection"], - "properties": { - "data_collection": { - "type": "object", - "required": ["events"], - "description": "The data collection object includes details about context and events.", - "properties": { - "events": { - "type": "array", - "description": "The events array includes a list of events to collect at the edge.", - "items": { - "required": ["type", "data"], - "oneOf": [ - {"$ref": "#/components/schemas/EdgeeEventPage"}, - {"$ref": "#/components/schemas/EdgeeEventUser"}, - {"$ref": "#/components/schemas/EdgeeEventTrack"} - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "page": "#/components/schemas/EdgeeEventPage", - "user": "#/components/schemas/EdgeeEventUser", - "track": "#/components/schemas/EdgeeEventTrack" - } - } - } - }, - "context": { - "type": "object", - "description": "The context object includes details about client, campaign, page, and user.", - "properties": { - "client": { - "type": "object", - "description": "The context.client object includes details about the client device such as screen_width, screen_height, screen_density, and so on.", - "$ref": "#/components/schemas/EdgeeEventClientData" - }, - "campaign": { - "type": "object", - "description": "The context.campaign object includes details about the utm data parameters.", - "$ref": "#/components/schemas/EdgeeEventCampaignData" - }, - "page": { - "type": "object", - "description": "The context.page object includes details about the page that generated this event, such as its URL, title, referrer, and so on.", - "$ref": "#/components/schemas/EdgeeEventPageData" - }, - "user": { - "type": "object", - "description": "The context.user object includes details about the user that generated this event.", - "$ref": "#/components/schemas/EdgeeEventUserData" - } - } - } - } - } - } - }, - "EdgeeEventPage": { - "type": "object", - "description": "This is a wrapper for the Edgee page event.", - "properties": { - "type": { - "type": "string", - "description": "The page event type", - "default": "page", - "enum": ["page"] - }, - "data": { - "type": "object", - "description": "The page event's data. This will be merged with the data_collection.context.page object.", - "$ref": "#/components/schemas/EdgeeEventPageData" - } - } - }, - "EdgeeEventUser": { - "type": "object", - "description": "This is a wrapper for the Edgee user event.", - "properties": { - "type": { - "type": "string", - "description": "The user event type", - "enum": ["user"] - }, - "data": { - "type": "object", - "description": "The user event's data. This will be merged with the data_collection.context.user object.", - "$ref": "#/components/schemas/EdgeeEventUserData" - } - } - }, - "EdgeeEventTrack": { - "type": "object", - "description": "This is a wrapper for the Edgee track event.", - "properties": { - "type": { - "type": "string", - "description": "The track event type", - "enum": ["track"] - }, - "data": { - "type": "object", - "description": "The track event's data.", - "$ref": "#/components/schemas/EdgeeEventTrackData" - } - } - }, - "EdgeeEventPageData": { - "type": "object", - "description": "The page data structure (both page event and page context).", - "example": { - "name": "Page name", - "category": "category 1", - "title": "Page title", - "url": "https://demo.edgee.app/analytics-with-edgee.html", - "path": "/analytics-with-edgee.html", - "search": "?test=1", - "referrer": "https://demo.edgee.app/previous-page.html", - "keywords": ["keyword1", "keyword2"], - "properties": { - "key": "value" - } - }, - "properties": { - "name": { - "type": "string", - "description": "The page's name/title.", - "example": "Page name" - }, - "category": { - "type": "string", - "description": "The page's category.", - "example": "category 1" - }, - "title": { - "type": "string", - "description": "The page's title.", - "example": "Page title" - }, - "url": { - "type": "string", - "description": "The page's full URL.", - "example": "https://demo.edgee.app/analytics-with-edgee.html" - }, - "path": { - "type": "string", - "description": "The page's path (excluding protocol and hostname).", - "example": "/analytics-with-edgee.html" - }, - "search": { - "type": "string", - "description": "The page's query string.", - "example": "?test=1" - }, - "referrer": { - "type": "string", - "description": "The page's referrer.", - "example": "https://demo.edgee.app/previous-page.html" - }, - "keywords": { - "type": "array", - "description": "The page's meta keywords.", - "items": { - "type": "string" - }, - "example": ["keyword1", "keyword2"] - }, - "properties": { - "type": "object", - "description": "The page's custom properties as (string-string) key-value pairs.", - "additionalProperties": { - "type": "string" - }, - "example": { - "key": "value" - } - } - } - }, - "EdgeeEventUserData": { - "type": "object", - "description": "The user data structure (both user event and user context).", - "example": { - "user_id": "abc123", - "anonymous_id": "def345", - "properties": { - "key1": "value1", - "key2": "value2" - } - }, - "properties": { - "user_id": { - "type": "string", - "description": "The user's ID.", - "example": "abc123" - }, - "anonymous_id": { - "type": "string", - "description": "The user's anonymous ID.", - "example": "def345" - }, - "properties": { - "type": "object", - "description": "The user's custom properties as (string-string) key-value pairs.", - "additionalProperties": { - "type": "string" - }, - "example": { - "key1": "value1", - "key2": "value2" - } - } - } - }, - "EdgeeEventTrackData": { - "type": "object", - "description": "The track data structure.", - "example": { - "name": "custom-event-name", - "properties": { - "color": "blue", - "button": "OK" - } - }, - "properties": { - "name": { - "type": "string", - "example": "custom-event-name" - }, - "properties": { - "type": "object", - "description": "The track event custom properties as (string-string) key-value pairs.", - "additionalProperties": { - "type": "string" - }, - "example": { - "color": "blue", - "button": "OK" - } - } - } - }, - "EdgeeEventClientData": { - "type": "object", - "description": "The client's context data.", - "example": { - "timezone": "Europe/Paris", - "screen_width": 1512, - "screen_height": 982, - "screen_density": 2, - "user_agent_architecture": "arm", - "user_agent_bitness": "64", - "os_version": "15.1.1", - "user_agent_full_version_list": "Google Chrome;131.0.6778.109|Chromium;131.0.6778.109|Not_A Brand;24.0.0.0" - }, - "properties": { - "timezone": { - "type": "string", - "description": "The client's timezone", - "example": "Europe/Paris" - }, - "screen_width": { - "type": "number", - "description": "The client's screen width in pixels", - "example": 1512 - }, - "screen_height": { - "type": "number", - "description": "The client's screen width in pixels", - "example": 982 - }, - "screen_density": { - "type": "number", - "description": "The client's screen width in pixels", - "example": 2 - }, - "user_agent_architecture": { - "type": "string", - "description": "The client's architecture", - "example": "arm" - }, - "user_agent_bitness": { - "type": "string", - "description": "The client's bitness", - "example": "64" - }, - "user_agent_model": { - "type": "string", - "description": "The client's user agent model" - }, - "os_version": { - "type": "string", - "description": "The client's operating system version", - "example": "15.1.1" - }, - "user_agent_full_version_list": { - "type": "string", - "description": "The client's user agent full version list", - "example": "Google Chrome;131.0.6778.109|Chromium;131.0.6778.109|Not_A Brand;24.0.0.0" - } - } - }, - "EdgeeEventCampaignData": { - "type": "object", - "description": "The campaign's context data (utm).", - "properties": { - "name": { - "type": "string", - "description": "The campaign name" - }, - "source": { - "type": "string", - "description": "The campaign source" - }, - "medium": { - "type": "string", - "description": "The campaign medium" - }, - "term": { - "type": "string", - "description": "The campaign term" - }, - "content": { - "type": "string", - "description": "The campaign content" - }, - "creative_format": { - "type": "string", - "description": "The campaign creative format" - }, - "marketing_tactic": { - "type": "string", - "description": "The campaign marketing tactis" - } - } - }, - "ErrorResponse": { - "type": "object", - "description": "An error response from the API. More info [here]('/docs/api-reference/errors')", - "properties": { - "error": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "invalid_request_error", - "not_found_error", - "creation_error", - "update_error", - "deletion_error", - "forbidden_error", - "authentication_error" - ], - "default": "invalid_request_error", - "description": "The type of error returned." - }, - "message": { - "type": "string", - "description": "A human-readable message providing more details about the error.", - "example": "Parameter error." - }, - "params": { - "type": "array", - "description": "The specific request parameters associated with the error. May be omitted if the error message is generic enough to apply to multiple parameters.", - "items": { - "type": "object", - "properties": { - "param": { - "type": "string", - "description": "The parameter related to the error.", - "example": "name" - }, - "message": { - "type": "string", - "description": "A human-readable message providing more details about the error.", - "example": "Name is required." - } - } - } - } - } - } - } - } - } - } -} diff --git a/api-reference/domains/create.mdx b/api-reference/domains/create.mdx deleted file mode 100644 index cdb8e2e..0000000 --- a/api-reference/domains/create.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Create a Domain' -openapi: 'POST /v1/projects/{id}/domains' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/domains/delete.mdx b/api-reference/domains/delete.mdx deleted file mode 100644 index 2d23e29..0000000 --- a/api-reference/domains/delete.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Delete an Domain' -openapi: 'DELETE /v1/projects/{id}/domains/{name}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/domains/endpoints.mdx b/api-reference/domains/endpoints.mdx deleted file mode 100644 index e536b2f..0000000 --- a/api-reference/domains/endpoints.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Domain endpoints" -description: "Domain endpoints allow you to create, list, get and delete Domains for a project." ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -A domain is the hostname of a website, such as `www.example.com`, used to route traffic to the correct Edgee Project. - - - -```js ENDPOINTS -POST /v1/projects/:id/domains -GET /v1/projects/:id/domains/:name -DELETE /v1/projects/:id/domains/:name -GET /v1/projects/:id/domains -``` - - - diff --git a/api-reference/domains/get.mdx b/api-reference/domains/get.mdx deleted file mode 100644 index 202d6eb..0000000 --- a/api-reference/domains/get.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Retrieve a Domain' -openapi: 'GET /v1/projects/{id}/domains/{name}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/domains/list.mdx b/api-reference/domains/list.mdx deleted file mode 100644 index 44b0f29..0000000 --- a/api-reference/domains/list.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'List all Domains' -openapi: 'GET /v1/projects/{id}/domains' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/domains/object.mdx b/api-reference/domains/object.mdx deleted file mode 100644 index df3ac25..0000000 --- a/api-reference/domains/object.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -openapi-schema: Domain -title: 'The Domain object' -description: 'The domain object is used to represent a domain in Edgee.' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/domains/update.mdx b/api-reference/domains/update.mdx deleted file mode 100644 index 01adc9d..0000000 --- a/api-reference/domains/update.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Update a Domain' -openapi: 'POST /v1/projects/{id}/domains/{name}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/errors.mdx b/api-reference/errors.mdx index 94ad87c..b424790 100644 --- a/api-reference/errors.mdx +++ b/api-reference/errors.mdx @@ -3,10 +3,6 @@ title: "Errors" description: "How Edgee API responds when errors occur." --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Edgee uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter diff --git a/api-reference/introduction.mdx b/api-reference/index.mdx similarity index 93% rename from api-reference/introduction.mdx rename to api-reference/index.mdx index 6c3f409..d8be12b 100644 --- a/api-reference/introduction.mdx +++ b/api-reference/index.mdx @@ -3,10 +3,6 @@ title: 'Introduction' description: 'A brief introduction to the Edgee API.' --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Welcome to the Edgee API documentation. This guide will help you understand how to interact with the Edgee API to create, retrieve, update, and delete Edgee resources through HTTP requests. @@ -16,7 +12,7 @@ retrieve, update, and delete Edgee resources through HTTP requests. All URLs referenced in the documentation have the following base: ``` -https://api.edgee.app +https://api.edgee.ai ``` ## Authentication diff --git a/api-reference/invitations/create.mdx b/api-reference/invitations/create.mdx deleted file mode 100644 index 2cdadf1..0000000 --- a/api-reference/invitations/create.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Create an Invitation' -openapi: 'POST /v1/invitations' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/invitations/delete.mdx b/api-reference/invitations/delete.mdx deleted file mode 100644 index 947f91d..0000000 --- a/api-reference/invitations/delete.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Delete an Invitation' -openapi: 'DELETE /v1/invitations/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/invitations/endpoints.mdx b/api-reference/invitations/endpoints.mdx deleted file mode 100644 index 6519e5f..0000000 --- a/api-reference/invitations/endpoints.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Invitation endpoints" -description: "Endpoints for managing invitations to organizations." ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -An invitation is a request to join an organization. An invitation is sent to an email address, and the recipient can accept or decline the invitation. - - -```js ENDPOINTS -POST /v1/invitations -GET /v1/invitations/:id -DELETE /v1/invitations/:id -GET /v1/invitations -``` - - - diff --git a/api-reference/invitations/get.mdx b/api-reference/invitations/get.mdx deleted file mode 100644 index 33a3575..0000000 --- a/api-reference/invitations/get.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Retrieve an Invitation' -openapi: 'GET /v1/invitations/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/invitations/list.mdx b/api-reference/invitations/list.mdx deleted file mode 100644 index a43a964..0000000 --- a/api-reference/invitations/list.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'List all Invitations' -openapi: 'GET /v1/invitations' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/invitations/object.mdx b/api-reference/invitations/object.mdx deleted file mode 100644 index 60e723c..0000000 --- a/api-reference/invitations/object.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -openapi-schema: Invitation -title: 'The Invitation object' -description: 'The invitation object is used to represent an invitation in Edgee.' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/openapi.json b/api-reference/openapi.json index bd0ffaf..ca4d9a3 100644 --- a/api-reference/openapi.json +++ b/api-reference/openapi.json @@ -6,7 +6,7 @@ }, "servers": [ { - "url": "https://api.edgee.app" + "url": "https://api.edgee.ai" } ], "security": [ @@ -15,140 +15,11 @@ } ], "paths": { - "/v1/api_tokens": { - "get": { - "operationId": "listApiTokens", - "summary": "List all ApiTokens", - "description": "Returns a list of your ApiTokens. The ApiTokens are returned sorted by creation date, with the most recent ApiTokens appearing first.", - "parameters": [ - { - "name": "name", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "The name of the ApiToken." - } - }, - {"$ref": "#/components/parameters/limit"}, - {"$ref": "#/components/parameters/start_key"}, - {"$ref": "#/components/parameters/order_direction"} - ], - "responses": { - "200": { - "description": "A list of ApiTokens", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListParams" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ApiToken" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, + "/v1/projects/{id}/purge-cache": { "post": { - "operationId": "createApiToken", - "summary": "Create a new ApiToken", - "description": "Creates a new ApiToken. The ApiToken is returned, including its `token` field, which you should record for future reference. **Be careful, this token is only returned once, when the token is created.**", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiTokenCreateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created ApiToken", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiToken" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/api_tokens/{id}": { - "get": { - "operationId": "getApiToken", - "summary": "Get an ApiToken", - "description": "Retrieve an ApiToken that has previously been created.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The ApiToken", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiToken" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "operationId": "deleteApiToken", - "summary": "Delete an ApiToken", - "description": "Delete an ApiToken that has previously been created. Once deleted, the ApiToken can no longer be used to authenticate requests.", + "operationId": "purgeProjectCache", + "summary": "Purge cache for a project", + "description": "Purge the cache for a specific project. You can purge all cache or purge cache for a specific path. When purging by path, the cache for all domains associated with the project will be purged for that path.", "parameters": [ { "name": "id", @@ -156,97 +27,15 @@ "required": true, "schema": { "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted ApiToken", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } + }, + "description": "The project ID" } - } - } - }, - "/v1/organizations": { - "get": { - "operationId": "listOrganizations", - "summary": "List all Organizations", - "description": "Returns a list of your Organizations. The Organizations are returned sorted by creation date, with the most recent Organizations appearing first.", - "parameters": [ - { - "name": "type", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "The type of the organization.", - "enum": ["pro", "perso"] - } - }, - {"$ref": "#/components/parameters/limit"}, - {"$ref": "#/components/parameters/start_key"}, - {"$ref": "#/components/parameters/order_direction"} ], - "responses": { - "200": { - "description": "A list of Organizations", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Organization" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "createOrganization", - "summary": "Create a new Organization", - "description": "Creates a new Organization.", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrganizationCreateInput" + "$ref": "#/components/schemas/PurgeCacheInput" } } }, @@ -254,46 +43,23 @@ }, "responses": { "200": { - "description": "The created Organization", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/organizations/me": { - "get": { - "operationId": "getMyOrganization", - "summary": "Get my Organization", - "description": "Retrieve my Organization personal organization.", - "responses": { - "200": { - "description": "The retrieved Organization", + "description": "Cache purged successfully", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Organization" + "type": "object", + "properties": { + "message": { + "type": "string", + "example": "Cache purged" + } + } } } } }, - "4XX": { - "description": "unexpected error", + "400": { + "description": "Bad request - invalid input parameters", "content": { "application/json": { "schema": { @@ -301,38 +67,9 @@ } } } - } - } - } - }, - "/v1/organizations/{id}": { - "get": { - "operationId": "getOrganization", - "summary": "Get an Organization", - "description": "Retrieve an Organization that has previously been created.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The retrieved Organization", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" - } - } - } }, - "4XX": { - "description": "unexpected error", + "403": { + "description": "Forbidden - insufficient permissions", "content": { "application/json": { "schema": { @@ -340,46 +77,9 @@ } } } - } - } - }, - "post": { - "operationId": "updateOrganization", - "summary": "Update an Organization", - "description": "Updates an existing Organization.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OrganizationUpdateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated Organization", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Organization" - } - } - } }, - "4XX": { - "description": "unexpected error", + "404": { + "description": "Project not found", "content": { "application/json": { "schema": { @@ -387,36 +87,9 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteOrganization", - "summary": "Delete an Organization", - "description": "Deletes an existing Organization.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted Organization", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } }, - "4XX": { - "description": "unexpected error", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { @@ -427,4034 +100,12 @@ } } } + } + }, + "components": { + "parameters": { }, - "/v1/organizations/{id}/users": { - "get": { - "operationId": "listOrganizationsUsers", - "summary": "List Users of an organizations", - "description": "Retrieves all the Users of an organizations.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "role", - "in": "query", - "required": true, - "schema": { - "type": "string", - "description": "The role of the users.", - "enum": ["admin", "editor", "member"] - } - }, - {"$ref": "#/components/parameters/limit"}, - {"$ref": "#/components/parameters/start_key"}, - {"$ref": "#/components/parameters/order_direction"} - ], - "responses": { - "200": { - "description": "A list of Users", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OrganizationUser" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/organizations/{id}/users/{userId}": { - "post": { - "operationId": "updateOrganizationUser", - "summary": "Update a User of an Organization", - "description": "Updates an existing User of an Organization.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "userId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OrganizationUserUpdateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated User", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OrganizationUser" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "operationId": "deleteOrganizationUser", - "summary": "Delete a User from an Organization", - "description": "Remove an existing User from an Organization.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "userId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted User", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects": { - "get": { - "operationId": "listProjects", - "summary": "List all Projects", - "description": "Returns a list of your Projects. The Projects are returned sorted by creation date, with the most recent Project appearing first.", - "parameters": [ - { - "name": "organization_id", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "The organization ID." - } - }, - {"$ref": "#/components/parameters/limit"}, - {"$ref": "#/components/parameters/start_key"}, - {"$ref": "#/components/parameters/order_direction"} - ], - "responses": { - "200": { - "description": "A list of Projects", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "createProject", - "summary": "Create a new Project", - "description": "Creates a new Project.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectCreateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created Project", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectBase" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}": { - "get": { - "operationId": "getProject", - "summary": "Get a Project", - "description": "Retrieve a Project that has previously been created.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "organization_id", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "The organization ID." - } - } - ], - "responses": { - "200": { - "description": "The retrieved Project", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "updateProject", - "summary": "Update a Project", - "description": "Updates an existing Project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectUpdateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated Project", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "operationId": "deleteProject", - "summary": "Delete a Project", - "description": "Deletes an existing Project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted Project", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/counters": { - "get": { - "operationId": "getProjectCounters", - "summary": "List all statistics for a given project", - "description": "List all statistics for a given project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "month", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date", - "description": "The month to filter the statistics." - } - }, - { - "name": "day", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date", - "description": "The day to filter the statistics." - } - } - ], - "responses": { - "200": { - "description": "The retrieved project statistics", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectCounters" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/components/{componentId}/counters": { - "get": { - "operationId": "getProjectComponentCounters", - "summary": "List all Counters for a given project component", - "description": "List all Counters for a given project component.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "componentId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "month", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date", - "description": "The month to filter the counters." - } - }, - { - "name": "day", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date", - "description": "The day to filter the counters." - } - } - ], - "responses": { - "200": { - "description": "The retrieved project counters", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectComponentCounters" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/domains": { - "get": { - "operationId": "listProjectDomains", - "summary": "List all Domains", - "description": "Retrieves all the Domains of a project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "A list of Domains", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Domain" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "createProjectDomain", - "summary": "Create a new Domain", - "description": "Creates a new Domain of a project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DomainCreateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created Domain", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Domain" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/domains/{name}": { - "get": { - "operationId": "getProjectDomain", - "summary": "Get a Domain", - "description": "Retrieve a Domain that has previously been created.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The retrieved Domain", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Domain" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "updateProjectDomain", - "summary": "Update a Domain", - "description": "Updates an existing Domain.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DomainUpdateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated Domain", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Domain" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "operationId": "deleteProjectDomain", - "summary": "Delete a Domain", - "description": "Deletes an existing Domain.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted Domain", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/proxy-settings": { - "get": { - "operationId": "listProjectProxySettings", - "summary": "List Proxy Settings revisions of a project", - "description": "Retrieves all the Proxy Settings revisions of a project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The list of all the Proxy Settings revisions", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProxySettings" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "createProjectProxySettings", - "summary": "Create a new ProxySettings", - "description": "Creates a new ProxySettings.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxySettingsCreateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created ProxySettings", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxySettings" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/proxy-settings/{revision}": { - "post": { - "operationId": "updateProjectProxySettings", - "summary": "Update a ProxySettings by its revision number", - "description": "Updates a ProxySettings.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "revision", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxySettingsUpdateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated ProxySettings", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProxySettings" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/components": { - "get": { - "operationId": "listProjectComponents", - "summary": "List all Project Components", - "description": "Retrieves all the Components of a project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - {"$ref": "#/components/parameters/componentCategory"}, - {"$ref": "#/components/parameters/componentSubcategory"} - ], - "responses": { - "200": { - "description": "A list of Project Components", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectComponent" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "createProjectComponent", - "summary": "Create a new Project Component", - "description": "Creates a new Component for a project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectComponent" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created Project Component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectComponent" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/components/{project_component_id}": { - "get": { - "operationId": "getProjectComponent", - "summary": "Get a Component of a project", - "description": "Retrieve a Project Component that has previously been set up.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "project_component_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The retrieved Project Component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectComponent" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "updateProjectComponent", - "summary": "Update a Project Component", - "description": "Updates an existing Project Component.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "project_component_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectComponent" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated Domain", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectComponent" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "operationId": "deleteProjectComponent", - "summary": "Delete a Project Component", - "description": "Deletes an existing Project Component.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "project_component_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted Project Component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/purge-cache": { - "post": { - "operationId": "purgeProjectCache", - "summary": "Purge cache for a project", - "description": "Purge the cache for a specific project. You can purge all cache or purge cache for a specific path. When purging by path, the cache for all domains associated with the project will be purged for that path.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "The project ID" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PurgeCacheInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Cache purged successfully", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "message": { - "type": "string", - "example": "Cache purged" - } - } - } - } - } - }, - "400": { - "description": "Bad request - invalid input parameters", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden - insufficient permissions", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Project not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/components": { - "get": { - "operationId": "listPublicComponents", - "summary": "List public components", - "description": "Returns a list of public components.", - "parameters": [ - {"$ref": "#/components/parameters/componentCategory"}, - {"$ref": "#/components/parameters/componentSubcategory"} - ], - "responses": { - "200": { - "description": "A list of Components", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Component" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "createComponent", - "summary": "Create a Component", - "description": "Create a Component.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentCreateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created Component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Component" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/components/{id}": { - "get": { - "operationId": "getComponentByUuid", - "summary": "Get a Component by Uuid", - "description": "Retrieve a Component by Uuid.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The retrieved Component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Component" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "put": { - "operationId": "updateComponentByUuid", - "summary": "Update a Component by Uuid", - "description": "Updates an existing Component by Uuid.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentUpdateParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated Component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Component" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "operationId": "deleteComponentByUuid", - "summary": "Delete a Component by Uuid", - "description": "Delete an existing Component by Uuid.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted Invitation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/components/{orgSlug}/{componentSlug}": { - "get": { - "operationId": "getComponentBySlug", - "summary": "Get a Component by Slug", - "description": "Retrieve a Component by Slug.", - "parameters": [ - { - "name": "orgSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "componentSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The retrieved Component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Component" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "put": { - "operationId": "updateComponentBySlug", - "summary": "Update a Component by Slug", - "description": "Updates an existing Component by Slug.", - "parameters": [ - { - "name": "orgSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "componentSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentUpdateParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated Component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Component" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "operationId": "deleteComponentBySlug", - "summary": "Delete a Component by Slug", - "description": "Delete an existing Component by Slug.", - "parameters": [ - { - "name": "orgSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "componentSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted component", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/components/{id}/versions": { - "post": { - "operationId": "createComponentVersionByUuid", - "summary": "Create a Component Version", - "description": "Create a Component Version.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentVersionCreateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created Component Version", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentVersion" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/components/{orgSlug}/{componentSlug}/versions": { - "post": { - "operationId": "createComponentVersionBySlug", - "summary": "Create a Component Version by Slug", - "description": "Create a Component Version by Slug.", - "parameters": [ - { - "name": "orgSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "componentSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentVersionCreateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created Component Version", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentVersion" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/components/{orgSlug}/{componentSlug}/versions/{versionId}": { - "put": { - "operationId": "updateComponentVersionBySlug", - "summary": "Update a Component Version by Slug", - "description": "Update a Component Version by Slug.", - "parameters": [ - { - "name": "orgSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "componentSlug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "versionId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentVersionUpdateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated Component Version", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentVersion" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/organizations/{id}/components": { - "get": { - "operationId": "listOrganizationComponents", - "summary": "List organization components", - "description": "Returns a list of organization components.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - {"$ref": "#/components/parameters/componentCategory"}, - {"$ref": "#/components/parameters/componentSubcategory"} - ], - "responses": { - "200": { - "description": "A list of Components", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Component" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/invitations": { - "get": { - "operationId": "listInvitations", - "summary": "List all Invitations", - "description": "Returns a list of the invitation of your organizations. The Invitations are returned sorted by creation date, with the most recent Invitation appearing first.", - "parameters": [ - { - "name": "organization_id", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "The organization ID." - } - }, - {"$ref": "#/components/parameters/limit"}, - {"$ref": "#/components/parameters/start_key"}, - {"$ref": "#/components/parameters/order_direction"} - ], - "responses": { - "200": { - "description": "A list of Invitations", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Invitation" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "createInvitation", - "summary": "Create a new Invitation", - "description": "Creates a new Invitation.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvitationCreateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The created Invitation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invitation" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/invitations/{id}": { - "get": { - "operationId": "getInvitation", - "summary": "Get an Invitation", - "description": "Retrieve an Invitation that has previously been created.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The retrieved Invitation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Invitation" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "delete": { - "operationId": "deleteInvitation", - "summary": "Delete an Invitation", - "description": "Deletes an existing Invitation.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The deleted Invitation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeletedResponse" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/users/me": { - "get": { - "operationId": "getMe", - "summary": "Get my User object", - "description": "Retrieves my current User object.", - "responses": { - "200": { - "description": "Your User object", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserWithRoles" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/users/{id}": { - "get": { - "operationId": "getUser", - "summary": "Get a User", - "description": "Retrieve a User that has previously been created.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The retrieved User", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserWithRoles" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - }, - "post": { - "operationId": "updateUser", - "summary": "Update a User", - "description": "Update a User that has previously been created.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserUpdateInput" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "The updated User", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserWithRoles" - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/debug/data-collection/incoming": { - "get": { - "operationId": "getIncomingDataCollectionEvents", - "summary": "List all Incoming Data Collection Events", - "description": "Retrieves all the Incoming Data Collection Events of a project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - {"$ref": "#/components/parameters/limit"}, - {"$ref": "#/components/parameters/start_key"}, - {"$ref": "#/components/parameters/order_direction"} - ], - "responses": { - "200": { - "description": "A list of Incoming Data Collection Events", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IncomingDataCollectionEvent" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/projects/{id}/debug/data-collection/outgoing/{event_id}": { - "get": { - "operationId": "getOutgoingDataCollectionEvents", - "summary": "List all Outgoing Data Collection Events", - "description": "Retrieves all the Outgoing Data Collection Events of a project.", - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "event_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - {"$ref": "#/components/parameters/limit"}, - {"$ref": "#/components/parameters/start_key"}, - {"$ref": "#/components/parameters/order_direction"} - ], - "responses": { - "200": { - "description": "A list of Outgoing Data Collection Events", - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/ListResponse" - } - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OutgoingDataCollectionEvent" - } - } - } - } - } - } - }, - "4XX": { - "description": "unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/v1/upload/presign": { - "get": { - "operationId": "getUploadPresignedUrl", - "summary": "Get Upload Presigned URL", - "responses": { - "200": { - "description": "An Upload Presigned URL", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UploadPresign" - } - } - } - } - } - } - } - }, - "components": { - "parameters": { - "limit": { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "description": "A limit on the number of objects to be returned." - } - }, - "start_key": { - "name": "start_key", - "in": "query", - "required": false, - "schema": { - "type": "string", - "description": "A cursor for use in pagination. `start_key` parameter defines the place in the list for your subsequent calls. For instance, if you make a list request and receive 100 objects, the last one having `ABCDE` key, you can make a subsequent call with `start_key=ABCDE` in order to fetch the next page of the list." - } - }, - "order_direction": { - "name": "order_direction", - "in": "query", - "required": false, - "schema": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ], - "description": "The order direction of the returned list. Objects are returned sorted by creation date. By default, the order is descending, so the most recent object appears first. Possible values are ASC and DESC. Default is DESC." - } - }, - "componentCategory": { - "name": "category", - "in": "query", - "required": false, - "schema": { - "type": "string", - "enum": ["data_collection", "edge_function", "js_gateway", "security", "consent_management", "identity", "stitching"], - "description": "Filter components by category." - } - }, - "componentSubcategory": { - "name": "subcategory", - "in": "query", - "required": false, - "schema": { - "type": "string", - "enum": ["analytics", "warehouse", "attribution", "conversion_api", "wasm_function", "server_side_tagging", "microservice", "kv_store", "bot_protection", "rate_limiting", "anti_fraud", "consent_mapping", "cmp", "native_cookies", "unique_id", "ab_testing", "web_performance"], - "description": "Filter components by sub category." - } - } - }, - "schemas": { - "ApiToken": { - "type": "object", - "description": "An ApiToken is a unique identifier that you can use to authenticate requests to the API. You can create as many ApiTokens as you need.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object’s type. Objects of the same type share the same value.", - "readOnly": true, - "example": "api_token" - }, - "id": { - "type": "string", - "description": "This is the internal ID for this ApiToken. You don’t need to record this information, since you will not need to use it.", - "readOnly": true - }, - "user_id": { - "type": "string", - "description": "The ID of the user that created this ApiToken.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the ApiToken." - }, - "from_browser": { - "type": "boolean", - "description": "Whether this ApiToken was created from the browser.", - "readOnly": true - }, - "last_used_at": { - "type": "string", - "format": "date-time", - "description": "The last time this ApiToken was used.", - "readOnly": true - }, - "expires_at": { - "type": "string", - "format": "date-time", - "description": "The time this ApiToken expires." - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the object was created.", - "readOnly": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the object was last updated.", - "readOnly": true - }, - "token": { - "type": "string", - "description": "The actual token that you will use to authenticate your requests. > **Be careful, this token is only returned once, when the token is created.**", - "readOnly": true - } - } - }, - "ApiTokenCreateInput": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/ApiToken" - } - ], - "required": ["name"] - }, - "Organization": { - "type": "object", - "properties": { - "object": { - "type": "string", - "description": "String representing the object’s type. Objects of the same type share the same value.", - "readOnly": true, - "example": "organization" - }, - "id": { - "type": "string", - "description": "The unique identifier for the organization.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the organization." - }, - "slug": { - "type": "string", - "description": "The slug of the organization." - }, - "avatar_url": { - "type": "string", - "description": "Avatar URL of the organization", - "readOnly": true - }, - "type": { - "type": "string", - "description": "The type of the organization.", - "readOnly": true, - "enum": ["perso", "pro"] - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the object was created.", - "readOnly": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the object was last updated.", - "readOnly": true - } - }, - "required": [ - "object", - "id", - "name", - "slug", - "created_at", - "updated_at" - ] - }, - "OrganizationCreateInput": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/Organization" - } - ], - "required": ["name", "slug"] - }, - "OrganizationUpdateInput": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/Organization" - } - ], - "required": ["id"] - }, - "ProjectBase": { - "type": "object", - "description": "A Project is a unique identifier that you can use to manage and organize your work. Each project belongs to an organization.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "project", - "readOnly": true - }, - "id": { - "type": "string", - "description": "Unique identifier for the project", - "readOnly": true - }, - "organization_id": { - "type": "string", - "description": "Unique identifier for the organization the project belongs to", - "example": "d290f1ee-6c54-4b01-90e6-d701748f0851" - }, - "slug": { - "type": "string", - "description": "The Name of the project, URL-friendly string that identifies the project", - "example": "my-project" - }, - "description": { - "type": "string", - "description": "Description of the project", - "example": "This is my project" - }, - "type": { - "type": "string", - "description": "The type of the project.", - "enum": ["proxy", "ai_analytics", "mcp"], - "default": "proxy" - }, - "avatar_url": { - "type": "string", - "description": "Avatar URL of the project", - "readOnly": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was created", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was last updated", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - }, - "external_project_url": { - "type": "string", - "description": "External link to a platform provider for the project", - "example": "https://my-project.com" - } - } - }, - "ProjectBaseWithoutOrgId": { - "type": "object", - "description": "A Project is a unique identifier that you can use to manage and organize your work. Each project belongs to an organization.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "project", - "readOnly": true - }, - "id": { - "type": "string", - "description": "Unique identifier for the project", - "readOnly": true - }, - "slug": { - "type": "string", - "description": "The Name of the project, URL-friendly string that identifies the project", - "example": "my-project" - }, - "description": { - "type": "string", - "description": "Description of the project", - "example": "This is my project" - }, - "type": { - "type": "string", - "description": "The type of the project.", - "enum": ["proxy", "ai_analytics", "mcp"], - "default": "proxy" - }, - "avatar_url": { - "type": "string", - "description": "Avatar URL of the project", - "readOnly": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was created", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was last updated", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - } - } - }, - "ProjectFull": { - "type": "object", - "description": "A Project is a unique identifier that you can use to manage and organize your work. Each project belongs to an organization.", - "properties": { - "log_severity": { - "type": "string", - "description": "The log severity of the project.", - "enum": ["DEBUG", "INFO", "WARNING", "ERROR"], - "default": "INFO", - "nullable": true - }, - "edgee_behind_proxy_cache": { - "type": "boolean", - "description": "Whether the project is behind a proxy cache (or CDN).", - "default": false, - "nullable": true - }, - "force_https": { - "type": "boolean", - "description": "Whether the project is forcing HTTPS.", - "default": true, - "nullable": true - }, - "cache": { - "type": "boolean", - "description": "Whether caching is enabled for the project.", - "default": false, - "nullable": true - }, - "override_cache": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CacheRule" - }, - "description": "List of cache rules that override the default cache settings." - }, - "override_cache_enabled": { - "type": "boolean", - "description": "Whether the cache override is enabled.", - "default": false, - "nullable": true - }, - "cookie_name": { - "type": "string", - "description": "The name of the cookie that edgee will use to store the session ID.", - "default": "edgee", - "nullable": true - }, - "cookie_domain": { - "type": "string", - "description": "The domain of the cookie that edgee will use to store the session ID.", - "nullable": true - }, - "proxy_only": { - "type": "boolean", - "description": "Whether the Edgee will only proxy requests to the origin without any computing.", - "default": false, - "nullable": true - }, - "proxy_only_path_regex": { - "type": "string", - "description": "A regular expression that matches the path of the request to be proxied only.", - "nullable": true - }, - "inject_sdk": { - "type": "boolean", - "description": "Whether Edgee should inject the SDK into the html content.", - "default": false, - "nullable": true - }, - "inject_sdk_position": { - "type": "string", - "description": "The position of the SDK injection.", - "enum": ["prepend", "append"], - "default": "append", - "nullable": true - }, - "cookieless": { - "type": "boolean", - "description": "Whether the Edgee should use a cookieless session.", - "default": false, - "nullable": true - }, - "autocapture": { - "type": "object", - "description": "Configuration for automatic event capture by the Edgee SDK.", - "properties": { - "pageview": { - "type": "boolean", - "description": "Whether to automatically capture pageview events", - "default": false - }, - "spa_pageview": { - "type": "boolean", - "description": "Whether to automatically capture single page app pageview events", - "default": false - }, - "engagement": { - "type": "boolean", - "description": "Whether to automatically capture engagement events", - "default": false - }, - "click": { - "type": "boolean", - "description": "Whether to automatically capture click events", - "default": false - }, - "form": { - "type": "boolean", - "description": "Whether to automatically capture form events", - "default": false - }, - "scroll": { - "type": "boolean", - "description": "Whether to automatically capture scroll events", - "default": false - } - } - }, - "enforce_no_store_policy": { - "type": "boolean", - "description": "A boolean that indicates whether Edgee should enforce a `no-store` cache-control header on the responses that can be computed.", - "default": false, - "nullable": true - }, - "trusted_ips": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of trusted IPs that can access the project.", - "default": [], - "nullable": true - }, - "password_protection": { - "type": "boolean", - "description": "Whether the project is password protected.", - "default": false, - "nullable": true - }, - "blocked_ips": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of blocked IPs that can't access the project. Blocking IPs can only works is trusted_ips and password_protection are empty.", - "default": [], - "nullable": true - }, - "cookie_whitelist": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of cookies that are allowed to be set by the project.", - "default": [], - "nullable": true - }, - "forwarded_headers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "description": "List of headers that are forwarded to the origin.", - "default": [], - "nullable": true - }, - "rate_limiting": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RateLimitingRule" - }, - "description": "List of rate limiting rules for the project.", - "default": [], - "nullable": true - }, - "rate_limiting_enabled": { - "type": "boolean", - "description": "Whether rate limiting is enabled for the project.", - "default": false, - "nullable": true - } - } - }, - "Project": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/ProjectBase" - }, - { - "$ref": "#/components/schemas/ProjectFull" - } - ] - }, - "ProjectCreateInput": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/ProjectBase" - } - ], - "required": ["organization_id", "slug", "type"] - }, - "ProjectUpdateInput": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/ProjectBaseWithoutOrgId" - }, - { - "$ref": "#/components/schemas/ProjectFull" - } - ], - "required": ["id"] - }, - "CacheRule": { - "type": "object", - "description": "A CacheRule is a rule that overrides the default cache settings.", - "properties": { - "path": { - "type": "string" - }, - "regex": { - "type": "boolean" - }, - "ttl": { - "type": "number" - }, - "swr": { - "type": "number" - }, - "pass": { - "type": "boolean" - }, - "rank": { - "type": "number" - }, - "conditions": { - "type": "object", - "properties": { - "request_cookies": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/KeyValueConditions" - } - ] - }, - "request_headers": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/KeyValueConditions" - } - ] - }, - "request_query_params": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/KeyValueConditions" - } - ] - }, - "request_methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "response_status": { - "type": "array", - "items": { - "type": "number" - } - }, - "response_headers": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/KeyValueConditions" - } - ] - } - } - } - } - }, - "PurgeCacheInput": { - "type": "object", - "description": "Input parameters for purging cache", - "properties": { - "id": { - "type": "string", - "description": "The project ID (required, must be a valid UUID)", - "format": "uuid" - }, - "path": { - "type": "string", - "description": "Optional path to purge cache for. If not provided, all cache will be purged. Query strings are automatically removed from the path.", - "example": "/api/v1/users" - }, - "override_cache": { - "type": "boolean", - "description": "Whether to purge override cache instead of main cache. Defaults to false.", - "default": false - } - }, - "required": ["id"] - }, - "RateLimitingRule": { - "type": "object", - "description": "A RateLimitingRule defines a rate limiting rule for the project.", - "properties": { - "rank": { - "type": "integer", - "description": "The rank of the rule. Rules are evaluated in order of rank (lowest first).", - "minimum": 1 - }, - "limit": { - "type": "integer", - "description": "Maximum requests per second within the rate window.", - "minimum": 1 - }, - "window": { - "type": "string", - "description": "Rate window for counting requests.", - "enum": ["1s", "10s", "60s"], - "default": "10s" - }, - "block_duration": { - "type": "integer", - "description": "Duration to block the client if rate limit is exceeded (in seconds).", - "minimum": 1, - "default": 60 - }, - "key": { - "type": "array", - "items": { - "type": "string", - "enum": ["ip", "ua"] - }, - "description": "Criteria to include in the client key for rate limiting.", - "default": ["ip"] - }, - "conditions": { - "type": "object", - "description": "Conditions that must be met for this rule to apply.", - "properties": { - "path": { - "type": "string", - "description": "Path pattern to match. Can be exact path or regex pattern." - }, - "regex": { - "type": "boolean", - "description": "Whether the path is a regex pattern.", - "default": false - }, - "method": { - "type": "array", - "items": { - "type": "string", - "enum": ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "TRACE"] - }, - "description": "HTTP methods that this rule applies to." - }, - "continent": { - "type": "array", - "items": { - "type": "string", - "enum": ["AF", "AN", "AS", "EU", "NA", "OC", "SA"] - }, - "description": "Continents that this rule applies to." - }, - "country": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[A-Z]{2}$" - }, - "description": "Countries (ISO 3166-1 alpha-2 codes) that this rule applies to." - } - } - } - }, - "required": ["rank", "limit"] - }, - "KeyValueConditions": { - "type": "object", - "properties": { - "present": { - "type": "array", - "items": { - "type": "string" - } - }, - "absent": { - "type": "array", - "items": { - "type": "string" - } - }, - "values": { - "type": "object", - "additionalProperties": true - } - } - }, - "UserUpdateInput": { - "type": "object", - "properties": { - "avatar_url": { - "type": "string", - "description": "The user avatar URL." - }, - "terms_version": { - "type": "string", - "description": "The Terms version accepted by the user." - }, - "privacy_version": { - "type": "string", - "description": "The Privacy version accepted by the user." - } - } - }, - "Domain": { - "type": "object", - "description": "A Domain is a hostname that you can use to access your project. Each domain belongs to a project.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "domain", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The domain name." - }, - "project_id": { - "type": "string", - "description": "The Project ID." - }, - "dns_status": { - "type": "boolean", - "description": "The DNS status of the domain.", - "readOnly": true - }, - "ssl_status": { - "type": "boolean", - "description": "The SSL status of the domain.", - "readOnly": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the object was created.", - "readOnly": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the object was last updated.", - "readOnly": true - } - } - }, - "DomainCreateInput": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The domain name." - } - }, - "required": ["name"] - }, - "DomainUpdateInput": { - "type": "object", - "properties": { - "dns_status": { - "type": "boolean", - "description": "The DNS status of the domain." - }, - "ssl_status": { - "type": "boolean", - "description": "The SSL status of the domain." - } - } - }, - "ProxySettings": { - "type": "object", - "description": "A ProxySettings is a revision of the proxy settings of a project.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "proxy_settings", - "readOnly": true - }, - "revision": { - "type": "number", - "description": "The revision number of the proxy settings.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "Description of the proxy settings revision." - }, - "is_active": { - "type": "boolean", - "description": "Whether this revision is the active one.", - "readOnly": true - }, - "backends": { - "type": "array", - "description": "The backend list of the proxy.", - "items": { - "$ref": "#/components/schemas/ProxySettingsBackend" - } - }, - "routes": { - "type": "array", - "description": "The routing rules of the proxy.", - "items": { - "$ref": "#/components/schemas/ProxySettingsRoute" - } - } - } - }, - "ProxySettingsCreateInput": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "Description of the proxy settings revision." - }, - "backends": { - "type": "array", - "description": "The backend list of the proxy.", - "items": { - "$ref": "#/components/schemas/ProxySettingsBackend" - } - }, - "routes": { - "type": "array", - "description": "The routing rules of the proxy.", - "items": { - "$ref": "#/components/schemas/ProxySettingsRoute" - } - } - }, - "required": ["description", "backends"] - }, - "ProxySettingsUpdateInput": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "Description of the proxy settings revision." - }, - "is_active": { - "type": "boolean", - "description": "Whether this revision is the active one." - } - } - }, - "ProxySettingsBackend": { - "type": "object", - "description": "A ProxySettings backend entity", - "properties": { - "name": { - "type": "string", - "description": "A string that represents the name of the backend." - }, - "address": { - "type": "string", - "description": "A string that represents the address of the backend." - }, - "enable_ssl": { - "type": "boolean", - "description": "A boolean that indicates that SSL should be enabled for this backend." - }, - "check_certificate": { - "type": "string", - "description": "An optional string that, if present, represents the hostname that the server certificate should declare, and turn on validation during backend connections. You should enable this if you are using SSL/ TLS, and setting this will enable SSL for the connection as a side effect." - }, - "ca_certificate": { - "type": "string", - "description": "An optional string that, if present, represents the CA certificate for this backend. Set the CA certificate to use when checking the validity of the backend. Setting this will enable SSL for the connection as a side effect." - }, - "sni_hostname": { - "type": "string", - "description": "An optional string that, if present, represents the SNI hostname for this backend. Setting this will enable SSL for the connection as a side effect." - }, - "default": { - "type": "boolean", - "description": "An optional boolean that, if present and set to `true`, indicates that this backend is the default backend." - }, - "override_host": { - "type": "string", - "description": "An optional string that, if present, represents the host that should be overridden for this backend. This will force the value of the \"Host\" header to the given string when sending out the origin request. If this is not set and no header already exists, the \"Host\" header will default to this backend's address." - } - } - }, - "ProxySettingsRoute": { - "type": "object", - "description": "A ProxySettings route entity", - "properties": { - "path": { - "type": "string", - "description": "A string that represents the path for which this rule applies. This can be a regular expression if `regex` is set to `true`." - }, - "regex": { - "type": "boolean", - "description": "A boolean that indicates whether the `path` is a regular expression." - }, - "backend_name": { - "type": "string", - "description": "The name of the backend to which requests that match this rule should be routed." - }, - "rank": { - "type": "string", - "description": "An integer that represents the rank of this rule. Rules with lower ranks are evaluated before rules with higher ranks." - }, - "continent": { - "type": "array", - "description": "An optional vector of strings that represent the continents associated with an IP address. If this is set, the rule only applies to requests from IP addresses in the specified continents." - }, - "region": { - "type": "array", - "description": "An optional vector of strings that represent the general regions of the world in which the Fastly POP processing the current Compute instance resides. If this is set, the rule only applies to requests from the specified regions." - }, - "country": { - "type": "array", - "description": "An optional vector of strings that represent the countries associated with an IP address. If this is set, the rule only applies to requests from IP addresses in the specified countries." - } - } - }, - "ProjectComponent": { - "type": "object", - "description": "A Project Component object represents an integration of a component in a project.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "project_component", - "readOnly": true - }, - "id": { - "type": "string", - "description": "Unique identifier for the project component", - "readOnly": true - }, - "component_id": { - "type": "string", - "description": "Unique identifier for the component", - "example": "d290f1ee-6c54-4b01-90e6-d701748f0851" - }, - "component_slug": { - "type": "string", - "description": "Slug of the component", - "example": "edgee/google-analytics" - }, - "component_version": { - "type": "string", - "description": "Version of the component", - "example": "1.0.0" - }, - "category": { - "type": "string", - "description": "Category of the component", - "readOnly": true, - "example": "data_collection" - }, - "subcategory": { - "type": "string", - "description": "Subcategory of the component", - "readOnly": true, - "example": "analytics" - }, - "active": { - "type": "boolean", - "description": "Whether the component is active in the project", - "default": true - }, - "settings": { - "type": "object", - "description": "Settings of the component", - "nullable": true - } - } - }, - "Component": { - "type": "object", - "description": "A component is a reusable piece of code that can be used in multiple projects.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "component", - "readOnly": true - }, - "id": { - "type": "string", - "description": "Unique identifier for the component", - "readOnly": true - }, - "name": { - "type": "string", - "description": "Name of the component", - "readOnly": true - }, - "slug": { - "type": "string", - "description": "Slug of the component", - "readOnly": true - }, - "avatar_url": { - "type": "string", - "description": "Avatar of the component", - "readOnly": true - }, - "category": { - "type": "string", - "description": "Category of the component", - "readOnly": true - }, - "subcategory": { - "type": "string", - "description": "Subcategory of the component", - "readOnly": true - }, - "description": { - "type": "string", - "description": "Description of the component", - "readOnly": true - }, - "latest_version": { - "type": "string", - "description": "Latest version of the component", - "readOnly": true - }, - "versions": { - "type": "object", - "description": "List of versions of the component", - "additionalProperties": { - "$ref": "#/components/schemas/ComponentVersion" - } - }, - "repo_link": { - "type": "string", - "description": "Link to the repository of the component", - "readOnly": true - }, - "documentation_link": { - "type": "string", - "description": "Link to the documentation of the component", - "readOnly": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was created", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was last updated", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - }, - "is_public": { - "type": "boolean", - "description": "Whether the component is public or not", - "example": false, - "readOnly": true - }, - "is_archived": { - "type": "boolean", - "description": "Whether the component is archived or not", - "example": false - } - } - }, - "ComponentVersion": { - "type": "object", - "description": "Version of a component", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "component_version_item", - "readOnly": true - }, - "version": { - "type": "string", - "description": "Version of the component" - }, - "wit_world_version": { - "type": "string", - "description": "Wit world version of the component" - }, - "wasm_url": { - "type": "string", - "description": "URL of the component" - }, - "dynamic_fields": { - "type": "array", - "description": "List of configuration fields", - "items": { - "$ref": "#/components/schemas/ConfigurationField" - } - }, - "changelog": { - "type": "string", - "description": "Changelog of the component version" - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the component version item was created", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - } - } - }, - "ConfigurationField": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of the configuration field." - }, - "title": { - "type": "string", - "description": "The title of the configuration field." - }, - "type": { - "type": "string", - "description": "The type of the configuration field.", - "enum": ["string", "bool", "number"] - }, - "options": { - "type": "array", - "description": "The options of the configuration field (only for string type).", - "items": { - "type": "string" - }, - "nullable": true - }, - "required": { - "type": "boolean", - "description": "Whether the configuration field is required." - }, - "description": { - "type": "string", - "description": "The description of the configuration field." - }, - "secret": { - "type": "boolean", - "description": "Whether the configuration field is a secret." - } - }, - "required": ["name", "title", "type", "required"] - }, - "ComponentCreateInput": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the component.", - "example": "My Component" - }, - "slug": { - "type": "string", - "description": "Slug of the component.", - "example": "my-component" - }, - "category": { - "type": "string", - "description": "Category of the component.", - "enum": ["data_collection", "edge_function", "js_gateway", "security", "consent_management", "identity", "stitching"] - }, - "subcategory": { - "type": "string", - "description": "Subcategory of the component.", - "enum": ["analytics", "warehouse", "attribution", "conversion_api", "wasm_function", "server_side_tagging", "microservice", "kv_store", "bot_protection", "rate_limiting", "anti_fraud", "consent_mapping", "cmp", "native_cookies", "unique_id", "ab_testing", "web_performance"] - }, - "documentation_link": { - "type": "string", - "description": "Link to the documentation of the component.", - "format": "url" - }, - "repo_link": { - "type": "string", - "description": "Link to the repository of the component.", - "format": "url" - }, - "description": { - "type": "string", - "description": "Description of the component." - }, - "avatar_url": { - "type": "string", - "description": "Avatar URL of the component." - }, - "public": { - "type": "boolean", - "description": "Whether the created component is public or not." - } - }, - "required": ["organization_id", "name", "category", "subcategory"] - }, - "ComponentUpdateParams": { - "type": "object", - "properties": { - "documentation_link": { - "type": "string", - "description": "Link to the documentation of the component.", - "format": "url" - }, - "repo_link": { - "type": "string", - "description": "Link to the repository of the component.", - "format": "url" - }, - "name": { - "type": "string", - "description": "Name of the component." - }, - "description": { - "type": "string", - "description": "Description of the component." - }, - "is_archived": { - "type": "boolean", - "description": "Whether the component is archived or not." - }, - "public": { - "type": "boolean", - "description": "Whether the component is public or not." - }, - "avatar_url": { - "type": "string", - "description": "Avatar URL of the component." - } - } - }, - "ComponentVersionCreateInput": { - "type": "object", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "component_version_item", - "readOnly": true - }, - "version": { - "type": "string", - "description": "Version of the component" - }, - "wit_version": { - "type": "string", - "description": "WIT version of the component" - }, - "wasm_url": { - "type": "string", - "description": "URL of the component" - }, - "dynamic_fields": { - "type": "array", - "description": "List of configuration fields", - "items": { - "$ref": "#/components/schemas/ConfigurationField" - } - }, - "changelog": { - "type": "string", - "description": "Changelog of the component version" - } - }, - "required": ["version", "wit_version", "wasm_url"] - }, - "ComponentVersionUpdateInput": { - "type": "object", - "properties": { - "changelog": { - "type": "string", - "description": "Changelog of the component version" - } - } - }, - "ComponentListParams": { - "type": "object", - "properties": { - "category": { - "type": "string", - "description": "Filter components by category.", - "enum": ["data_collection", "edge_function", "js_gateway", "security", "consent_management", "identity", "stitching"] - }, - "subcategory": { - "type": "string", - "description": "Filter components by sub category.", - "enum": ["analytics", "warehouse", "attribution", "conversion_api", "wasm_function", "server_side_tagging", "microservice", "kv_store", "bot_protection", "rate_limiting", "anti_fraud", "consent_mapping", "cmp", "native_cookies", "unique_id", "ab_testing", "web_performance"] - } - } - }, - "Invitation": { - "type": "object", - "description": "An invitation is a request to join an organization. An invitation is sent to an email address, and the recipient can accept or decline the invitation.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "project", - "readOnly": true - }, - "id": { - "type": "string", - "description": "Unique identifier for the invitation", - "readOnly": true - }, - "organization_id": { - "type": "string", - "description": "Unique identifier for the organization the project belongs to", - "example": "d290f1ee-6c54-4b01-90e6-d701748f0851" - }, - "role": { - "type": "string", - "description": "The future role of the user in the organization.", - "enum": ["admin", "editor", "member"] - }, - "email": { - "type": "string", - "description": "Email of the user" - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was created", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - } - } - }, - "InvitationCreateInput": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/Invitation" - } - ], - "required": ["organization_id", "email", "role"] - }, - "UserBase": { - "type": "object", - "description": "A User is a unique identifier that you can use to manage and organize your work.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "user", - "readOnly": true - }, - "id": { - "type": "string", - "description": "Unique identifier for the user", - "readOnly": true - }, - "email": { - "type": "string", - "description": "Email of the user", - "readOnly": true - }, - "name": { - "type": "string", - "description": "Name of the user", - "readOnly": true - }, - "avatar_url": { - "type": "string", - "description": "Avatar of the user", - "readOnly": true - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was created", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Time at which the project was last updated", - "example": "2022-03-01T00:00:00Z", - "readOnly": true - } - }, - "required": [ - "object", - "id", - "email", - "name", - "role", - "created_at", - "updated_at" - ] - }, - "User": { - "type": "object", - "description": "A User is a unique identifier that you can use to manage and organize your work.", - "allOf": [{ "$ref": "#/components/schemas/UserBase" }], - "properties": { - "role": { - "type": "string", - "description": "Role of the user", - "readOnly": true - } - }, - "required": [ - "object", - "id", - "email", - "name", - "slug", - "role", - "created_at", - "updated_at" - ] - }, - "UserWithRoles": { - "allOf": [{ "$ref": "#/components/schemas/UserBase" }], - "properties": { - "roles": { - "type": "object", - "additionalProperties": { - "type": "string", - "enum": ["admin", "editor", "member"], - "description": "The role of the user in each organization." - }, - "description": "Roles of the user in multiple organizations. The keys are organization IDs, and values are roles ('admin', 'editor', 'member')." - } - } - }, - "OrganizationUser": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/User" - } - ], - "properties": { - "role": { - "type": "string", - "description": "The role of the user in the organization.", - "enum": ["admin", "editor", "member"] - } - } - }, - "OrganizationUserUpdateInput": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/OrganizationUser" - } - ], - "required": ["role"] - }, - "IncomingDataCollectionEvent": { - "type": "object", - "description": "An incoming data collection event is an event created by edgee, which will be processed and transformed into one or more outgoing data collection events by the components.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "component", - "readOnly": true - }, - "uuid": { - "type": "string", - "description": "Unique identifier for the event", - "readOnly": true - }, - "timestamp": { - "type": "string", - "format": "date-time", - "description": "Time at which the event was created", - "readOnly": true - }, - "type": { - "type": "string", - "description": "Type of the event", - "enum": ["page", "track", "user"], - "readOnly": true - }, - "from": { - "type": "string", - "description": "Origin of the event", - "enum": ["edge", "client", "third"], - "readOnly": true - }, - "data": { - "type": "object", - "description": "Data of the event", - "readOnly": true - }, - "context": { - "type": "object", - "description": "Context of the event", - "readOnly": true - } - } - }, - "OutgoingDataCollectionEvent": { - "type": "object", - "description": "An outgoing data collection event is an event created by a component, which will be sent to the destination specified by the component.", - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "component", - "readOnly": true - }, - "uuid": { - "type": "string", - "description": "Unique identifier for the event", - "readOnly": true - }, - "component_id": { - "type": "string", - "description": "Unique identifier for the component", - "readOnly": true - }, - "component_slug": { - "type": "string", - "description": "Slug of the component", - "readOnly": true - }, - "component_request": { - "type": "object", - "description": "Object representing the request of the event", - "readOnly": true - }, - "component_response": { - "type": "object", - "description": "Object representing the response of the event", - "readOnly": true - } - } - }, - "ListParams": { - "type": "object", - "properties": { - "limit": { - "type": "integer", - "description": "A limit on the number of objects to be returned." - }, - "start_key": { - "type": "string", - "description": "A cursor for use in pagination. `start_key` parameter defines the place in the list for your subsequent calls. For instance, if you make a list request and receive 100 objects, the last one having `ABCDE` key, you can make a subsequent call with `start_key=ABCDE` in order to fetch the next page of the list." - }, - "order_direction": { - "type": "string", - "description": "The order direction of the returned list. Objects are returned sorted by creation date. By default, the order is descending, so the most recent object appears first. Possible values are ASC and DESC. Default is DESC.", - "enum": ["ASC", "DESC"], - "default": "DESC" - } - } - }, - "ListResponse": { - "type": "object", - "properties": { - "object": { - "type": "string", - "description": "String representing the object’s type. Objects of the same type share the same value.", - "readOnly": true, - "example": "list" - }, - "url": { - "type": "string", - "description": "The URL where this list can be accessed.", - "readOnly": true - }, - "has_more": { - "type": "boolean", - "description": "Whether there are more objects beyond the ones returned. You can use it to decide whether to show the user a “load more” button, for example." - }, - "last_key": { - "type": "string", - "description": "The last key of the list. You can use its value on the `start_key` parameter to fetch the next page of the list." - } - } - }, - "DeletedResponse": { - "type": "object", - "properties": { - "object": { - "type": "string", - "description": "String representing the object’s type. Objects of the same type share the same value." - }, - "id": { - "type": "string", - "description": "This is the internal ID for this object. You don’t need to record this information, since you will not need to use it." - }, - "deleted": { - "type": "boolean", - "description": "If the object has been deleted, the value is true. If the object has not been deleted, the value is false." - } - } - }, - "UploadPresign": { - "type": "object", - "properties": { - "upload_url": { - "type": "string" - } - }, - "required": ["upload_url"] - }, - "ErrorResponse": { - "type": "object", - "description": "An error response from the API. More info [here]('/docs/api-reference/errors')", - "properties": { - "error": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "invalid_request_error", - "not_found_error", - "creation_error", - "update_error", - "deletion_error", - "forbidden_error", - "authentication_error", - "conflict_error" - ], - "default": "invalid_request_error", - "description": "The type of error returned." - }, - "message": { - "type": "string", - "description": "A human-readable message providing more details about the error.", - "example": "Parameter error." - }, - "params": { - "type": "array", - "description": "The specific request parameters associated with the error. May be omitted if the error message is generic enough to apply to multiple parameters.", - "items": { - "type": "object", - "properties": { - "param": { - "type": "string", - "description": "The parameter related to the error.", - "example": "name" - }, - "message": { - "type": "string", - "description": "A human-readable message providing more details about the error.", - "example": "Name is required." - } - } - } - } - }, - "required": ["message"] - } - }, - "required": ["error"] - }, - "ProjectCounters": { - "type": "object", - "description": "A Project Counters object represents the statistics of a project.", - "example": { - "object": "project_counters", - "request_count": 32423432, - "event_count": 12390, - "month": "2023-12", - "project_id": "6d614bd5-4d81-4a9b-8ba4-6fe3ffd33748" - }, - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "project_counters" - }, - "request_count": { - "type": "integer", - "description": "The number of requests made to the project." - }, - "event_count": { - "type": "integer", - "description": "The number of events made to the project." - }, - "month": { - "type": "string", - "format": "date", - "description": "The month of the statistics." - }, - "day": { - "type": "string", - "format": "date", - "description": "The day of the statistics." - }, - "project_id": { - "type": "string", - "description": "The Project ID." - } - } - }, - "ProjectComponentCounters": { - "type": "object", - "description": "A Project Counters object represents the counters of a project.", - "example": { - "object": "project_counters", - "user_count": 123, - "track_count": 456, - "page_count": 789, - "day": "2023-12-25", - "project_id": "6d614bd5-4d81-4a9b-8ba4-6fe3ffd33748", - "component_id": "abcdef" - }, - "properties": { - "object": { - "type": "string", - "description": "String representing the object's type. Objects of the same type share the same value", - "example": "project_counters" - }, - "user_count": { - "type": "integer", - "description": "The number of user events generated by the component." - }, - "track_count": { - "type": "integer", - "description": "The number of track events generated by the component." - }, - "page_count": { - "type": "integer", - "description": "The number of page events generated by the component." - }, - "month": { - "type": "string", - "format": "date", - "description": "The month of the statistics." - }, - "day": { - "type": "string", - "format": "date", - "description": "The day of the statistics." - }, - "project_id": { - "type": "string", - "description": "The Project ID." - }, - "component_id": { - "type": "string", - "description": "The Project component ID." - } - } - } + "schemas": { }, "securitySchemes": { "bearerAuth": { diff --git a/api-reference/organizations/create.mdx b/api-reference/organizations/create.mdx deleted file mode 100644 index 48a6f91..0000000 --- a/api-reference/organizations/create.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Create an Organization' -openapi: 'POST /v1/organizations' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/organizations/delete-user.mdx b/api-reference/organizations/delete-user.mdx deleted file mode 100644 index c055ea9..0000000 --- a/api-reference/organizations/delete-user.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Remove a User from an Organization' -openapi: 'DELETE /v1/organizations/{id}/users/{userId}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/organizations/delete.mdx b/api-reference/organizations/delete.mdx deleted file mode 100644 index 570f317..0000000 --- a/api-reference/organizations/delete.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Delete an Organization' -openapi: 'DELETE /v1/organizations/{id}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/organizations/endpoints.mdx b/api-reference/organizations/endpoints.mdx deleted file mode 100644 index ff3ce5d..0000000 --- a/api-reference/organizations/endpoints.mdx +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: 'Organization endpoints' -description: 'Organization endpoints allow you to create, list, get and delete Organizations.' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -An organization is a professional or personal entity in which you can assign users and create projects. -You can create as many professional organizations as you like, and each organization can have as many users as you like. - -On the other hand, you can only have one personal organization, and you can't add users to it. - - - -```js ENDPOINTS -POST /v1/organizations -POST /v1/organizations/:id -GET /v1/organizations/:id -GET /v1/organizations/me -DELETE /v1/organizations/:id -GET /v1/organizations -GET /v1/organizations/:id/users -DELETE /v1/organizations/:id/users/:userId -``` - - - diff --git a/api-reference/organizations/get-me.mdx b/api-reference/organizations/get-me.mdx deleted file mode 100644 index e899bdb..0000000 --- a/api-reference/organizations/get-me.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Retrieve my Organization' -openapi: 'GET /v1/organizations/me' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/organizations/get.mdx b/api-reference/organizations/get.mdx deleted file mode 100644 index 0576fcc..0000000 --- a/api-reference/organizations/get.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Retrieve an Organization' -openapi: 'GET /v1/organizations/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/organizations/list-users.mdx b/api-reference/organizations/list-users.mdx deleted file mode 100644 index 147fb97..0000000 --- a/api-reference/organizations/list-users.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'List Organization users' -openapi: 'GET /v1/organizations/{id}/users' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/organizations/list.mdx b/api-reference/organizations/list.mdx deleted file mode 100644 index 39f3531..0000000 --- a/api-reference/organizations/list.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'List all Organizations' -openapi: 'GET /v1/organizations' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/organizations/object.mdx b/api-reference/organizations/object.mdx deleted file mode 100644 index 5d070da..0000000 --- a/api-reference/organizations/object.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -openapi-schema: Organization -title: 'The Organization object' -description: 'The Organization object is used to represent an Organization in Edgee.' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/organizations/update-user.mdx b/api-reference/organizations/update-user.mdx deleted file mode 100644 index bddd345..0000000 --- a/api-reference/organizations/update-user.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Update Organization user' -openapi: 'POST /v1/organizations/{id}/users/{userId}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/organizations/update.mdx b/api-reference/organizations/update.mdx deleted file mode 100644 index 19703a5..0000000 --- a/api-reference/organizations/update.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Update an Organizations' -openapi: 'POST /v1/organizations/{id}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/project-components/create.mdx b/api-reference/project-components/create.mdx deleted file mode 100644 index f7f196e..0000000 --- a/api-reference/project-components/create.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Create a ProjectComponent' -openapi: 'POST /v1/projects/{id}/components' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/project-components/delete.mdx b/api-reference/project-components/delete.mdx deleted file mode 100644 index f0f374a..0000000 --- a/api-reference/project-components/delete.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Delete an ProjectComponent' -openapi: 'DELETE /v1/projects/{id}/components/{project_component_id}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/project-components/endpoints.mdx b/api-reference/project-components/endpoints.mdx deleted file mode 100644 index 47e5b4e..0000000 --- a/api-reference/project-components/endpoints.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "ProjectComponent endpoints" -description: "ProjectComponent endpoints allow you to create, list, get and delete Component for a project." ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - - -A ProjectComponent is an integration of a component for a project. - - - -```js ENDPOINTS -POST /v1/projects/:id/components -POST /v1/projects/:id/components/:project_component_id -GET /v1/projects/:id/components/:project_component_id -DELETE /v1/projects/:id/components/:project_component_id -GET /v1/projects/:id/components -``` - - - - diff --git a/api-reference/project-components/get.mdx b/api-reference/project-components/get.mdx deleted file mode 100644 index e23f9a7..0000000 --- a/api-reference/project-components/get.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Retrieve a ProjectComponent' -openapi: 'GET /v1/projects/{id}/components/{project_component_id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/project-components/list.mdx b/api-reference/project-components/list.mdx deleted file mode 100644 index eeef2a0..0000000 --- a/api-reference/project-components/list.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'List all ProjectComponents' -openapi: 'GET /v1/projects/{id}/components' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/project-components/object.mdx b/api-reference/project-components/object.mdx deleted file mode 100644 index ca9c0a9..0000000 --- a/api-reference/project-components/object.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -openapi-schema: ProjectComponent -title: 'The ProjectComponent object' -description: 'The ProjectComponent object is used to represent an integration of a component of a project.' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/project-components/update.mdx b/api-reference/project-components/update.mdx deleted file mode 100644 index c5ecc24..0000000 --- a/api-reference/project-components/update.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Update a ProjectComponent' -openapi: 'POST /v1/projects/{id}/components/{project_component_id}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/projects/create.mdx b/api-reference/projects/create.mdx deleted file mode 100644 index f126f2a..0000000 --- a/api-reference/projects/create.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: 'Create a Project' -openapi: 'POST /v1/projects' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/projects/delete.mdx b/api-reference/projects/delete.mdx deleted file mode 100644 index a546d48..0000000 --- a/api-reference/projects/delete.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Delete an Project' -openapi: 'DELETE /v1/projects/{id}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/projects/endpoints.mdx b/api-reference/projects/endpoints.mdx deleted file mode 100644 index 9405d12..0000000 --- a/api-reference/projects/endpoints.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "Project endpoints" -description: "Project endpoints allow you to create, list, get and delete Projects." ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -A project is a collection of services and their associated resources. - -You can create as many projects as you like, and each project belongs to an organization. - - - -```js ENDPOINTS -POST /v1/projects -POST /v1/projects/:id -GET /v1/projects/:id -DELETE /v1/projects/:id -GET /v1/projects -``` - - - - diff --git a/api-reference/projects/get.mdx b/api-reference/projects/get.mdx deleted file mode 100644 index 7665945..0000000 --- a/api-reference/projects/get.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Retrieve a Project' -openapi: 'GET /v1/projects/{id}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/projects/list.mdx b/api-reference/projects/list.mdx deleted file mode 100644 index fe501d9..0000000 --- a/api-reference/projects/list.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'List all Projects' -openapi: 'GET /v1/projects' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/projects/object.mdx b/api-reference/projects/object.mdx deleted file mode 100644 index 900579f..0000000 --- a/api-reference/projects/object.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -openapi-schema: Project -title: 'The Project object' -description: 'The project object is used to represent a project in Edgee.' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/projects/update.mdx b/api-reference/projects/update.mdx deleted file mode 100644 index fc656b0..0000000 --- a/api-reference/projects/update.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: 'Update a Project' -openapi: 'POST /v1/projects/{id}' ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/proxy-settings/create.mdx b/api-reference/proxy-settings/create.mdx deleted file mode 100644 index 4035924..0000000 --- a/api-reference/proxy-settings/create.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Create a ProxySettings' -openapi: 'POST /v1/projects/{id}/proxy-settings' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/proxy-settings/endpoints.mdx b/api-reference/proxy-settings/endpoints.mdx deleted file mode 100644 index d7b3c42..0000000 --- a/api-reference/proxy-settings/endpoints.mdx +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "ProxySettings endpoints" -description: "ProxySettings endpoints allow you to list, create and update the proxy settings of a Project." ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -A ProxySettings object represents a revision of a proxy configuration of a Project. - - - -```js ENDPOINTS -GET /v1/projects/{id}/proxy-settings -POST /v1/projects/{id}/proxy-settings -POST /v1/projects/{id}/proxy-settings/:revision -``` - - - - diff --git a/api-reference/proxy-settings/list.mdx b/api-reference/proxy-settings/list.mdx deleted file mode 100644 index eb5b105..0000000 --- a/api-reference/proxy-settings/list.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'List all ProxySettings' -openapi: 'GET /v1/projects/{id}/proxy-settings' ---- - - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/proxy-settings/object.mdx b/api-reference/proxy-settings/object.mdx deleted file mode 100644 index c45320d..0000000 --- a/api-reference/proxy-settings/object.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -openapi-schema: ProxySettings -title: 'The ProxySetting object' -description: 'The ProxySettings object represents a revision of a Proxy Settings.' ---- - - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - diff --git a/api-reference/proxy-settings/update.mdx b/api-reference/proxy-settings/update.mdx deleted file mode 100644 index 5b82ef4..0000000 --- a/api-reference/proxy-settings/update.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Update a ProxySettings' -openapi: 'POST /v1/projects/{id}/proxy-settings/{revision}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/users/endpoints.mdx b/api-reference/users/endpoints.mdx deleted file mode 100644 index 2cf8552..0000000 --- a/api-reference/users/endpoints.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "User endpoints" -description: "User endpoints allow you to get and list Users." ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -A user is a person who can log in to Edgee. A user can be a member of one or more organizations. - -You can invite as many users as you like to your organization. You can also invite users to multiple organizations. - - - -```js ENDPOINTS -GET /v1/users/me -GET /v1/users/:id -``` - - - - diff --git a/api-reference/users/get-me.mdx b/api-reference/users/get-me.mdx deleted file mode 100644 index 321eeef..0000000 --- a/api-reference/users/get-me.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Me' -openapi: 'GET /v1/users/me' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/users/get.mdx b/api-reference/users/get.mdx deleted file mode 100644 index 7f2cc83..0000000 --- a/api-reference/users/get.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Retrieve a User' -openapi: 'GET /v1/users/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/users/object.mdx b/api-reference/users/object.mdx deleted file mode 100644 index 87bf082..0000000 --- a/api-reference/users/object.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -openapi-schema: User -title: 'The User object' -description: 'The User object is used to represent a user in Edgee.' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/api-reference/users/post.mdx b/api-reference/users/post.mdx deleted file mode 100644 index 97a4d76..0000000 --- a/api-reference/users/post.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 'Update a User' -openapi: 'POST /v1/users/{id}' ---- - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - diff --git a/components/edge-functions/geolocation.mdx b/components/edge-functions/geolocation.mdx deleted file mode 100644 index 55e9623..0000000 --- a/components/edge-functions/geolocation.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Geolocation -description: Get real-time geolocation data for your users with our lightweight endpoint component. ---- - - - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -The Geolocation component is an endpoint microservice that provides real-time geolocation data based on the user's IP address. -This lightweight HTTP service runs at the edge, offering fast and accurate location information without requiring additional backend infrastructure. - -## What is the Geolocation Component? - -The Geolocation component is an endpoint component that: -- Responds to HTTP requests with geolocation data -- Provides continent, country, region, city, and IP information -- Runs at the edge for optimal performance -- Returns JSON responses with CORS support -- Requires no additional backend infrastructure - -## Getting Started - -**To integrate the Geolocation component into your Edgee project:** - -1. Open the Edgee console and navigate to your project's Components. -2. Select "Add a component" and choose `edgee/geolocation` from the list of available components. -3. Configure the endpoint path pattern (e.g., `/apigeo` or `/geolocation`). -4. Click Save to deploy the component. - -Once configured, the component will respond to requests at your specified path with geolocation data. - -## API Response - -The component returns a JSON response with the following structure: - -```json -{ - "continent": "NA", - "country_name": "united states", - "country_code": "US", - "region": "TX", - "city": "huntsville", - "ip": "203.0.113.1" -} -``` - -## Usage Examples - -### JavaScript Fetch Request -```javascript -fetch('/apigeo') - .then(response => response.json()) - .then(data => { - console.log('User location:', data.city, data.country_name); - }); -``` - -### cURL Request -```bash -curl https://yourdomain.com/api/geo -``` - -## Configuration - -### Path Pattern -Configure the URL path where the geolocation service will be available. For example: -- `/apigeo` - Responds to requests at `yourdomain.com/apigeo` -- `/geolocation` - Responds to requests at `yourdomain.com/geolocation` -- `/location` - Responds to requests at `yourdomain.com/location` - -## Key Features - -- **Real-time Data**: Provides current geolocation based on IP address -- **Edge Performance**: Runs at the edge for minimal latency -- **CORS Support**: Includes proper CORS headers for cross-origin requests -- **No Cache**: Returns fresh data with `no-store` cache control -- **JSON Format**: Clean, structured JSON responses -- **Serverless**: No backend infrastructure required - -## Use Cases - -The Geolocation component is perfect for: -- **Content Localization**: Serve region-specific content based on user location -- **Analytics**: Track user geographic distribution -- **Compliance**: Determine applicable privacy regulations based on location -- **Personalization**: Customize user experience based on geographic data -- **Security**: Implement location-based access controls - -## Response Headers - -The component automatically sets the following headers: -- `Content-Type: application/json` -- `Cache-Control: private, no-store` -- `Access-Control-Allow-Origin: *` - -## Performance - -As an endpoint component running at the edge, the Geolocation service provides: -- **Sub-10ms response times** in most cases -- **Global availability** through Edgee's edge network -- **Automatic scaling** based on demand -- **Zero maintenance** - no servers to manage - - diff --git a/components/edge-functions/mailchimp.mdx b/components/edge-functions/mailchimp.mdx deleted file mode 100644 index 1ba99f2..0000000 --- a/components/edge-functions/mailchimp.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: Mailchimp Subscribe -description: Integrate with Mailchimp's email marketing platform directly from the edge, **powered by edge functions**. ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Find it on GitHub: [ /edgee-cloud/mailchimp-subscribe-component](https://github.com/edgee-cloud/mailchimp-subscribe-component) - -This component provides a simple way to add new subscribers to Mailchimp directly from the edge. The WebAssembly component allows you to collect email addresses through an HTTP endpoint and automatically add them to your Mailchimp audience. - -## Features - -- **Simple Email Collection**: Add subscribers via HTTP POST requests -- **Edge Performance**: Processes subscription requests directly at the edge -- **Configurable Endpoint**: Set custom paths for your subscription endpoint -- **Mailchimp Integration**: Direct integration with Mailchimp's API -- **WebAssembly Performance**: Fast, secure execution in a sandboxed environment - -## Getting Started - -**To integrate Mailchimp with your project:** - -1. Open the Edgee console and navigate to your project's Components. -2. Select "Add a component" and choose `edgee/mailchimp-subscribe` from the list of available edge functions. -3. Configure the following settings: - - **API Key**: Your Mailchimp API key - - **Data Center**: Your Mailchimp data center (e.g., "us1", "us2") - - **List ID**: The ID of your Mailchimp audience/list - - **Path Configuration**: Set the subscription endpoint path (e.g., `/subscribe`) -4. Click Save to activate the subscription endpoint. - -## Usage - -Once configured, you can add subscribers by sending POST requests to your configured endpoint: - -```javascript -await fetch('/subscribe', { - method: 'POST', - body: JSON.stringify({ - "email_address": "user@example.com" - }) -}); -``` - -### Request Format -```json -{ - "email_address": "user@example.com" -} -``` - -### Response -The component will return a response indicating whether the subscription was successful or if there was an error. - - -## Use Cases - -1. **Newsletter Signup**: Simple email collection for newsletters -2. **Lead Generation**: Capture potential customer emails -3. **Event Registration**: Collect attendee information -4. **Product Updates**: Build audiences for product announcements -5. **Content Gating**: Require email signup for premium content - - -## Error Handling - -The edge function provides comprehensive error handling: - -- **400 Bad Request**: Invalid request format or missing required fields -- **401 Unauthorized**: Invalid API key or authentication failure -- **404 Not Found**: List or subscriber not found -- **409 Conflict**: Subscriber already exists -- **500 Internal Server Error**: Mailchimp API error - - - Make sure to comply with GDPR and other privacy regulations when collecting email addresses. - Always obtain proper consent before adding users to your mailing lists. - diff --git a/components/edge-functions/maintenance-page.mdx b/components/edge-functions/maintenance-page.mdx deleted file mode 100644 index a357d4b..0000000 --- a/components/edge-functions/maintenance-page.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Maintenance Page -description: Display custom maintenance pages during planned outages or system updates, **powered by edge functions**. ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Find it on GitHub: [ /edgee-cloud/maintenance-page-component](https://github.com/edgee-cloud/maintenance-page-component) - -A simple maintenance page component that serves a maintenance page directly at the edge. This WebAssembly component can be mapped to your root website or specific sub-paths, providing a reliable way to display maintenance information even when your backend services are unavailable. - -## Features - -- **Edge-Native**: Serves maintenance pages directly from the edge -- **Flexible Path Matching**: Configure exact paths or path prefixes -- **WebAssembly Performance**: Fast loading through optimized Wasm deployment -- **Simple Configuration**: Easy setup through edgee.toml -- **Reliable Availability**: Functions independently of backend infrastructure - -## Getting Started - -**To add a maintenance page to your project:** - -1. Open the Edgee console and navigate to your project's Components. -2. Select "Add a component" and choose `maintenance-page` from the list of available edge functions. -3. Configure the following settings: - - **Path Configuration**: Set exact path (`/maintenance`) or path prefix (`/`) matching - - **Component Settings**: Configure any additional component-specific options -4. Click Save to activate the maintenance page. - -## Configuration Options - -### Path Settings -- **Exact Path**: Serve maintenance page only at a specific path (e.g., `/maintenance`) -- **Path Prefix**: Serve maintenance page for all paths matching a prefix (e.g., `/` for all paths) - -**Note**: Only one path setting can be used at a time. - -### Common Configurations -- **Site-wide maintenance**: Use path prefix `/` to serve maintenance page for all paths -- **Specific page maintenance**: Use exact path `/maintenance` for a dedicated maintenance page -- **Section maintenance**: Use path prefix `/admin` for maintenance on admin sections only - - -## Use Cases - -1. **Scheduled Maintenance**: Display during planned system updates -2. **Emergency Outages**: Quick deployment during unexpected issues - - - The maintenance page edge function runs independently of your backend infrastructure, - ensuring it remains available even during complete system outages. - diff --git a/components/edge-functions/pdforge.mdx b/components/edge-functions/pdforge.mdx deleted file mode 100644 index 9d47269..0000000 --- a/components/edge-functions/pdforge.mdx +++ /dev/null @@ -1,102 +0,0 @@ ---- -title: PDForge -description: Generate PDFs dynamically at the edge using PDForge's powerful PDF generation API, **powered by edge functions**. ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Find it on GitHub: [ /edgee-cloud/pdforge-generate-pdf-component](https://github.com/edgee-cloud/pdforge-generate-pdf-component) - -A WebAssembly component that integrates with PDForge.com to trigger PDF generation directly from the edge. This component provides a simple way to generate PDFs using PDForge's API through an HTTP endpoint. - -## Features - -- **Edge-Based PDF Generation**: Trigger PDF creation directly from the edge -- **PDForge Integration**: Connect to PDForge.com's PDF generation service -- **Simple HTTP Interface**: Easy-to-use endpoint for PDF generation -- **WebAssembly Performance**: Fast, secure execution in a sandboxed environment -- **Configurable Endpoint**: Set custom paths for your PDF generation endpoint - -## Getting Started - -**To integrate PDForge with your project:** - -1. Sign up for a PDForge account at [pdforge.com](https://pdforge.com) -2. Open the Edgee console and navigate to your project's Components -3. Select "Add a component" and choose `edgee/pdforge-generate-pdf` from the list of available edge functions -4. Configure the following settings: - - **API Key**: Your PDForge API key - - **Template ID**: The ID of your PDF template - - **Path Configuration**: Set the PDF generation endpoint path (e.g., `/generate-pdf`) -5. Click Save to activate the PDF generation endpoint - -## Configuration Options - -### Setup Requirements -- Active PDForge account at [pdforge.com](https://pdforge.com) -- PDForge API credentials and template ID (will be configured through the console) - -## Usage - -Once configured, you can trigger PDF generation by sending requests to your configured endpoint: - -```javascript -// Example usage (specific API format to be documented) -await fetch('/generate-pdf', { - method: 'POST', - body: JSON.stringify({ - // your template parameters - "username": "JohnyDoe", - "email": "John@Doe.com" - }) -}); -``` - - -## Use Cases - -1. **Invoice Generation**: Create professional invoices -2. **Report Generation**: Generate business reports -3. **Certificate Creation**: Issue certificates and diplomas -4. **Document Automation**: Automate document creation processes -5. **Edge-Based PDF Services**: Provide PDF generation closer to users - -## Example Integration - -```javascript -// Generate an invoice PDF -fetch('/generate-pdf', { - method: 'POST', - body: JSON.stringify({ - // your template parameters - customer_name: 'John Doe', - invoice_number: 'INV-001', - amount: '$1,299.99', - date: '2024-01-15', - items: [ - {name: 'Product A', quantity: 2, price: '$649.99'}, - {name: 'Product B', quantity: 1, price: '$649.99'} - ] - }) -}) -.then(response => response.json()) -.then(data => { - // Download or display the PDF - window.open(data.signedUrl, '_blank'); -}); -``` - -## Error Handling - -The edge function provides comprehensive error handling: - -- **400 Bad Request**: Invalid request format or missing required fields -- **401 Unauthorized**: Invalid API key or authentication failure -- **404 Not Found**: Template not found -- **422 Unprocessable Entity**: Invalid template data or format -- **500 Internal Server Error**: PDForge API error - -For more details on PDForge's API and template system, refer to the -[official PDForge documentation](https://docs.pdforge.com). diff --git a/components/edge-functions/sendgrid.mdx b/components/edge-functions/sendgrid.mdx deleted file mode 100644 index 1fcb4b1..0000000 --- a/components/edge-functions/sendgrid.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: SendGrid -description: Send transactional emails using SendGrid's powerful email delivery platform, **powered by edge functions**. ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Find it on GitHub: [ /edgee-cloud/sendgrid-component](https://github.com/edgee-cloud/sendgrid-component) - -A WebAssembly component that provides a simple way to send emails via SendGrid directly from the edge. This component can be mapped to a specific endpoint (like `/contact`) and supports both static text and dynamic email templates. - -## Features - -- **SendGrid Integration**: Direct integration with SendGrid's email API -- **Template Support**: Use SendGrid's dynamic email templates -- **Configurable Endpoint**: Set custom paths for your email sending endpoint -- **Edge Performance**: Fast email processing directly at the edge -- **Static and Dynamic Content**: Support for both static text and templated emails -- **WebAssembly Performance**: Secure, fast execution in a sandboxed environment - -## Getting Started - -**To integrate SendGrid with your project:** - -1. Create a SendGrid account and generate an API key -2. Verify your sender email address in SendGrid -3. Open the Edgee console and navigate to your project's Components -4. Select "Add a component" and choose `edgee/sendgrid` from the list of available edge functions -5. Configure the following settings: - - **API Key**: Your SendGrid API key - - **From Email**: Your verified sender email address - - **Subject**: Default email subject line (optional) - - **Template ID**: SendGrid template ID for dynamic emails (optional) - - **Path Configuration**: Set the email sending endpoint path (e.g., `/contact`) -6. Click Save to activate the email sending endpoint - -## Usage - -Once configured, you can send emails by making POST requests to your configured endpoint: - -```javascript -// Send static text email -await fetch('/contact', { - method: 'POST', - body: JSON.stringify({ - "message": "Hello world!", - "email": "test@example.com" - }) -}); - -// Send dynamic template email -await fetch('/contact', { - method: 'POST', - body: JSON.stringify({ - "data": {"name": "John Doe"}, - "email": "test@example.com" - }) -}); -``` - -### Request Formats - -#### Static Text Email -```json -{ - "message": "Your email message content", - "email": "recipient@example.com" -} -``` - -#### Dynamic Template Email -```json -{ - "data": {"name": "Dynamic template variable"}, - "email": "recipient@example.com" -} -``` - -### Template Support -If you configure a `template_id`, the component will use SendGrid's dynamic template system with the provided data in the `data` field. - -## Use Cases - -1. **Contact Forms**: Process contact form submissions -2. **Transactional Emails**: Order confirmations and notifications -3. **User Onboarding**: Welcome emails and account setup -4. **Support Tickets**: Automated support email responses -5. **Marketing Communications**: Newsletter and promotional emails -6. **System Notifications**: Alert emails for system events - -## Example Integrations - -### Order Confirmation Email -```javascript -fetch('/order/confirm', { - method: 'POST', - body: JSON.stringify({ - customer_name: 'John Doe', - order_number: 'ORD-001', - order_total: '$99.99', - items: [ - {name: 'Product A', quantity: 1, price: '$99.99'} - ], - shipping_address: '123 Main St, City, State 12345' - }), -}) -.then(response => response.json()) -.then(data => { - console.log('Email sent:', data); -}); -``` - -### Welcome Email - -```javascript -fetch('/welcome/email', { - method: 'POST', - body: JSON.stringify({ - email: 'user@example.com', - data: { - name: 'John', - } - }) -}); -``` - - -## Error Handling - -The edge function provides comprehensive error handling: - -- **400 Bad Request**: Invalid request format or missing required fields -- **401 Unauthorized**: Invalid API key or authentication failure -- **403 Forbidden**: Insufficient permissions or suspended account -- **413 Payload Too Large**: Email content or attachments too large -- **429 Too Many Requests**: Rate limit exceeded -- **500 Internal Server Error**: SendGrid API error - diff --git a/components/edge-functions/slack-message.mdx b/components/edge-functions/slack-message.mdx deleted file mode 100644 index d70d64d..0000000 --- a/components/edge-functions/slack-message.mdx +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Slack Message -description: Send messages to Slack channels directly from the edge, **powered by edge functions**. ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Find it on GitHub: [ /edgee-cloud/slack-message-component](https://github.com/edgee-cloud/slack-message-component) - -A simple WebAssembly component that sends messages to Slack via webhook URLs. This component accepts HTTP POST requests with a message and forwards it directly to your configured Slack webhook, making it easy to send notifications from your applications to Slack channels. - -## Features - -- **Simple Message Forwarding**: Accepts messages via HTTP POST and sends them to Slack -- **Webhook Integration**: Uses Slack incoming webhooks for reliable message delivery -- **Edge Performance**: Fast message processing directly at the edge -- **Easy Configuration**: Just provide your Slack webhook URL and endpoint path -- **Real-time Notifications**: Send instant notifications to your team - -## Getting Started - -**To integrate Slack messaging with your project:** - -1. Create a Slack incoming webhook in your Slack workspace -2. Open the Edgee console and navigate to your project's Components -3. Select "Add a component" and choose `edgee/slack-message` from the list of available edge functions -4. Configure the following settings: - - **Webhook URL**: Your Slack incoming webhook URL - - **Path Configuration**: Set the messaging endpoint path (e.g., `/slack-message`) -5. Click Save to activate the Slack messaging endpoint - -## Usage - -Once configured, you can send messages to Slack by making POST requests to your configured endpoint: - -```javascript -// Send a simple message -await fetch('/slack-message', { - method: 'POST', - body: JSON.stringify({ - "message": "Hello from the edge!" - }) -}); -``` - -### Request Format -```json -{ - "message": "Your message text here" -} -``` - -### Message Formatting -You can use Slack's standard message formatting in your messages: -- `*bold text*` for bold -- `_italic text_` for italic -- `~strikethrough~` for strikethrough -- ``` `code` ``` for inline code -- ``` \`\`\`code block\`\`\` ``` for code blocks - -### Simple Example -```javascript -// Send a notification about a form submission -await fetch('/slack-message', { - method: 'POST', - body: JSON.stringify({ - "message": "📧 New contact form submission from John Doe (john@example.com)" - }) -}); -``` - - -## Use Cases - -1. **System Monitoring**: Send alerts for system errors or performance issues -2. **Form Submissions**: Alert teams about new form submissions or leads -3. **Error Reporting**: Send error reports and exceptions to development channels -4. **Automated Notifications**: Send automated updates about system events -5. **Simple Team Communication**: Quick notifications for various application events - -## Error Handling - -The component provides basic error handling: - -- **400 Bad Request**: Invalid request format or missing message field -- **401 Unauthorized**: Invalid webhook URL -- **500 Internal Server Error**: Slack webhook error - -For more details on Slack webhooks, refer to the -[official Slack webhook documentation](https://api.slack.com/messaging/webhooks). diff --git a/components/edge-functions/stripe-billing-portal.mdx b/components/edge-functions/stripe-billing-portal.mdx deleted file mode 100644 index e7b3abc..0000000 --- a/components/edge-functions/stripe-billing-portal.mdx +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Stripe Billing Portal -description: Create secure billing portals for customers using Stripe's billing infrastructure, **powered by edge functions**. ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Find it on GitHub: [ /edgee-cloud/stripe-billing-portal-component](https://github.com/edgee-cloud/stripe-billing-portal-component) - -A WebAssembly component that integrates Stripe's Billing Portal directly at the edge. This component provides easy redirection to Stripe's Customer Portal, allowing customers to manage their subscriptions, payment methods, and billing information. - -## Features - -- **Stripe Billing Portal Integration**: Direct integration with Stripe's Customer Portal -- **Simple Redirection**: Easy GET and POST endpoints for portal access -- **Edge Performance**: Fast portal URL generation at the edge -- **Flexible Configuration**: Support for custom return URLs -- **WebAssembly Performance**: Secure, fast execution in a sandboxed environment -- **Customer Management**: Handle customer portal sessions efficiently - -## Getting Started - -**To integrate Stripe Billing Portal with your project:** - -1. Set up a Stripe account and obtain your API key -2. Open the Edgee console and navigate to your project's Components -3. Select "Add a component" and choose `edgee/stripe-billing-portal` from the list of available edge functions -4. Configure the following settings: - - **API Key**: Your Stripe API secret key - - **Return URL**: Default return URL after portal sessions (optional) - - **Path Configuration**: Set the billing portal endpoint path (e.g., `/stripe`) -5. Click Save to activate the billing portal endpoint - -## Usage - -Once configured, you can redirect customers to the Stripe Billing Portal using two methods: - -### Method 1: Quick Redirect (GET) -```javascript -// Redirect directly to the portal -window.location.replace("/stripe?customer=cus_123456789"); -``` - -### Method 2: Retrieve Portal URL (POST) -```javascript -// Get the portal URL first, then redirect -const response = await fetch('/stripe', { - method: 'POST', - body: JSON.stringify({ - "customer": "cus_123456789" - }) -}); - -const json = await response.json(); -window.location.replace(json.url); -``` - -### Request Format -```json -{ - "customer": "cus_123456789" -} -``` - -## Example Integration - -### Button to Open Billing Portal -```html -Manage Billing -``` - -### Programmatic Portal Access -```javascript -// Get portal URL and redirect programmatically -async function openBillingPortal(customerId) { - try { - const response = await fetch('/stripe', { - method: 'POST', - body: JSON.stringify({ - "customer": customerId - }) - }); - - const json = await response.json(); - window.location.replace(json.url); - } catch (error) { - console.error('Error opening billing portal:', error); - } -} - -// Usage -openBillingPortal('cus_123456789'); -``` - diff --git a/components/stitching/statsig.mdx b/components/stitching/statsig.mdx deleted file mode 100644 index a177498..0000000 --- a/components/stitching/statsig.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Statsig -description: Statsig is a modern feature management and experimentation platform, **now at the edge**. ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; -import WaitingMonkey from '/snippets/waiting/monkey.mdx'; - - - - - diff --git a/docs.json b/docs.json index 8cd5c2b..b77442f 100644 --- a/docs.json +++ b/docs.json @@ -1,577 +1,426 @@ { "$schema": "https://mintlify.com/docs.json", - "theme": "mint", + "theme": "almond", "name": "Edgee documentation", + "description": "Edgee is a unified AI Gateway that gives you control over your LLM infrastructure.", "colors": { "primary": "#8924A6", "light": "#C876FA", "dark": "#8924A6" }, "favicon": "/favicon.svg", + "icons": { + "library": "lucide" + }, "redirects": [ { - "source": "/services/data-collection/privacy", - "destination": "/introduction/privacy" - }, - { - "source": "/services/data-collection/consent", - "destination": "/services/consent/overview" - }, - { - "source": "/getting-started/cookies", - "destination": "/services/performance/cookies" - }, - { - "source": "/getting-started/caching", - "destination": "/services/performance/caching" - }, - { - "source": "/components/data-collection/meta-signals-gateway", - "destination": "/components/sdk-gateway/meta-signals-gateway" - }, - { - "source": "/components/cmp/axeptio-consent-mapping", - "destination": "/components/consent-management/axeptio-consent-mapping" - }, - { - "source": "/components/cmp/cookieyes-consent-mapping", - "destination": "/components/consent-management/cookieyes-consent-mapping" + "source": "/components/*", + "destination": "/proxy/components/*" }, { - "source": "/components/cmp/didomi-consent-mapping", - "destination": "/components/consent-management/didomi-consent-mapping" + "source": "/services/*", + "destination": "/proxy/services/*" }, { - "source": "/components/cmp/onetrust-consent-mapping", - "destination": "/components/consent-management/onetrust-consent-mapping" + "source": "/getting-started/*", + "destination": "/proxy/getting-started/*" }, { - "source": "/components/sdk-gateway/meta-signals-gateway", - "destination": "/components/js-gateway/meta-signals-gateway" + "source": "/introduction/architecture", + "destination": "/introduction/why-edgee" }, { - "source": "/components/sdk-gateway/piano-analytics-gateway", - "destination": "/components/js-gateway/piano-analytics-gateway" + "source": "/introduction/network-map", + "destination": "/introduction/why-edgee" }, { - "source": "/components/sdk-gateway/google-tag-gateway", - "destination": "/components/js-gateway/google-tag-gateway" - }, - { - "source": "/components/endpoints/geolocation", - "destination": "/components/edge-functions/geolocation" - }, - { - "source": "/components/ab-testing/kameleoon", - "destination": "/components/stitching/kameleoon" + "source": "/introduction/privacy", + "destination": "/introduction/why-edgee" } ], "navigation": { "tabs": [ { - "tab": "Documentation", + "tab": "AI Gateway", + "icon": "sparkles", "groups": [ - { - "group": "Introduction", - "pages": [ - "introduction", - "introduction/architecture", - "introduction/network-map", - "introduction/privacy", - "introduction/faq" - ] - }, - { - "group": "Get Started", - "pages": [ - "getting-started", - "getting-started/account-creation", { - "group": "Create a Project", - "icon": "square-2", + "group": "Introduction", "pages": [ - "getting-started/project-settings", - "getting-started/routing", - "getting-started/domains", - "getting-started/redirects", - "getting-started/statistics" + "introduction", + "introduction/why-edgee", + "introduction/faq" ] }, { - "group": "Install the SDK", - "icon": "square-3", + "group": "Quickstart", "pages": [ - "getting-started/sdk", - "getting-started/js-sdk", - "getting-started/shopify-sdk", - "getting-started/react-sdk", - "getting-started/react-native-sdk", - "getting-started/mobile-sdk" + "quickstart/index", + "quickstart/account-creation", + "quickstart/api-key", + "quickstart/sdk" ] }, - "getting-started/component-configuration", { - "group": "Advanced Concepts", - "icon": "square-minus", - "pages": [ - "getting-started/debugging", - "getting-started/organizations", - "getting-started/user-roles", - "getting-started/sso", - "getting-started/migration-guide", - "getting-started/no-code-data-layer" - ] - }, - { - "group": "Platform Integrations", - "icon": "square-plus", + "group": "Features", "pages": [ - "getting-started/hubspot", - "getting-started/prestashop", - "getting-started/vercel", - "getting-started/wpengine" + "features/overview" ] } ] - }, - { - "group": "Services", - "pages": [ - "services/overview", - { - "group": "Component Registry", - "icon": { - "name": "rectangle-history-circle-plus", - "style": "solid" - }, - "pages": [ - "services/registry/overview", - "services/registry/foundations", - "services/registry/developer-guide", - "services/registry/developer-guide-data-collection", - "services/registry/developer-guide-edge-function", - "services/registry/faqs" - ] - }, - { - "group": "Consent Management", - "icon": { - "name": "fingerprint", - "style": "solid" - }, - "pages": [ - "services/consent/overview", - "services/consent/status" - ] - }, - { - "group": "Data Collection", - "icon": { - "name": "chart-simple", - "style": "solid" - }, - "pages": [ - "services/data-collection/overview", - "services/data-collection/autocapture", - "services/data-collection/data-layer", - "services/data-collection/page-event", - "services/data-collection/track-event", - "services/data-collection/user-event", - "services/data-collection/native-cookies", - "services/data-collection/catalog" - ] - }, - { - "group": "Edge Functions", - "icon": { - "name": "code", - "style": "solid" - }, - "pages": [ - "services/edge-function/overview" - ] - }, - { - "group": "Performance", - "icon": { - "name": "bolt", - "style": "solid" - }, - "pages": [ - "services/performance/caching", - "services/performance/override-cache", - "services/performance/cookies" - ] - }, - { - "group": "Security", - "icon": { - "name": "shield", - "style": "solid" - }, - "pages": [ - "services/security/overview", - "services/security/rate-limiting", - "services/security/access-control", - "services/security/https-enforcement", - "services/security/secret-headers", - "services/security/catalog" - ] - }, - { - "group": "Stitching", - "icon": { - "name": "flask", - "style": "solid" - }, - "pages": [ - "services/stitching/overview", - "services/stitching/catalog" - ] - }, - { - "group": "AI Analytics", - "icon": { - "name": "brain", - "style": "solid" - }, - "pages": [ - "services/ai-analytics/overview", - "services/ai-analytics/log-ingestion" - ] - } - ] - } - ] }, { - "tab": "Components", + "tab": "SDKs", + "icon": "boxes", + "hidden": true, "groups": [ { - "group": "Components", - "pages": ["components/overview"] - }, - { - "group": "Data Collection", - "icon": "/images/icons/data_collection-icon.svg", - "pages": [ - { - "group": "Analytics", - "pages": [ - "components/data-collection/google-analytics", - "components/data-collection/piano-analytics", - "components/data-collection/amplitude", - "components/data-collection/mixpanel", - "components/data-collection/matomo", - "components/data-collection/gosquared", - "components/data-collection/eulerian", - "components/data-collection/plausible", - "components/data-collection/posthog", - "components/data-collection/segment", - "components/data-collection/woopra" - ] - }, - { - "group": "Conversion API", - "pages": [ - "components/data-collection/meta-capi", - "components/data-collection/linkedin-capi", - "components/data-collection/snapchat-capi", - "components/data-collection/pinterest-capi" - ] - }, - { - "group": "Warehouse", - "pages": [ - "components/data-collection/amazon-s3", - "components/data-collection/amazon-kinesis", - "components/data-collection/amazon-data-firehose", - "components/data-collection/clickhouse", - "components/data-collection/google-bigquery", - "components/data-collection/snowflake" - ] - } - ] - }, - { - "group": "JS Gateway", - "icon": "/images/icons/js_gateway-icon.svg", - "pages": [ - { - "group": "Analytics", - "pages": [ - "components/js-gateway/piano-analytics-gateway" - ] - }, - { - "group": "Server Side Tagging", - "pages": [ - "components/js-gateway/meta-signals-gateway", - "components/js-gateway/google-tag-gateway" - ] - } - ] - }, - { - "group": "Consent Management", - "icon": "/images/icons/consent_management-icon.svg", - "pages": [ - { - "group": "CMP", - "pages": [ - "components/consent-management/axeptio", - "components/consent-management/didomi" - ] - }, - { - "group": "Consent Mapping", - "pages": [ - "components/consent-management/cookiebot-consent-mapping", - "components/consent-management/cookieyes-consent-mapping", - "components/consent-management/iubenda-consent-mapping", - "components/consent-management/onetrust-consent-mapping", - "components/consent-management/osano-consent-mapping" - ] - } - ] - }, - { - "group": "Identity", - "icon": "/images/icons/identity-icon.svg", + "group": "SDK Documentation", "pages": [ + "sdk/index", { - "group": "Native Cookies", + "group": "Typescript", + "icon": "https://d3gk2c5xim1je2.cloudfront.net/devicon/typescript.svg", + "expanded": false, "pages": [ - "components/identity/amplitude-native-cookies", - "components/identity/google-analytics-native-cookies", - "components/identity/piano-analytics-native-cookies" + "sdk/typescript/index" ] }, { - "group": "Unique ID", - "pages": ["components/identity/first-id"] - } - ] - }, - { - "group": "Edge Functions", - "icon": "/images/icons/edge_function-icon.svg", - "pages": [ - { - "group": "Wasm Functions", + "group": "Python", + "icon": "python", + "expanded": false, "pages": [ - "components/edge-functions/maintenance-page", - "components/edge-functions/mailchimp", - "components/edge-functions/pdforge", - "components/edge-functions/sendgrid", - "components/edge-functions/slack-message", - "components/edge-functions/stripe-billing-portal" + "sdk/python/index" ] }, { - "group": "Microservice", - "pages": [ - "components/edge-functions/geolocation" - ] - } - ] - }, - { - "group": "Security", - "icon": "/images/icons/security-icon.svg", - "pages": [ - { - "group": "Bot Protection", + "group": "Rust", + "icon": "rust", + "expanded": false, "pages": [ - "components/security/datadome" + "sdk/rust/index" ] }, { - "group": "IP Blocking", - "pages": [ - "components/security/crowdsec" - ] - } - ] - }, - { - "group": "Stitching", - "icon": "/images/icons/stitching-icon.svg", - "pages": [ - { - "group": "A/B Testing", + "group": "Go", + "icon": "golang", + "expanded": false, "pages": [ - "components/stitching/kameleoon" + "sdk/go/index" ] } ] - } + } ] }, { "tab": "API Reference", + "icon": "terminal", + "hidden": true, "groups": [ { "group": "API Documentation", "pages": [ - "api-reference/introduction", + "api-reference/index", "api-reference/authentication", "api-reference/errors", - { - "group": "ApiTokens", - "pages": [ - "api-reference/api-tokens/endpoints", - "api-reference/api-tokens/object", - "api-reference/api-tokens/create", - "api-reference/api-tokens/get", - "api-reference/api-tokens/delete", - "api-reference/api-tokens/list" - ] - }, - { - "group": "Organizations", - "pages": [ - "api-reference/organizations/endpoints", - "api-reference/organizations/object", - "api-reference/organizations/create", - "api-reference/organizations/update", - "api-reference/organizations/get", - "api-reference/organizations/get-me", - "api-reference/organizations/delete", - "api-reference/organizations/list", - "api-reference/organizations/list-users", - "api-reference/organizations/delete-user", - "api-reference/organizations/update-user" - ] - }, - { - "group": "Projects", - "pages": [ - "api-reference/projects/endpoints", - "api-reference/projects/object", - "api-reference/projects/create", - "api-reference/projects/update", - "api-reference/projects/get", - "api-reference/projects/delete", - "api-reference/projects/list" - ] - }, { "group": "Caching", "pages": [ "api-reference/caching/purge-cache" ] - }, - { - "group": "Domains", - "pages": [ - "api-reference/domains/endpoints", - "api-reference/domains/object", - "api-reference/domains/create", - "api-reference/domains/update", - "api-reference/domains/get", - "api-reference/domains/delete", - "api-reference/domains/list" - ] - }, + } + ] + } + ] + }, + { + "tab": "Edge Proxy", + "icon": "globe", + "dropdowns": [ + { + "dropdown": "Proxy", + "icon": "globe", + "groups": [ { - "group": "ProxySettings", + "group": "Introduction", "pages": [ - "api-reference/proxy-settings/endpoints", - "api-reference/proxy-settings/object", - "api-reference/proxy-settings/create", - "api-reference/proxy-settings/update", - "api-reference/proxy-settings/list" + "proxy/overview", + "proxy/privacy" ] }, { - "group": "Components", - "pages": [ - "api-reference/components/endpoints", - "api-reference/components/object", - "api-reference/components/list", - "api-reference/components/get", - "api-reference/components/get-by-slug", - "api-reference/components/create", - "api-reference/components/update", - "api-reference/components/update-by-slug", - "api-reference/components/delete", - "api-reference/components/version-create", - "api-reference/components/version-update" + "group": "Get Started", + "pages": [ + "proxy/getting-started/index", + "proxy/getting-started/account-creation", + { + "group": "Create a Project", + "icon": "dice-2", + "pages": [ + "proxy/getting-started/project-settings", + "proxy/getting-started/routing", + "proxy/getting-started/domains", + "proxy/getting-started/redirects", + "proxy/getting-started/statistics" + ] + }, + { + "group": "Install the SDK", + "icon": "dice-3", + "pages": [ + "proxy/getting-started/sdk", + "proxy/getting-started/js-sdk", + "proxy/getting-started/shopify-sdk", + "proxy/getting-started/react-sdk", + "proxy/getting-started/react-native-sdk", + "proxy/getting-started/mobile-sdk" + ] + }, + "proxy/getting-started/component-configuration", + { + "group": "Advanced Concepts", + "icon": "square-minus", + "pages": [ + "proxy/getting-started/debugging", + "proxy/getting-started/organizations", + "proxy/getting-started/user-roles", + "proxy/getting-started/sso", + "proxy/getting-started/migration-guide", + "proxy/getting-started/no-code-data-layer" + ] + }, + { + "group": "Platform Integrations", + "icon": "square-plus", + "pages": [ + "proxy/getting-started/hubspot", + "proxy/getting-started/prestashop", + "proxy/getting-started/vercel", + "proxy/getting-started/wpengine" + ] + } ] }, { - "group": "ProjectComponents", - "pages": [ - "api-reference/project-components/endpoints", - "api-reference/project-components/object", - "api-reference/project-components/create", - "api-reference/project-components/update", - "api-reference/project-components/get", - "api-reference/project-components/delete", - "api-reference/project-components/list" + "group": "Services", + "pages": [ + "proxy/services/overview", + { + "group": "Component Registry", + "hidden": true, + "icon": { + "name": "blocks", + "style": "solid" + }, + "pages": [ + "proxy/services/registry/overview", + "proxy/services/registry/foundations", + "proxy/services/registry/developer-guide", + "proxy/services/registry/developer-guide-data-collection", + "proxy/services/registry/faqs" + ] + }, + { + "group": "Consent Management", + "icon": { + "name": "fingerprint", + "style": "solid" + }, + "pages": [ + "proxy/services/consent/overview", + "proxy/services/consent/status" + ] + }, + { + "group": "Data Collection", + "icon": { + "name": "chart-no-axes-column", + "style": "solid" + }, + "pages": [ + "proxy/services/data-collection/overview", + "proxy/services/data-collection/autocapture", + "proxy/services/data-collection/data-layer", + "proxy/services/data-collection/page-event", + "proxy/services/data-collection/track-event", + "proxy/services/data-collection/user-event", + "proxy/services/data-collection/native-cookies", + "proxy/services/data-collection/catalog" + ] + }, + { + "group": "Performance", + "icon": { + "name": "zap", + "style": "solid" + }, + "pages": [ + "proxy/services/performance/caching", + "proxy/services/performance/override-cache", + "proxy/services/performance/cookies" + ] + }, + { + "group": "Security", + "icon": { + "name": "shield", + "style": "solid" + }, + "pages": [ + "proxy/services/security/overview", + "proxy/services/security/rate-limiting", + "proxy/services/security/access-control", + "proxy/services/security/https-enforcement", + "proxy/services/security/secret-headers", + "proxy/services/security/catalog" + ] + }, + { + "group": "Stitching", + "icon": { + "name": "flask-conical", + "style": "solid" + }, + "pages": [ + "proxy/services/stitching/overview", + "proxy/services/stitching/catalog" + ] + } ] - }, + } + ] + }, + { + "dropdown": "Proxy Components", + "icon": "blocks", + "groups": [ { - "group": "Statistics", - "pages": [ - "api-reference/counters/endpoints", - "api-reference/counters/object", - "api-reference/counters/component_object", - "api-reference/counters/list", - "api-reference/counters/component_list" + "group": "Data Collection", + "icon": "/images/icons/data_collection-icon.svg", + "pages": [ + { + "group": "Analytics", + "pages": [ + "proxy/components/data-collection/google-analytics", + "proxy/components/data-collection/piano-analytics", + "proxy/components/data-collection/amplitude", + "proxy/components/data-collection/mixpanel", + "proxy/components/data-collection/matomo", + "proxy/components/data-collection/gosquared", + "proxy/components/data-collection/eulerian", + "proxy/components/data-collection/plausible", + "proxy/components/data-collection/posthog", + "proxy/components/data-collection/segment", + "proxy/components/data-collection/woopra" + ] + }, + { + "group": "Conversion API", + "pages": [ + "proxy/components/data-collection/meta-capi", + "proxy/components/data-collection/linkedin-capi", + "proxy/components/data-collection/snapchat-capi", + "proxy/components/data-collection/pinterest-capi" + ] + }, + { + "group": "Warehouse", + "pages": [ + "proxy/components/data-collection/amazon-s3", + "proxy/components/data-collection/amazon-kinesis", + "proxy/components/data-collection/amazon-data-firehose", + "proxy/components/data-collection/clickhouse", + "proxy/components/data-collection/google-bigquery", + "proxy/components/data-collection/snowflake" + ] + } ] }, { - "group": "DataCollectionEvents", - "pages": [ - "api-reference/data-collection-events/endpoints", - "api-reference/data-collection-events/incoming-object", - "api-reference/data-collection-events/list-incoming", - "api-reference/data-collection-events/outgoing-object", - "api-reference/data-collection-events/list-outgoing" + "group": "JS Gateway", + "icon": "/images/icons/js_gateway-icon.svg", + "pages": [ + { + "group": "Analytics", + "pages": [ + "proxy/components/js-gateway/piano-analytics-gateway" + ] + }, + { + "group": "Server Side Tagging", + "pages": [ + "proxy/components/js-gateway/meta-signals-gateway", + "proxy/components/js-gateway/google-tag-gateway" + ] + } ] }, { - "group": "Users", - "pages": [ - "api-reference/users/endpoints", - "api-reference/users/object", - "api-reference/users/get-me", - "api-reference/users/get", - "api-reference/users/post" + "group": "Consent Management", + "icon": "/images/icons/consent_management-icon.svg", + "pages": [ + { + "group": "CMP", + "pages": [ + "proxy/components/consent-management/axeptio", + "proxy/components/consent-management/didomi" + ] + }, + { + "group": "Consent Mapping", + "pages": [ + "proxy/components/consent-management/cookiebot-consent-mapping", + "proxy/components/consent-management/cookieyes-consent-mapping", + "proxy/components/consent-management/iubenda-consent-mapping", + "proxy/components/consent-management/onetrust-consent-mapping", + "proxy/components/consent-management/osano-consent-mapping" + ] + } ] }, { - "group": "Invitations", - "pages": [ - "api-reference/invitations/endpoints", - "api-reference/invitations/object", - "api-reference/invitations/create", - "api-reference/invitations/get", - "api-reference/invitations/delete", - "api-reference/invitations/list" + "group": "Identity", + "icon": "/images/icons/identity-icon.svg", + "pages": [ + { + "group": "Native Cookies", + "pages": [ + "proxy/components/identity/amplitude-native-cookies", + "proxy/components/identity/google-analytics-native-cookies", + "proxy/components/identity/piano-analytics-native-cookies" + ] + }, + { + "group": "Unique ID", + "pages": [ + "proxy/components/identity/first-id" + ] + } ] }, { - "group": "DataCollection (Project)", - "pages": [ - "api-reference/data-collection/introduction", - "api-reference/data-collection/event" + "group": "Security", + "icon": "/images/icons/security-icon.svg", + "pages": [ + { + "group": "Bot Protection", + "pages": [ + "proxy/components/security/datadome" + ] + }, + { + "group": "IP Blocking", + "pages": [ + "proxy/components/security/crowdsec" + ] + } ] } ] } ] - }, - { - "tab": "Open Source", - "groups": [ - { - "group": "Open Source", - "pages": ["open-source/overview"] - } - ] } ] }, @@ -589,12 +438,6 @@ } }, "navbar": { - "links": [ - { - "label": "Support", - "href": "mailto:support@edgee.cloud" - } - ], "primary": { "type": "button", "label": "Console", @@ -607,58 +450,25 @@ "linkedin": "https://www.linkedin.com/company/edgee-cloud", "x": "https://x.com/edgee_cloud", "instagram": "https://www.instagram.com/edgee_cloud", - "slack": "https://www.edgee.cloud/slack" + "discord": "https://discord.gg/RcucEXKPtc" }, "links": [ - { - "header": "Solutions", - "items": [ - { - "label": "Data Collection", - "href": "https://www.edgee.cloud/solutions/data-collection" - }, - { - "label": "A/B Testing", - "href": "https://www.edgee.cloud/solutions/ab-testing" - }, - { - "label": "Security", - "href": "https://www.edgee.cloud/solutions/security" - }, - { - "label": "Web Performance", - "href": "https://www.edgee.cloud/solutions/web-performance" - }, - { - "label": "AI & Inference", - "href": "https://www.edgee.cloud/solutions/ai-inference" - }, - { - "label": "Edge Functions", - "href": "https://www.edgee.cloud/solutions/edge-functions" - } - ] - }, { "header": "Support", "items": [ { "label": "Documentation", - "href": "https://www.edgee.cloud/docs/introduction" + "href": "https://www.edgee.cloud/docs/" }, { "label": "Contact", "href": "https://www.edgee.cloud/contact" }, { - "label": "FAQ", - "href": "https://www.edgee.cloud/docs/introduction/faq" - }, - { "label": "Roadmap", "href": "https://roadmap.edgee.cloud/roadmap/main" }, - { + { "label": "Status", "href": "https://status.edgee.cloud" } @@ -692,4 +502,4 @@ } ] } -} +} \ No newline at end of file diff --git a/edgee.js b/edgee.js deleted file mode 100644 index 692bf19..0000000 --- a/edgee.js +++ /dev/null @@ -1,17 +0,0 @@ -let currentUrl = location.href; -const checkPageTransition = () => { - requestAnimationFrame(() => { - if (currentUrl !== location.href) { - if (window.edgee && typeof window.edgee.page === 'function') { - window.edgee.page(); - } - } - currentUrl = location.href; - }, true); -}; - - -document.body.addEventListener("click", checkPageTransition); -document.body.addEventListener("keyup", e => { - if (e.code === "Enter" || e.code === "Space") checkPageTransition() -}); \ No newline at end of file diff --git a/features/automatic-model-selection.mdx b/features/automatic-model-selection.mdx new file mode 100644 index 0000000..e6520cc --- /dev/null +++ b/features/automatic-model-selection.mdx @@ -0,0 +1,9 @@ +--- +title: Automatic Model Selection +description: Discover the Automatic Model Selection feature. +icon: circuit-board +--- + + +This feature page is still under construction. We're working on it and will be published soon. + diff --git a/features/observability.mdx b/features/observability.mdx new file mode 100644 index 0000000..97e11f0 --- /dev/null +++ b/features/observability.mdx @@ -0,0 +1,9 @@ +--- +title: Observability +description: Discover the observability features of Edgee. +icon: eye +--- + + +This feature page is still under construction. We're working on it and will be published soon. + \ No newline at end of file diff --git a/features/overview.mdx b/features/overview.mdx new file mode 100644 index 0000000..8d339d2 --- /dev/null +++ b/features/overview.mdx @@ -0,0 +1,48 @@ +--- +title: Features Overview +description: An overview of what we’re building in Edgee AI Gateway. +icon: sparkles +--- + +Edgee AI Gateway is a **unified, OpenAI-compatible API** that sits between your application and LLM providers. +It’s designed to help teams ship faster while keeping **routing, reliability, observability, and privacy controls** in one place. + + +Edgee AI Gateway is still under active construction. We’re building fast, shipping incrementally, and writing docs in parallel. +If you need something more mature today, jump to the [Edgee Proxy documentation](/proxy/overview). + + +## What the AI Gateway focuses on + +These are the core capabilities we’re designing the gateway around: + + + + One integration that can route across providers without rewriting your application logic. + + + + Policy-based routing, fallbacks, and safer failure modes when providers rate-limit or degrade. + + + + The signals you need to run production AI: latency, errors, usage, and cost — exportable and actionable. + + + + Configurable logging and retention, plus provider-side ZDR where available. + + + +## What to expect (right now) + +- **A product in progress**: features and APIs may evolve as we learn from real production use-cases. +- **Clear defaults, configurable controls**: the goal is to reduce “LLM glue code” while keeping you in charge. +- **Docs expanding quickly**: each feature page will get deeper guides, examples, and best practices as we ship. + +## Looking for the mature platform? + +Edgee Proxy has a large set of production-ready capabilities and much deeper documentation today: + +- **Start here**: [Edgee Proxy overview](/proxy/overview) +- **Implementation guides**: [Proxy getting started](/proxy/getting-started/index) diff --git a/features/privacy.mdx b/features/privacy.mdx new file mode 100644 index 0000000..c18f8c7 --- /dev/null +++ b/features/privacy.mdx @@ -0,0 +1,9 @@ +--- +title: Privacy +description: Discover the privacy features of Edgee. +icon: shield +--- + + +This feature page is still under construction. We're working on it and will be published soon. + \ No newline at end of file diff --git a/features/zdr.mdx b/features/zdr.mdx new file mode 100644 index 0000000..83f4be4 --- /dev/null +++ b/features/zdr.mdx @@ -0,0 +1,9 @@ +--- +title: ZDR +description: Discover the Zero Data Retention mode. +icon: shield-check +--- + + +This feature page is still under construction. We're working on it and will be published soon. + \ No newline at end of file diff --git a/images/ai-gateway-dark.png b/images/ai-gateway-dark.png new file mode 100644 index 0000000..a30ab89 Binary files /dev/null and b/images/ai-gateway-dark.png differ diff --git a/images/ai-gateway-light.png b/images/ai-gateway-light.png new file mode 100644 index 0000000..38d5964 Binary files /dev/null and b/images/ai-gateway-light.png differ diff --git a/images/map-dark.png b/images/map-dark.png index 761984c..7240b89 100644 Binary files a/images/map-dark.png and b/images/map-dark.png differ diff --git a/introduction.mdx b/introduction.mdx index ce1b4ac..e898fea 100644 --- a/introduction.mdx +++ b/introduction.mdx @@ -1,70 +1,114 @@ --- title: Welcome to Edgee -description: An open source platform offering a set of edge computing services. -icon: hand-wave +description: The AI Gateway that gives you control over your LLM infrastructure. +icon: house +mode: "center" --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; +Edgee is a **unified AI Gateway** that sits between your application and LLM providers, giving you complete control over your AI infrastructure. - +**One API. Every model. Total visibility.** -Edgee is an **edge component platform** designed to transform how workloads and data are -processed across the internet. +## Get Started in 6 Lines -Edgee empowers developers to use, build and deploy **wasm components** operating at the edge. -This approach harnesses the potential of edge computing, enabling workloads to run closer to users than ever before. + -Edgee is cross-platform, whether your application is hosted on **AWS**, **Vercel**, **Netlify**, or any other cloud provider, -whether your application is written in **Javascript**, **Ruby**, **PHP**, **Python**, or any other language, -you can enhance it with Edgee. +```typescript +import Edgee from 'edgee'; +const edgee = new Edgee(); -By minimizing the distance data has to travel, Edgee significantly **reduces latency**, boosts **performance**, and -ensures greater **privacy** and **compliance** with data protection regulations. +const response = await edgee.send({ + model: 'gpt-5.1', + input: 'Hello, world!' +}); -You can deploy Edgee on your own infrastructure or use our managed service - it's up to you! +console.log(response.output_text); +``` -## Bye bye greedy SDKs - Hello Components! +```python +from edgee import Edgee +client = Edgee() -Have you ever hesitated to install a client-side SDK due to concerns about stability, performance, or data privacy? **Edgee is here to change the game!** +response = client.send( + model="gpt-5.1", + input="Write a short bedtime story about a unicorn." +) - - +print(response.output_text) +``` -- **Our Mission:** We are pioneering a new ecosystem where traditional client-side libraries become secure components that operate at the edge network layer. We use the [WebAssembly Component Model](https://component-model.bytecodealliance.org/) to redefine how -technologies like Google Analytics, Amplitude, Segment, and AB Tasty are integrated into your applications. +```go +import "github.com/edgee/edgee-go" +edgee := edgee.NewEdgee() -- **Transforming SDKs into Components:** With Edgee, every SDK becomes a 'Component' that executes at the edge, rather than on your user’s device. -This shift not only enhances performance but also ensures compliance and privacy by design. +response := edgee.Send(&edgee.SendRequest{ + Model: "gpt-5.1", + Input: "Hello, world!", +}) -- **Commitment to Excellence:** We are dedicated to upholding the highest standards of performance, privacy, and compliance. -With Edgee, each interaction is processed legally, securely, and in real time. +println(response.OutputText) +``` -- **Benefits of Moving to the Edge:** By relocating intensive and sensitive tasks from browsers and mobile apps to the edge network, -Edgee leverages distributed processing power. This transition results in faster execution, reduced network congestion, and enhanced application performance. +```rust +use edgee::Edgee; -Edgee is more than just a platform; it represents a paradigm shift in web technology and data processing. Welcome to the cutting edge! +let edgee = Edgee::new(); -## What you can achieve with Edgee: +let response = edgee.send(edgee::SendRequest { + model: "gpt-5.1".to_string(), + input: "Hello, world!".to_string(), +})?; - - - Integrate analytics third party solutions at the edge, and collect 100% of the data, 100% legal, 100% real-time. +println!("{}", response.output_text); +``` + +```bash +curl -X POST https://api.edgee.ai/v1/send \ +-H "Authorization: Bearer $EDGEE_API_KEY" \ +-H "Content-Type: application/json" \ +-d '{"model": "gpt-5.1", "input": "Hello, world!"}' +``` + + +That's it. You now have access to every major LLM provider, automatic failovers, cost tracking, and full observability, all through one simple API. + + + + + +## Why Choose Edgee? + +Building with LLMs is powerful, but comes with challenges: + +- **Vendor lock-in**: Your code is tightly coupled to a single provider's API +- **Cost opacity**: Bills spike with no visibility into what's driving costs +- **No fallbacks**: When OpenAI goes down, your app goes down +- **Security concerns**: Sensitive data flows directly to third-party providers +- **Fragmented observability**: Logs scattered across multiple dashboards + +**Edgee solves all of this with a single integration.** + + +## Core Capabilities + + + + One SDK, access to 200+ models from OpenAI, Anthropic, Google, Mistral, and more. + Switch providers with a single line change. - - Implement A/B testing frameworks that react instantly to user interactions. + + Automatic failover, load balancing, and smart model selection. + Optimize for cost, performance, or both. - - Strengthen your security posture by implementing edge-native security measures. + + Real-time cost tracking, latency metrics, and request logs. + Know exactly what your AI is doing and costing. - - Stay tuned, more services are coming soon! + + Control how your data flows with configurable logging and retention. + Enable provider-side ZDR where available, and apply privacy layers to prompts. - -Remember: you can do all of this without compromising on performance, security, or compliance. - Simply install Edgee as a proxy in your existing infrastructure, or integrate our managed service. - Then you can start using the [Edgee SDK](/getting-started/sdk). - diff --git a/introduction/architecture.mdx b/introduction/architecture.mdx deleted file mode 100644 index fe9f6a0..0000000 --- a/introduction/architecture.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Architecture -description: Scalable and available anywhere, in milliseconds -icon: puzzle-piece ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Edgee stands at the forefront of edge computing, redefining how applications interact with the internet. -As a cutting-edge **proxy** technology, Edgee is installed directly at the network edge, positioning it as the -intermediary between your users and your web application. This strategic placement allows Edgee to -offer unparalleled performance, security features, and data processing capabilities. - - -## Leveraging Rust and WebAssembly for performance and reliability - -Built with Rust and integrating every third-party technology as a WebAssembly Component, Edgee delivers the robustness, safety, and execution speed necessary -for high-performance edge computing. This technology stack ensures that Edgee runs efficiently across any network, -providing consistent, near-native performance. - -Rust and WebAssembly logo - Rust and WebAssembly logo - -## Seamless integration into your workflow - -You can integrate Edgee into your infrastructure in two ways: - -- **[SaaS](#go-serverless-global-network-local-presence)**: By pointing your domain name to our network using a -simple CNAME rule, Edgee becomes the first destination for your user's requests. -You don't need to worry about managing servers or scaling infrastructure, we take care of it for you. -This seamless integration ensures that your users always experience the fastest possible access to your website and the edge services you've enabled. - -- **[Self-hosted](#opt-for-self-hosted-edgee-anywhere-its-open-source)**: Although we recommend using our managed service for optimal performance and ease of use, you can also self-host Edgee Open Source Edition. -Whether integrated as an ingress controller within your Kubernetes (k8s) cluster or deployed traditionally via containers, -Edgee adapts to your infrastructure needs. We provide a Helm chart for easy installation and management within your k8s cluster. -If you're utilizing a CDN, you have the option to deploy Edgee within your CDN's infrastructure to harness our edge computing -capabilities, provided that your CDN is an Edgee partner. Should this deployment method interest you, -please reach out to our team for further details. - - -### Behind the scenes: Global Network, Local Presence - -With a distribution of over 100 Points of Presence (PoPs) worldwide, our managed service ensures that your application -benefits from low latency and high availability, no matter where your users are located. -By processing requests and data closest to the user, Edgee dramatically improves response times and user experience. - -By acting as a proxy at the edge, Edgee doesn't replace your hosting, it completes it by adding a layer of -intelligence and security that is both scalable and globally available within milliseconds. - - - Edge oriented application concept - Edge oriented application concept - - - -### Opt for self-hosted: Edgee Anywhere, it's open source - -Edgee's architecture is grounded in openness and flexibility, thanks to its open source nature. -This means you can deploy and run Edgee across any environment — from cloud services to on-premises hardware — ensuring you -can leverage edge computing capabilities wherever your infrastructure is located. - -Please, visit our [GitHub repository](https://github.com/edgee-cloud/edgee) to learn more about Edgee's Open Source Edition. - -We strive to empower developers and organizations to inspect, modify, and enhance the source code -to fit your specific needs. Leveraging the collective intelligence of a global community means that Edgee will continually evolve with contributions -that push the boundaries of what's possible at the edge. diff --git a/introduction/compatibility.mdx b/introduction/compatibility.mdx deleted file mode 100644 index e5707b3..0000000 --- a/introduction/compatibility.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Compatibility -description: The Edge paves the way to the next phase of the internet ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -This page is under construction, so please be patient... - - diff --git a/introduction/faq.mdx b/introduction/faq.mdx index be2778c..ebb044c 100644 --- a/introduction/faq.mdx +++ b/introduction/faq.mdx @@ -1,62 +1,104 @@ --- title: FAQ -description: Discover answers to your most pressing questions about Edgee. -icon: question +description: Common questions about Edgee AI Gateway +icon: message-circle-question-mark --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - - Edgee is an open source platform offering a set of edge computing services. + Edgee is a unified AI Gateway that sits between your application and LLM providers like OpenAI, Anthropic, Google, and Mistral. It provides a single API to access 200+ models, with built-in intelligent routing, cost tracking, automatic failovers, and full observability. - - By processing data and requests at the edge of the network — closer to the user — Edgee reduces latency, frees up client-side resources, - speeds up content delivery, and ensures a smoother user experience. + + When you use LLM APIs directly, you're locked into a single provider's API format, have no visibility into costs until your bill arrives, no automatic failovers when providers go down, and scattered logs across multiple dashboards. + + Edgee gives you: + - **One API** for all providers — switch models with a single line change + - **Real-time cost tracking** — know exactly what each request costs + - **Automatic failovers** — when OpenAI is down, Claude takes over seamlessly + - **Unified observability** — all your AI logs in one place + - **Intelligent routing** — optimize for cost or performance automatically - - Any web-based application can benefit from Edgee, especially those requiring real-time data processing, - high availability, global reach, and security, such as e-commerce sites, streaming services, online gaming, and IoT applications. + + Edgee supports all major LLM providers: + - **OpenAI** (GPT-4, GPT-4o, GPT-3.5, o1, etc.) + - **Anthropic** (Claude 3.5, Claude 3 Opus/Sonnet/Haiku) + - **Google** (Gemini Pro, Gemini Ultra) + - **Mistral** (Mistral Large, Medium, Small) + - **Meta** (Llama 3.1, Llama 3) + - **Cohere** (Command R+, Command R) + - **AWS Bedrock** (all supported models) + - **Azure OpenAI** (all GPT models) + - **And 200+ more models** + + We regularly add new providers and models. If there's a model you need that we don't support, [let us know](https://www.edgee.cloud/contact). - - It's easy to get started with Edgee. Just follow the Quickstart guide in our documentation, and you'll be ready to start deploying your edge services. + + Edgee adds less than 10ms of latency at the p99 level. Our edge network processes requests at the point of presence closest to your application, minimizing round-trip time. + + For most AI applications, where LLM inference takes 500ms-5s, this overhead is negligible — typically less than 1-2% of total request time. - - Yes, Edgee can complement your existing CDN by providing advanced edge computing capabilities. - If your CDN is partnered with Edgee, you can seamlessly integrate our services. Contact our sales team for more information. + + Edgee's routing engine analyzes each request and selects the optimal model based on your configuration: + + - **Cost strategy**: Routes to the cheapest model capable of handling the request + - **Performance strategy**: Always uses the fastest, most capable model + - **Balanced strategy**: Finds the optimal trade-off within your latency and cost budgets + + You can also define fallback chains — if your primary model is unavailable (rate limited, outage, etc.), Edgee automatically retries with your backup models. - - Edgee supports a wide range of components with leading technologies in analytics, A/B testing, and security, - including Google Analytics, Amplitude, Piano Analytics, Segment, Statsig, and Datadome. More components are being added regularly. + + Edgee automatically handles provider failures: + + 1. **Detection**: We detect issues within seconds through health checks and error monitoring + 2. **Retry**: For transient errors, we retry with exponential backoff + 3. **Failover**: For persistent issues, we route to your configured backup models + + Your application sees a seamless response — no errors, no interruption. - - Absolutely. Security is a top priority at Edgee. We offer robust security features, including DDoS protection, bot management, - and secure data processing, to ensure your applications and data are protected at the edge. + + Every response from Edgee includes a `cost` field showing exactly how much that request cost in USD. You can also: + + - View aggregated costs by model, project, or time period in the dashboard + - Set budget alerts at 80%, 90%, 100% of your limit + - Receive webhook notifications when thresholds are crossed + - Export usage data for your own analysis + + No more surprise bills at the end of the month. - - If you are using Edgee Open Source Edition, it's free! - If you are using our managed service, we offer flexible pricing plans tailored to your specific usage and needs. - For detailed pricing information, please contact our sales team. + + Yes! Edgee supports two modes: + + 1. **Edgee-managed keys**: We handle provider accounts and billing. Simple, but you pay our prices (with volume discounts available). + + 2. **Bring Your Own Key (BYOK)**: Use your existing provider API keys. You get your negotiated rates, we just route and observe. + + You can mix both approaches — use your own OpenAI key while we handle Anthropic, for example. - - Our support team is here to help you with any questions or issues. - You can contact us by email: support@edgee.cloud + + Yes. Edgee is designed for compliance-sensitive workloads: - Or by Slack: [edgee-users.slack.com](https://www.edgee.cloud/slack) + - **SOC 2 Type II** certified + - **GDPR** compliant with DPA available + - **Regional routing** to keep data in specific jurisdictions + + Zero Data Retention mode ensures no personal data is ever stored on Edgee servers. - - Yes, while we recommend using Edgee as a managed service for ease of use and optimal performance, - you have the option to self-host our platform. This is particularly useful for integrating Edgee within specific environments, like Kubernetes clusters. + + We're here to help: + + - **Email**: support@edgee.cloud + - **Discord**: [Join our community](https://www.edgee.cloud/discord) + - **GitHub**: [Open an issue](https://github.com/edgee-cloud) + + Enterprise customers have access to dedicated support channels with guaranteed response times. diff --git a/introduction/network-map.mdx b/introduction/network-map.mdx deleted file mode 100644 index 34da08e..0000000 --- a/introduction/network-map.mdx +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Network Map -description: Edgee is powered by a global network of interconnected nodes that communicate with each other to relay transactions and information. -icon: globe ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -The Edgee network represents a foundational shift in how applications connect, communicate, and deliver content across the globe. -As a meticulously designed constellation of interconnected nodes, our network spans hundreds of points of presence (PoPs), -ensuring that your applications are not just global but also resilient, fast, and secure. - -Edge network map -Edge network map - - -When you create a service on Edgee, it is deployed to all our PoPs around the world, -without having to worry about managing servers or scaling infrastructure. - - -## Powered by leading cloud & network providers - -At the heart of our network's unmatched reliability and performance are our partnerships with the world's premier network providers: Fastly and AWS. -These alliances ensure that every node within the Edgee network is built on a backbone of proven, high-speed, -and secure infrastructure. -Leveraging Fastly's edge compute capabilities alongside AWS's robust cloud infrastructure, -we offer a network that is both extensive and capable of meeting the demanding needs of modern, dynamic applications. - -## Seamless transaction and information Relay - -The Edgee network ensures that your application's data and content are processed and served from the nearest location to your end-user. -This proximity minimizes latency, reduces load times, and enhances the overall user experience. -Whether your users are in bustling city centers or remote locations, they receive the same high-quality, seamless experience as if your application were hosted locally. - -Our network architecture is designed to optimize data routing, reducing hops and potential points of failure, thus providing a smooth, -uninterrupted service. This is particularly crucial for real-time applications requiring instant data exchange, -from financial transactions to live streaming and online gaming. - - - - **313Tbps** of network capacity - - - - Edge processing in **10ms** or less - - diff --git a/introduction/why-edgee.mdx b/introduction/why-edgee.mdx new file mode 100644 index 0000000..2d285c6 --- /dev/null +++ b/introduction/why-edgee.mdx @@ -0,0 +1,93 @@ +--- +title: Why Edgee? +description: The technology behind the fastest, most secure AI Gateway +icon: sparkles +--- + +Edgee isn't just another proxy. It's purpose-built infrastructure for production AI workloads, combining edge computing, intelligent routing, and zero-trust security in one platform. + +## Edge-First Architecture + +Traditional AI gateways route all traffic through centralized servers. Edgee processes requests at the edge, closest to your application or user. + + + + **< 10ms** processing overhead + + + **100+** edge locations + + + **Privacy** controls built-in + + + +### How It Works + + + + Your request arrives at one of 100+ global PoPs within milliseconds. + + + Our engine selects the optimal model based on cost, performance, or your custom rules. + + + If a provider fails, we instantly retry with your backup models. + + + Results stream directly to your app with full observability logged. + + + + +### Global Network + +Powered by **Fastly** and **AWS**, our network spans six continents: + +Edge network map +Edge network map + + + Requests are automatically routed to the nearest PoP via Anycast. No configuration needed. + + + +### One Key, All Models + +With a single Edgee API key, you get instant access to every supported model; OpenAI, Anthropic, Google, Mistral, and more. No need to manage multiple provider accounts or juggle API keys: + +```typescript +const edgee = new Edgee(process.env.EDGEE_API_KEY); + +// Access any model with the same key +await edgee.send({ model: 'gpt-4o', input: 'Hello, world!' }); +await edgee.send({ model: 'claude-sonnet-4.5', input: 'Hello, world!' }); +await edgee.send({ model: 'gemini-3-pro', input: 'Hello, world!' }); +``` + +### Bring Your Own Keys + +Need more control? Use your existing provider API keys alongside Edgee. This gives you direct billing relationships, access to custom fine-tuned models, and the ability to use provider-specific features: + +```typescript +const edgee = new Edgee({ + apiKey: process.env.EDGEE_API_KEY, + providers: { + openai: { apiKey: process.env.OPENAI_API_KEY }, + anthropic: { apiKey: process.env.ANTHROPIC_API_KEY }, + }, +}); + +// Requests to OpenAI/Anthropic use YOUR keys +// Other providers fall back to Edgee's unified access +``` + +You can mix both approaches—use Edgee's unified access for some providers and your own keys for others. diff --git a/open-source/overview.mdx b/open-source/overview.mdx deleted file mode 100644 index ec45057..0000000 --- a/open-source/overview.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- - -title: Edgee & Open Source -description: Check out Edgee's open source projects and components -icon: github ---- - -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Edgee is proud to be 100% open source and we'd love to welcome you to our community! - -Check out [our GitHub account](https://github.com/edgee-cloud/) and the main repositories below. - - -## Edgee CLI & Edgee Proxy - -Edgee's core project is a CLI and reverse proxy built in Rust . - - -[ /edgee-cloud/edgee](https://github.com/edgee-cloud/edgee) - - -## Edgee Components - -Each Edgee component is an independent repository, also built in Rust . - -Google Analytics: [ /edgee-cloud/ga-component](https://github.com/edgee-cloud/ga-component) - -Amplitude: [ /edgee-cloud/amplitude-component](https://github.com/edgee-cloud/amplitude-component) - -Segment: [ /edgee-cloud/segment-component](https://github.com/edgee-cloud/segment-component) - -PostHog: [ /edgee-cloud/posthog-component](https://github.com/edgee-cloud/posthog-component) - -Piano Analytics: [ /edgee-cloud/piano-analytics-component](https://github.com/edgee-cloud/piano-analytics-component) - -Meta CAPI: [ /edgee-cloud/meta-capi-component](https://github.com/edgee-cloud/meta-capi-component) - -LinkedIn CAPI: [ /edgee-cloud/linkedin-capi-component](https://github.com/edgee-cloud/linkedin-capi-component) - -Snapchat CAPI: [ /edgee-cloud/snapchat-capi-component](https://github.com/edgee-cloud/snapchat-capi-component) - -Pinterest CAPI: [ /edgee-cloud/pinterest-capi-component](https://github.com/edgee-cloud/pinterest-capi-component) - -Amazon S3: [ /edgee-cloud/amazon-s3-component](https://github.com/edgee-cloud/amazon-s3-component) - - -## Edgee Documentation - -Don't hesitate to reach out or open a pull-request if you spot anything odd in this documentation. - -[ /edgee-cloud/docs](https://github.com/edgee-cloud/docs) - -## Utilities & demos - -A few additional projects that help you integrate or learn about Edgee: - -[ /edgee-cloud/react-edgee](https://github.com/edgee-cloud/react-edgee) - -[ /edgee-cloud/demo-html](https://github.com/edgee-cloud/demo-html) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 651c38b..77a7086 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,9 +4,8 @@ "requires": true, "packages": { "": { - "name": "docs", "dependencies": { - "mintlify": "^4.2.216" + "mintlify": "^4.2.249" } }, "node_modules/@alcalzone/ansi-tokenize": { @@ -35,18 +34,18 @@ } }, "node_modules/@ark/schema": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.56.0.tgz", - "integrity": "sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==", + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.55.0.tgz", + "integrity": "sha512-IlSIc0FmLKTDGr4I/FzNHauMn0MADA6bCjT1wauu4k6MyxhC1R9gz0olNpIRvK7lGGDwtc/VO0RUDNvVQW5WFg==", "license": "MIT", "dependencies": { - "@ark/util": "0.56.0" + "@ark/util": "0.55.0" } }, "node_modules/@ark/util": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.56.0.tgz", - "integrity": "sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==", + "version": "0.55.0", + "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.55.0.tgz", + "integrity": "sha512-aWFNK7aqSvqFtVsl1xmbTjGbg91uqtJV7Za76YGNEwIO4qLjMfyY8flmmbhooYMuqPCO2jyxu8hve943D+w3bA==", "license": "MIT" }, "node_modules/@asyncapi/parser": { @@ -750,21 +749,21 @@ } }, "node_modules/@inquirer/prompts": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", - "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.9.0.tgz", + "integrity": "sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==", "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^4.3.2", - "@inquirer/confirm": "^5.1.21", - "@inquirer/editor": "^4.2.23", - "@inquirer/expand": "^4.0.23", - "@inquirer/input": "^4.3.1", - "@inquirer/number": "^3.0.23", - "@inquirer/password": "^4.0.23", - "@inquirer/rawlist": "^4.1.11", - "@inquirer/search": "^3.2.2", - "@inquirer/select": "^4.4.2" + "@inquirer/checkbox": "^4.3.0", + "@inquirer/confirm": "^5.1.19", + "@inquirer/editor": "^4.2.21", + "@inquirer/expand": "^4.0.21", + "@inquirer/input": "^4.2.5", + "@inquirer/number": "^3.0.21", + "@inquirer/password": "^4.0.21", + "@inquirer/rawlist": "^4.1.9", + "@inquirer/search": "^3.2.0", + "@inquirer/select": "^4.4.0" }, "engines": { "node": ">=18" @@ -996,32 +995,32 @@ } }, "node_modules/@mintlify/cli": { - "version": "4.0.820", - "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.820.tgz", - "integrity": "sha512-h7Pfg7zC04DpUbbkc4P9uXJ31kXFflE4O8vJ56kNlkTDQOQ0fnwD0Z+NrueCSBEJ+XRtYm0fgNqM6dAs2do3xA==", + "version": "4.0.853", + "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.853.tgz", + "integrity": "sha512-qeGNARiousw7ZWGU5k7re+DfYPiU553cbv5E51wZQklp4SrL3wGytDNlOGwF6PXlGUPiZ27GAvbYwIv/qdJa9Q==", "license": "Elastic-2.0", "dependencies": { - "@inquirer/prompts": "^7.9.0", - "@mintlify/common": "1.0.617", - "@mintlify/link-rot": "3.0.760", - "@mintlify/models": "0.0.242", - "@mintlify/prebuild": "1.0.746", - "@mintlify/previewing": "4.0.796", - "@mintlify/validation": "0.1.527", - "adm-zip": "^0.5.10", - "chalk": "^5.2.0", - "color": "^4.2.3", - "detect-port": "^1.5.1", - "fs-extra": "^11.2.0", - "gray-matter": "^4.0.3", - "ink": "^6.0.1", - "inquirer": "^12.3.0", - "js-yaml": "^4.1.0", - "mdast-util-mdx-jsx": "^3.2.0", - "react": "^19.1.0", - "semver": "^7.7.2", - "unist-util-visit": "^5.0.0", - "yargs": "^17.6.0" + "@inquirer/prompts": "7.9.0", + "@mintlify/common": "1.0.643", + "@mintlify/link-rot": "3.0.793", + "@mintlify/models": "0.0.250", + "@mintlify/prebuild": "1.0.774", + "@mintlify/previewing": "4.0.828", + "@mintlify/validation": "0.1.545", + "adm-zip": "0.5.16", + "chalk": "5.2.0", + "color": "4.2.3", + "detect-port": "1.5.1", + "front-matter": "4.0.2", + "fs-extra": "11.2.0", + "ink": "6.3.0", + "inquirer": "12.3.0", + "js-yaml": "4.1.0", + "mdast-util-mdx-jsx": "3.2.0", + "react": "19.2.3", + "semver": "7.7.2", + "unist-util-visit": "5.0.0", + "yargs": "17.7.1" }, "bin": { "mint": "bin/index.js", @@ -1032,54 +1031,54 @@ } }, "node_modules/@mintlify/common": { - "version": "1.0.617", - "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.617.tgz", - "integrity": "sha512-AfXefN/eWhsRTwEus2GZ2p/y6MKHggcHs4AHsAB6FGoFqmqvLg/HzUoqWZzfBS+O9XEOwKwmh1+HCAtzsERm4w==", + "version": "1.0.643", + "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.643.tgz", + "integrity": "sha512-hzXU+znCk3mUZ0ADf6rOuGRYIT60e2kzzOWqsmyJx/paw2IYktGo2BjDcngeFXxwFSp+//vrEkWxBnBBjMSlpw==", "license": "ISC", "dependencies": { "@asyncapi/parser": "3.4.0", "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.242", + "@mintlify/models": "0.0.250", "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/validation": "0.1.527", - "@sindresorhus/slugify": "^2.1.1", - "acorn": "^8.11.2", - "acorn-jsx": "^5.3.2", - "color-blend": "^4.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.3", - "gray-matter": "^4.0.3", - "hast-util-from-html": "^2.0.3", - "hast-util-to-html": "^9.0.4", - "hast-util-to-text": "^4.0.2", - "hex-rgb": "^5.0.0", - "ignore": "^7.0.5", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "mdast-util-from-markdown": "^2.0.2", - "mdast-util-gfm": "^3.0.0", - "mdast-util-mdx": "^3.0.0", - "mdast-util-mdx-jsx": "^3.1.3", - "micromark-extension-gfm": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.1", - "micromark-extension-mdxjs": "^3.0.0", - "openapi-types": "^12.0.0", - "postcss": "^8.5.6", - "remark": "^15.0.1", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "remark-math": "^6.0.0", - "remark-mdx": "^3.1.0", - "remark-stringify": "^11.0.0", - "tailwindcss": "^3.4.4", - "unified": "^11.0.5", - "unist-builder": "^4.0.0", - "unist-util-map": "^4.0.0", - "unist-util-remove": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "unist-util-visit-parents": "^6.0.1", - "vfile": "^6.0.3" + "@mintlify/validation": "0.1.545", + "@sindresorhus/slugify": "2.2.0", + "acorn": "8.11.2", + "acorn-jsx": "5.3.2", + "color-blend": "4.0.0", + "estree-util-to-js": "2.0.0", + "estree-walker": "3.0.3", + "front-matter": "4.0.2", + "hast-util-from-html": "2.0.3", + "hast-util-to-html": "9.0.4", + "hast-util-to-text": "4.0.2", + "hex-rgb": "5.0.0", + "ignore": "7.0.5", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "mdast-util-from-markdown": "2.0.2", + "mdast-util-gfm": "3.0.0", + "mdast-util-mdx": "3.0.0", + "mdast-util-mdx-jsx": "3.1.3", + "micromark-extension-gfm": "3.0.0", + "micromark-extension-mdx-jsx": "3.0.1", + "micromark-extension-mdxjs": "3.0.0", + "openapi-types": "12.1.3", + "postcss": "8.5.6", + "remark": "15.0.1", + "remark-frontmatter": "5.0.0", + "remark-gfm": "4.0.0", + "remark-math": "6.0.0", + "remark-mdx": "3.1.0", + "remark-stringify": "11.0.0", + "tailwindcss": "3.4.4", + "unified": "11.0.5", + "unist-builder": "4.0.0", + "unist-util-map": "4.0.0", + "unist-util-remove": "4.0.0", + "unist-util-remove-position": "5.0.0", + "unist-util-visit": "5.0.0", + "unist-util-visit-parents": "6.0.1", + "vfile": "6.0.3" } }, "node_modules/@mintlify/common/node_modules/@mintlify/mdx": { @@ -1111,6 +1110,49 @@ "react-dom": "^18.3.1" } }, + "node_modules/@mintlify/common/node_modules/@mintlify/mdx/node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mintlify/common/node_modules/@mintlify/mdx/node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mintlify/common/node_modules/@radix-ui/react-popover": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", @@ -1149,6 +1191,30 @@ } } }, + "node_modules/@mintlify/common/node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mintlify/common/node_modules/next-mdx-remote-client": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/next-mdx-remote-client/-/next-mdx-remote-client-1.1.4.tgz", @@ -1208,17 +1274,17 @@ } }, "node_modules/@mintlify/link-rot": { - "version": "3.0.760", - "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.760.tgz", - "integrity": "sha512-LtoJIr9CwmGD6mzmTFPA6tlqJLs3kWibDgUs+/bqtilGawvtTzHcjBolie+D6escOiilVGwqp+oAjiEgbCydLg==", + "version": "3.0.793", + "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.793.tgz", + "integrity": "sha512-GyfP4p2EmNepmKQSphmZE+qe9EmmcpNJvkHlSaih/v/c1eUDIeHbC4fc/TiaNe8UpGP/d4gjEC8swfrG3jjuuw==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.617", - "@mintlify/prebuild": "1.0.746", - "@mintlify/previewing": "4.0.796", - "@mintlify/validation": "0.1.527", - "fs-extra": "^11.1.0", - "unist-util-visit": "^4.1.1" + "@mintlify/common": "1.0.643", + "@mintlify/prebuild": "1.0.774", + "@mintlify/previewing": "4.0.828", + "@mintlify/validation": "0.1.545", + "fs-extra": "11.1.0", + "unist-util-visit": "4.1.2" }, "engines": { "node": ">=18.0.0" @@ -1230,6 +1296,20 @@ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, + "node_modules/@mintlify/link-rot/node_modules/fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@mintlify/link-rot/node_modules/unist-util-is": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", @@ -1273,13 +1353,13 @@ } }, "node_modules/@mintlify/models": { - "version": "0.0.242", - "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.242.tgz", - "integrity": "sha512-RRK4VwseT3REGsCukvMSj1RZ9Qjj3GRkLeBm77CQn7IHuLLzrSw0FiAgG+IeCuznvItVhdZYn/REkMhlAJj1Qg==", + "version": "0.0.250", + "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.250.tgz", + "integrity": "sha512-FrZyKDT/9mz/VrF6k0S2ejPWX3NTKYojvC9hAj6TeG79aSDfiZSnsiMIwyToKzW+r6Qy+oNNs/7YxpB0xTqI8Q==", "license": "Elastic-2.0", "dependencies": { - "axios": "^1.8.3", - "openapi-types": "^12.0.0" + "axios": "1.10.0", + "openapi-types": "12.1.3" }, "engines": { "node": ">=18.0.0" @@ -1320,25 +1400,25 @@ } }, "node_modules/@mintlify/prebuild": { - "version": "1.0.746", - "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.746.tgz", - "integrity": "sha512-0dMly/6Kr6cF7ShMnk8RRigoe/IePzcdkXQvzHnlxTg9RE+XCl+cV2uVUcvw1LDlOVtEpKSCwiP6lZfS6UsGhQ==", + "version": "1.0.774", + "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.774.tgz", + "integrity": "sha512-VRLUuuRoohOUB/Fd27UzaNcaKICuKbqEOavcWe6uZOPQtM1dliS0CAicFmCKyYIBHDEvxlSTVh0sJZEqtj0HFA==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.617", + "@mintlify/common": "1.0.643", "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/scraping": "4.0.477", - "@mintlify/validation": "0.1.527", - "chalk": "^5.3.0", - "favicons": "^7.2.0", - "fs-extra": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "openapi-types": "^12.0.0", - "sharp": "^0.33.1", - "sharp-ico": "^0.1.5", - "unist-util-visit": "^4.1.1", - "uuid": "^11.1.0" + "@mintlify/scraping": "4.0.503", + "@mintlify/validation": "0.1.545", + "chalk": "5.3.0", + "favicons": "7.2.0", + "front-matter": "4.0.2", + "fs-extra": "11.1.0", + "js-yaml": "4.1.0", + "openapi-types": "12.1.3", + "sharp": "0.33.5", + "sharp-ico": "0.1.5", + "unist-util-visit": "4.1.2", + "uuid": "11.1.0" } }, "node_modules/@mintlify/prebuild/node_modules/@types/unist": { @@ -1347,6 +1427,32 @@ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, + "node_modules/@mintlify/prebuild/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@mintlify/prebuild/node_modules/fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@mintlify/prebuild/node_modules/unist-util-is": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", @@ -1390,31 +1496,31 @@ } }, "node_modules/@mintlify/previewing": { - "version": "4.0.796", - "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.796.tgz", - "integrity": "sha512-OiKa0FHd85v436+wDdr57EgQLtlqToUE8vrdNWckuuByfm2yFa2Op8JjbJdQSj0lGiOzCZc09LhKxjK4eDTkyw==", + "version": "4.0.828", + "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.828.tgz", + "integrity": "sha512-RBfAf9ie0oExi4kcT7Y+ms5eWGZwKxbD0r1ZgngknMAwoZkTQaGhT5+ZcAr33p+8AxDsn2Vxct4M9JfpccEPJw==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.617", - "@mintlify/prebuild": "1.0.746", - "@mintlify/validation": "0.1.527", - "better-opn": "^3.0.2", - "chalk": "^5.1.0", - "chokidar": "^3.5.3", - "express": "^4.18.2", - "fs-extra": "^11.1.0", - "got": "^13.0.0", - "gray-matter": "^4.0.3", - "ink": "^6.0.1", - "ink-spinner": "^5.0.0", - "is-online": "^10.0.0", - "js-yaml": "^4.1.0", - "openapi-types": "^12.0.0", - "react": "^19.1.0", - "socket.io": "^4.7.2", - "tar": "^6.1.15", - "unist-util-visit": "^4.1.1", - "yargs": "^17.6.0" + "@mintlify/common": "1.0.643", + "@mintlify/prebuild": "1.0.774", + "@mintlify/validation": "0.1.545", + "better-opn": "3.0.2", + "chalk": "5.2.0", + "chokidar": "3.5.3", + "express": "4.18.2", + "front-matter": "4.0.2", + "fs-extra": "11.1.0", + "got": "13.0.0", + "ink": "6.3.0", + "ink-spinner": "5.0.0", + "is-online": "10.0.0", + "js-yaml": "4.1.0", + "openapi-types": "12.1.3", + "react": "19.2.3", + "socket.io": "4.7.2", + "tar": "6.1.15", + "unist-util-visit": "4.1.2", + "yargs": "17.7.1" }, "engines": { "node": ">=18.0.0" @@ -1426,6 +1532,20 @@ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, + "node_modules/@mintlify/previewing/node_modules/fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@mintlify/previewing/node_modules/unist-util-is": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", @@ -1469,28 +1589,28 @@ } }, "node_modules/@mintlify/scraping": { - "version": "4.0.477", - "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.477.tgz", - "integrity": "sha512-S/ouxgAfLSSI70Lqd+aoybup9JqzsOSdc7NjG+fv7pXqpjuZgyGUKgeFYofKfVPIbRqB1azBYuvjLVEjHgc3LQ==", + "version": "4.0.503", + "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.503.tgz", + "integrity": "sha512-Rwp+DZHZW48A2ounvXxRj8bazKffEfLEx4ctgaDXjWnR+AiArg1Jbw9eG7FQslsTC1pzwpdGPRySJA0+AIQdEw==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.617", + "@mintlify/common": "1.0.643", "@mintlify/openapi-parser": "^0.0.8", - "fs-extra": "^11.1.1", - "hast-util-to-mdast": "^10.1.0", - "js-yaml": "^4.1.0", - "mdast-util-mdx-jsx": "^3.1.3", - "neotraverse": "^0.6.18", - "puppeteer": "^22.14.0", - "rehype-parse": "^9.0.0", - "remark-gfm": "^4.0.0", - "remark-mdx": "^3.0.1", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.5", - "unist-util-visit": "^5.0.0", - "yargs": "^17.6.0", - "zod": "^3.20.6" + "fs-extra": "11.1.1", + "hast-util-to-mdast": "10.1.0", + "js-yaml": "4.1.0", + "mdast-util-mdx-jsx": "3.1.3", + "neotraverse": "0.6.18", + "puppeteer": "22.14.0", + "rehype-parse": "9.0.1", + "remark-gfm": "4.0.0", + "remark-mdx": "3.0.1", + "remark-parse": "11.0.0", + "remark-stringify": "11.0.0", + "unified": "11.0.5", + "unist-util-visit": "5.0.0", + "yargs": "17.7.1", + "zod": "3.21.4" }, "bin": { "mintlify-scrape": "bin/cli.js" @@ -1499,23 +1619,75 @@ "node": ">=18.0.0" } }, + "node_modules/@mintlify/scraping/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@mintlify/scraping/node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mintlify/scraping/node_modules/remark-mdx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", + "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mintlify/validation": { - "version": "0.1.527", - "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.527.tgz", - "integrity": "sha512-Z+JcnG+Tw5b57M6GYc4ONGMRPEn0KWf+h7a+lDUwfhnCHiNgBykqeCXAwfq1vv0AixoDhRplCkheQK2KCHxYWg==", + "version": "0.1.545", + "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.545.tgz", + "integrity": "sha512-fBql13/Dzey3ag4rMXVyfBZgChAdE45xfcFTSIpHVnMWrrmk1Z2gAKU3LOnhNtXRn2aTnvWI0eShFwumJo6vuw==", "license": "Elastic-2.0", "dependencies": { "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.242", - "arktype": "^2.1.26", - "js-yaml": "^4.1.0", - "lcm": "^0.0.3", - "lodash": "^4.17.21", - "object-hash": "^3.0.0", - "openapi-types": "^12.0.0", - "uuid": "^11.1.0", - "zod": "^3.20.6", - "zod-to-json-schema": "^3.20.3" + "@mintlify/models": "0.0.250", + "arktype": "2.1.27", + "js-yaml": "4.1.0", + "lcm": "0.0.3", + "lodash": "4.17.21", + "object-hash": "3.0.0", + "openapi-types": "12.1.3", + "uuid": "11.1.0", + "zod": "3.21.4", + "zod-to-json-schema": "3.20.4" } }, "node_modules/@mintlify/validation/node_modules/@mintlify/mdx": { @@ -1585,6 +1757,25 @@ } } }, + "node_modules/@mintlify/validation/node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mintlify/validation/node_modules/next-mdx-remote-client": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/next-mdx-remote-client/-/next-mdx-remote-client-1.1.4.tgz", @@ -1709,6 +1900,74 @@ "node": ">=18" } }, + "node_modules/@puppeteer/browsers/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@puppeteer/browsers/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/@puppeteer/browsers/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@puppeteer/browsers/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@puppeteer/browsers/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@radix-ui/primitive": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", @@ -2102,74 +2361,97 @@ "license": "MIT" }, "node_modules/@shikijs/core": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.19.0.tgz", - "integrity": "sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.20.0.tgz", + "integrity": "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0", + "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, + "node_modules/@shikijs/core/node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@shikijs/engine-javascript": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.19.0.tgz", - "integrity": "sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.20.0.tgz", + "integrity": "sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0", + "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.19.0.tgz", - "integrity": "sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.20.0.tgz", + "integrity": "sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0", + "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.19.0.tgz", - "integrity": "sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.20.0.tgz", + "integrity": "sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0" + "@shikijs/types": "3.20.0" } }, "node_modules/@shikijs/themes": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.19.0.tgz", - "integrity": "sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.20.0.tgz", + "integrity": "sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.19.0" + "@shikijs/types": "3.20.0" } }, "node_modules/@shikijs/transformers": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.19.0.tgz", - "integrity": "sha512-e6vwrsyw+wx4OkcrDbL+FVCxwx8jgKiCoXzakVur++mIWVcgpzIi8vxf4/b4dVTYrV/nUx5RjinMf4tq8YV8Fw==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.20.0.tgz", + "integrity": "sha512-PrHHMRr3Q5W1qB/42kJW6laqFyWdhrPF2hNR9qjOm1xcSiAO3hAHo7HaVyHE6pMyevmy3i51O8kuGGXC78uK3g==", "license": "MIT", "dependencies": { - "@shikijs/core": "3.19.0", - "@shikijs/types": "3.19.0" + "@shikijs/core": "3.20.0", + "@shikijs/types": "3.20.0" } }, "node_modules/@shikijs/twoslash": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.19.0.tgz", - "integrity": "sha512-DnkH4slSLPC7dJPhZ9Eofy1X/ZgXiWsvOl/ERK7799ZqXsJwtsq2e8RgHBQUX4Y2lf6aoMojirocLY0AbPF3Dg==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.20.0.tgz", + "integrity": "sha512-fZz6vB9a0M8iuVF/ydIV4ToC09sbOh/TqxXZFWAh5J8bLiPsyQGtygKMDQ9L0Sdop3co0TIC/JsrLmsbmZwwsw==", "license": "MIT", "dependencies": { - "@shikijs/core": "3.19.0", - "@shikijs/types": "3.19.0", + "@shikijs/core": "3.20.0", + "@shikijs/types": "3.20.0", "twoslash": "^0.3.4" }, "peerDependencies": { @@ -2177,9 +2459,9 @@ } }, "node_modules/@shikijs/types": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.19.0.tgz", - "integrity": "sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.20.0.tgz", + "integrity": "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -2205,9 +2487,9 @@ } }, "node_modules/@sindresorhus/slugify": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", - "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.0.tgz", + "integrity": "sha512-9Vybc/qX8Kj6pxJaapjkFbiUJPk7MAkCh/GFCxIBnnsuYCFPIXKvnLidG8xlepht3i24L5XemUmGtrJ3UWrl6w==", "license": "MIT", "dependencies": { "@sindresorhus/transliterate": "^1.0.0", @@ -2612,6 +2894,21 @@ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "license": "MIT" }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "license": "MIT" + }, "node_modules/@types/cors": { "version": "2.8.19", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", @@ -2712,9 +3009,9 @@ } }, "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "license": "MIT", "peer": true, "dependencies": { @@ -2797,9 +3094,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "license": "MIT", "peer": true, "bin": { @@ -3007,23 +3304,23 @@ "license": "0BSD" }, "node_modules/arkregex": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.4.tgz", - "integrity": "sha512-biS/FkvSwQq59TZ453piUp8bxMui11pgOMV9WHAnli1F8o0ayNCZzUwQadL/bGIUic5TkS/QlPcyMuI8ZIwedQ==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/arkregex/-/arkregex-0.0.3.tgz", + "integrity": "sha512-bU21QJOJEFJK+BPNgv+5bVXkvRxyAvgnon75D92newgHxkBJTgiFwQxusyViYyJkETsddPlHyspshDQcCzmkNg==", "license": "MIT", "dependencies": { - "@ark/util": "0.56.0" + "@ark/util": "0.55.0" } }, "node_modules/arktype": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.1.28.tgz", - "integrity": "sha512-LVZqXl2zWRpNFnbITrtFmqeqNkPPo+KemuzbGSY6jvJwCb4v8NsDzrWOLHnQgWl26TkJeWWcUNUeBpq2Mst1/Q==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.1.27.tgz", + "integrity": "sha512-enctOHxI4SULBv/TDtCVi5M8oLd4J5SVlPUblXDzSsOYQNMzmVbUosGBnJuZDKmFlN5Ie0/QVEuTE+Z5X1UhsQ==", "license": "MIT", "dependencies": { - "@ark/schema": "0.56.0", - "@ark/util": "0.56.0", - "arkregex": "0.0.4" + "@ark/schema": "0.55.0", + "@ark/util": "0.55.0", + "arkregex": "0.0.3" } }, "node_modules/array-buffer-byte-length": { @@ -3158,13 +3455,13 @@ } }, "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", + "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, @@ -3352,23 +3649,23 @@ } }, "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", + "bytes": "3.1.2", + "content-type": "~1.0.4", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", "type-is": "~1.6.18", - "unpipe": "~1.0.0" + "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8", @@ -3569,9 +3866,9 @@ } }, "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -3627,9 +3924,15 @@ "license": "MIT" }, "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -3643,9 +3946,6 @@ "engines": { "node": ">= 8.10.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -3660,9 +3960,9 @@ } }, "node_modules/chromium-bidi": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", - "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.2.tgz", + "integrity": "sha512-4WVBa6ijmUTVr9cZD4eicQD8Mdy/HCX3bzEIYYpmk0glqYLoWH+LqQEvV9RpDRzoQSbY1KJHloYXbDMXMbDPhg==", "license": "Apache-2.0", "dependencies": { "mitt": "3.0.1", @@ -3737,21 +4037,49 @@ } }, "node_modules/cli-truncate": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", - "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "license": "MIT", "dependencies": { - "slice-ansi": "^7.1.0", - "string-width": "^8.0.0" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" }, "engines": { - "node": ">=20" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/cli-width": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", @@ -3799,6 +4127,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3991,18 +4325,18 @@ } }, "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, "node_modules/cors": { @@ -4334,9 +4668,9 @@ "license": "MIT" }, "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "license": "MIT", "dependencies": { "address": "^1.0.1", @@ -4345,9 +4679,6 @@ "bin": { "detect": "bin/detect-port.js", "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" } }, "node_modules/devlop": { @@ -4427,15 +4758,15 @@ "license": "MIT" }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "license": "MIT" }, "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -4451,16 +4782,17 @@ } }, "node_modules/engine.io": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", - "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "license": "MIT", "dependencies": { + "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.7.2", + "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -4479,6 +4811,15 @@ "node": ">=10.0.0" } }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/engine.io/node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -4560,9 +4901,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", @@ -4712,9 +5053,9 @@ } }, "node_modules/es-toolkit": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.42.0.tgz", - "integrity": "sha512-SLHIyY7VfDJBM8clz4+T2oquwTQxEzu263AyhVK4jREOAwJ+8eebaa4wM3nlvnAqhDrMm2EsA6hWHaQsMPQ1nA==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.43.0.tgz", + "integrity": "sha512-SKCT8AsWvYzBBuUqMk4NPwFlSdqLpJwmy6AP322ERn8W2YLIB6JBXnwMI2Qsh2gfphT3q7EKAxKb23cvFHFwKA==", "license": "MIT", "workspaces": [ "docs", @@ -4961,49 +5302,45 @@ } }, "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.4.1", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", + "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "~6.14.0", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", + "send": "0.18.0", + "serve-static": "1.15.0", "setprototypeof": "1.2.0", - "statuses": "~2.0.1", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -5027,18 +5364,6 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -5182,17 +5507,17 @@ } }, "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.4.1", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~2.0.2", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { @@ -5300,10 +5625,41 @@ "node": ">= 0.6" } }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/front-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/front-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -5586,43 +5942,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -5899,9 +6218,9 @@ } }, "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.4.tgz", + "integrity": "sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -5911,7 +6230,7 @@ "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", + "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" @@ -5921,6 +6240,16 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-html/node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/hast-util-to-jsx-runtime": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", @@ -5949,9 +6278,9 @@ } }, "node_modules/hast-util-to-mdast": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-10.1.2.tgz", - "integrity": "sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-10.1.0.tgz", + "integrity": "sha512-DsL/SvCK9V7+vfc6SLQ+vKIyBDXTk2KLSbfBYkH4zeF/uR1yBajHRhkzuaUSGOB1WJSTieJBdHwxlC+HLKvZZw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -6062,23 +6391,19 @@ "license": "BSD-2-Clause" }, "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" } }, "node_modules/http-proxy-agent": { @@ -6127,9 +6452,9 @@ "license": "MPL-2.0" }, "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -6216,29 +6541,30 @@ "license": "ISC" }, "node_modules/ink": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/ink/-/ink-6.5.1.tgz", - "integrity": "sha512-wF3j/DmkM8q5E+OtfdQhCRw8/0ahkc8CUTgEddxZzpEWPslu7YPL3t64MWRoI9m6upVGpfAg4ms2BBvxCdKRLQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ink/-/ink-6.3.0.tgz", + "integrity": "sha512-2CbJAa7XeziZYe6pDS5RVLirRY28iSGMQuEV8jRU5NQsONQNfcR/BZHHc9vkMg2lGYTHTM2pskxC1YmY28p6bQ==", "license": "MIT", + "peer": true, "dependencies": { - "@alcalzone/ansi-tokenize": "^0.2.1", - "ansi-escapes": "^7.2.0", + "@alcalzone/ansi-tokenize": "^0.2.0", + "ansi-escapes": "^7.0.0", "ansi-styles": "^6.2.1", "auto-bind": "^5.0.1", "chalk": "^5.6.0", "cli-boxes": "^3.0.0", "cli-cursor": "^4.0.0", - "cli-truncate": "^5.1.1", + "cli-truncate": "^4.0.0", "code-excerpt": "^4.0.0", "es-toolkit": "^1.39.10", "indent-string": "^5.0.0", "is-in-ci": "^2.0.0", "patch-console": "^2.0.0", - "react-reconciler": "^0.33.0", + "react-reconciler": "^0.32.0", "signal-exit": "^3.0.7", "slice-ansi": "^7.1.0", "stack-utils": "^2.0.6", - "string-width": "^8.1.0", + "string-width": "^7.2.0", "type-fest": "^4.27.0", "widest-line": "^5.0.0", "wrap-ansi": "^9.0.0", @@ -6251,7 +6577,7 @@ "peerDependencies": { "@types/react": ">=19.0.0", "react": ">=19.0.0", - "react-devtools-core": "^6.1.2" + "react-devtools-core": "^4.19.1" }, "peerDependenciesMeta": { "@types/react": { @@ -6278,11 +6604,17 @@ "react": ">=18.0.0" } }, - "node_modules/ink/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "license": "MIT" + "node_modules/ink/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, "node_modules/ink/node_modules/signal-exit": { "version": "3.0.7", @@ -6304,24 +6636,7 @@ "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/ink/node_modules/wrap-ansi/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/inline-style-parser": { @@ -6331,29 +6646,51 @@ "license": "MIT" }, "node_modules/inquirer": { - "version": "12.11.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.11.1.tgz", - "integrity": "sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==", + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.3.0.tgz", + "integrity": "sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ==", "license": "MIT", "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/prompts": "^7.10.1", - "@inquirer/type": "^3.0.10", + "@inquirer/core": "^10.1.2", + "@inquirer/prompts": "^7.2.1", + "@inquirer/type": "^3.0.2", + "ansi-escapes": "^4.3.2", "mute-stream": "^2.0.0", - "run-async": "^4.0.6", - "rxjs": "^7.8.2" + "run-async": "^3.0.0", + "rxjs": "^7.8.1" }, "engines": { "node": ">=18" }, "peerDependencies": { "@types/node": ">=18" + } + }, + "node_modules/inquirer/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/internal-slot": { @@ -6591,15 +6928,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6970,7 +7298,6 @@ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "license": "MIT", - "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -6982,9 +7309,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -7067,9 +7394,9 @@ } }, "node_modules/katex": { - "version": "0.16.25", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.25.tgz", - "integrity": "sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==", + "version": "0.16.27", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.27.tgz", + "integrity": "sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -7091,15 +7418,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lcm": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/lcm/-/lcm-0.0.3.tgz", @@ -7122,15 +7440,12 @@ } }, "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "node": ">=10" } }, "node_modules/lines-and-columns": { @@ -7284,9 +7599,9 @@ } }, "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", @@ -7559,13 +7874,10 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -7837,11 +8149,12 @@ } }, "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", - "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", + "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", "license": "MIT", "dependencies": { + "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", @@ -8451,12 +8764,12 @@ } }, "node_modules/mintlify": { - "version": "4.2.216", - "resolved": "https://registry.npmjs.org/mintlify/-/mintlify-4.2.216.tgz", - "integrity": "sha512-343Re1duxaCNpg68VkuqLTubNZbhQQihguxmh1tV6i4TMWi8OX/Y8wphfqubzpXZaZRCRn3Hr5HOXzdFKPpnrA==", + "version": "4.2.249", + "resolved": "https://registry.npmjs.org/mintlify/-/mintlify-4.2.249.tgz", + "integrity": "sha512-HyUFif/LI/RuBj0NcOn5qjfrfApFCHv1ypeNe+vxX6o/BLczeq6l1NlsE+U5LOofQdzLqNhXm7UIuD+fP5reTA==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/cli": "4.0.820" + "@mintlify/cli": "4.0.853" }, "bin": { "mint": "index.js", @@ -8975,9 +9288,9 @@ "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "license": "MIT" }, "node_modules/pend": { @@ -9112,9 +9425,9 @@ } }, "node_modules/postcss-load-config": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "funding": [ { "type": "opencollective", @@ -9127,32 +9440,37 @@ ], "license": "MIT", "dependencies": { - "lilconfig": "^3.1.1" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { - "node": ">= 18" + "node": ">= 14" }, "peerDependencies": { - "jiti": ">=1.21.0", "postcss": ">=8.0.9", - "tsx": "^4.8.1", - "yaml": "^2.4.2" + "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { - "jiti": { - "optional": true - }, "postcss": { "optional": true }, - "tsx": { - "optional": true - }, - "yaml": { + "ts-node": { "optional": true } } }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/postcss-nested": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", @@ -9307,9 +9625,9 @@ } }, "node_modules/puppeteer": { - "version": "22.15.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.15.0.tgz", - "integrity": "sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.14.0.tgz", + "integrity": "sha512-MGTR6/pM8zmWbTdazb6FKnwIihzsSEXBPH49mFFU96DNZpQOevCAZMnjBZGlZRGRzRK6aADCavR6SQtrbv5dQw==", "deprecated": "< 24.15.0 is no longer supported", "hasInstallScript": true, "license": "Apache-2.0", @@ -9317,7 +9635,7 @@ "@puppeteer/browsers": "2.3.0", "cosmiconfig": "^9.0.0", "devtools-protocol": "0.0.1312386", - "puppeteer-core": "22.15.0" + "puppeteer-core": "22.14.0" }, "bin": { "puppeteer": "lib/esm/puppeteer/node/cli.js" @@ -9327,14 +9645,14 @@ } }, "node_modules/puppeteer-core": { - "version": "22.15.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", - "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.14.0.tgz", + "integrity": "sha512-rl4tOY5LcA3e374GAlsGGHc05HL3eGNf5rZ+uxkl6id9zVZKcwcp1Z+Nd6byb6WPiPeecT/dwz8f/iUm+AZQSw==", "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "2.3.0", - "chromium-bidi": "0.6.3", - "debug": "^4.3.6", + "chromium-bidi": "0.6.2", + "debug": "^4.3.5", "devtools-protocol": "0.0.1312386", "ws": "^8.18.0" }, @@ -9343,12 +9661,12 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "side-channel": "^1.0.4" }, "engines": { "node": ">=0.6" @@ -9399,15 +9717,15 @@ } }, "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" @@ -9426,9 +9744,9 @@ } }, "node_modules/react": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", - "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", "peer": true, "engines": { @@ -9436,31 +9754,37 @@ } }, "node_modules/react-dom": { - "version": "19.2.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", - "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", "peer": true, "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.1" + "react": "^19.2.3" } }, + "node_modules/react-dom/node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, "node_modules/react-reconciler": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.33.0.tgz", - "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.32.0.tgz", + "integrity": "sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==", "license": "MIT", "dependencies": { - "scheduler": "^0.27.0" + "scheduler": "^0.26.0" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { - "react": "^19.2.0" + "react": "^19.1.0" } }, "node_modules/react-remove-scroll": { @@ -9661,9 +9985,9 @@ } }, "node_modules/regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", - "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", "license": "MIT", "dependencies": { "regex-utilities": "^2.3.0" @@ -9800,9 +10124,9 @@ } }, "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -9834,9 +10158,9 @@ } }, "node_modules/remark-mdx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", - "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", + "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", "license": "MIT", "dependencies": { "mdast-util-mdx": "^3.0.0", @@ -10086,9 +10410,9 @@ } }, "node_modules/run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -10223,28 +10547,15 @@ "license": "BlueOak-1.0.0" }, "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", "license": "MIT" }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -10254,15 +10565,15 @@ } }, "node_modules/send": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", - "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", @@ -10292,31 +10603,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serialize-error": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-12.0.0.tgz", @@ -10333,93 +10619,20 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-static/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-static/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/serve-static/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -10523,17 +10736,17 @@ } }, "node_modules/shiki": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.19.0.tgz", - "integrity": "sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.20.0.tgz", + "integrity": "sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg==", "license": "MIT", "dependencies": { - "@shikijs/core": "3.19.0", - "@shikijs/engine-javascript": "3.19.0", - "@shikijs/engine-oniguruma": "3.19.0", - "@shikijs/langs": "3.19.0", - "@shikijs/themes": "3.19.0", - "@shikijs/types": "3.19.0", + "@shikijs/core": "3.20.0", + "@shikijs/engine-javascript": "3.20.0", + "@shikijs/engine-oniguruma": "3.20.0", + "@shikijs/langs": "3.20.0", + "@shikijs/themes": "3.20.0", + "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } @@ -10676,16 +10889,16 @@ } }, "node_modules/socket.io": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", - "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.6.0", + "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -10872,9 +11085,9 @@ } }, "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -10905,16 +11118,17 @@ } }, "node_modules/string-width": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", - "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.3.0", + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11005,15 +11219,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/style-to-js": { "version": "1.1.21", "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", @@ -11076,33 +11281,33 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.18", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", - "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.6.0", + "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.2", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.7", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, "bin": { "tailwind": "lib/cli.js", @@ -11125,9 +11330,9 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "license": "ISC", "dependencies": { "chownr": "^2.0.0", @@ -11324,22 +11529,22 @@ "license": "0BSD" }, "node_modules/twoslash": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.4.tgz", - "integrity": "sha512-RtJURJlGRxrkJmTcZMjpr7jdYly1rfgpujJr1sBM9ch7SKVht/SjFk23IOAyvwT1NLCk+SJiMrvW4rIAUM2Wug==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.6.tgz", + "integrity": "sha512-VuI5OKl+MaUO9UIW3rXKoPgHI3X40ZgB/j12VY6h98Ae1mCBihjPvhOPeJWlxCYcmSbmeZt5ZKkK0dsVtp+6pA==", "license": "MIT", "dependencies": { - "@typescript/vfs": "^1.6.1", - "twoslash-protocol": "0.3.4" + "@typescript/vfs": "^1.6.2", + "twoslash-protocol": "0.3.6" }, "peerDependencies": { "typescript": "^5.5.0" } }, "node_modules/twoslash-protocol": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.3.4.tgz", - "integrity": "sha512-HHd7lzZNLUvjPzG/IE6js502gEzLC1x7HaO1up/f72d8G8ScWAs9Yfa97igelQRDl5h9tGcdFsRp+lNVre1EeQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.3.6.tgz", + "integrity": "sha512-FHGsJ9Q+EsNr5bEbgG3hnbkvEBdW5STgPU824AHUjB4kw0Dn4p8tABT7Ncg1Ie6V0+mDg3Qpy41VafZXcQhWMA==", "license": "MIT" }, "node_modules/type-fest": { @@ -11673,9 +11878,9 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -11999,29 +12204,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "license": "MIT" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -12060,6 +12242,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -12164,7 +12352,6 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", - "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -12176,9 +12363,9 @@ } }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -12211,6 +12398,12 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -12275,9 +12468,9 @@ "license": "MIT" }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", "license": "MIT", "peer": true, "funding": { @@ -12285,12 +12478,12 @@ } }, "node_modules/zod-to-json-schema": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", - "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", + "version": "3.20.4", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.20.4.tgz", + "integrity": "sha512-Un9+kInJ2Zt63n6Z7mLqBifzzPcOyX+b+Exuzf7L1+xqck9Q2EPByyTRduV3kmSPaXaRer1JCsucubpgL1fipg==", "license": "ISC", "peerDependencies": { - "zod": "^3.25 || ^4" + "zod": "^3.20.0" } }, "node_modules/zwitch": { diff --git a/package.json b/package.json index 47e22f5..11d54ed 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,6 @@ "links": "mintlify broken-links" }, "dependencies": { - "mintlify": "^4.2.216" + "mintlify": "^4.2.249" } } diff --git a/pre-commit b/pre-commit deleted file mode 100755 index 41c8f24..0000000 --- a/pre-commit +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# works with a specific ruleset for edgee docs - -# Get staged .mdx files -STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACMR HEAD | grep "\.mdx$") - -# Initialize error tracking -HAS_ERRORS=0 - -echo "Checking mdx files..." - -# Loop through staged files -for FILE in $STAGED_FILES; do - # Skip files in snippets folder - if echo "$FILE" | grep -q "^snippets/"; then - continue - fi - - # Check if file contains - if ! grep -q "" "$FILE"; then - echo "Error: is missing in $FILE" - HAS_ERRORS=1 - fi -done - -# Exit with error if any files were missing -if [ $HAS_ERRORS -eq 1 ]; then - exit 1 -fi - -exit 0 \ No newline at end of file diff --git a/components/consent-management/axeptio-consent-mapping.mdx b/proxy/components/consent-management/axeptio-consent-mapping.mdx similarity index 90% rename from components/consent-management/axeptio-consent-mapping.mdx rename to proxy/components/consent-management/axeptio-consent-mapping.mdx index ea6cbf1..eee356f 100644 --- a/components/consent-management/axeptio-consent-mapping.mdx +++ b/proxy/components/consent-management/axeptio-consent-mapping.mdx @@ -5,13 +5,10 @@ description: Integrate user consent managed by Axeptio with your Edgee component -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - [Axeptio](https://www.axept.io) helps you collect user consent on your website and build a positive consent experience. -With this component, you no longer need to [specify your users' consent](/services/consent/overview) +With this component, you no longer need to [specify your users' consent](/proxy/services/consent/overview) via the Edgee SDK or Edgee Data Layer: everything is done automatically. The consent status will be automatically set to `pending`, `granted`, or `denied` based on the Axeptio cookie. diff --git a/components/consent-management/axeptio.mdx b/proxy/components/consent-management/axeptio.mdx similarity index 98% rename from components/consent-management/axeptio.mdx rename to proxy/components/consent-management/axeptio.mdx index ad9a194..e4a641e 100644 --- a/components/consent-management/axeptio.mdx +++ b/proxy/components/consent-management/axeptio.mdx @@ -6,9 +6,6 @@ description: Integrate Axeptio consent management platform at the edge with auto -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - [Axeptio](https://www.axept.io/) is a powerful consent management platform that helps you collect user consent on your website and comply with international data privacy regulations including GDPR, CCPA, and ePrivacy Directive. As a comprehensive cookie consent solution, Axeptio ensures your website meets regulatory requirements while maintaining a seamless user experience. diff --git a/components/consent-management/cookiebot-consent-mapping.mdx b/proxy/components/consent-management/cookiebot-consent-mapping.mdx similarity index 86% rename from components/consent-management/cookiebot-consent-mapping.mdx rename to proxy/components/consent-management/cookiebot-consent-mapping.mdx index cc5203a..6cf6334 100644 --- a/components/consent-management/cookiebot-consent-mapping.mdx +++ b/proxy/components/consent-management/cookiebot-consent-mapping.mdx @@ -5,13 +5,10 @@ description: Integrate user consent managed by Cookiebot with your Edgee compone -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - [Cookiebot](https://www.cookiebot.com/) helps you collect user consent on your website and comply with international data privacy regulations. -This component automatically handles consent management by integrating directly with Cookiebot, eliminating the need to manually [specify consent](/services/consent/overview) through the Edgee SDK or Data Layer. +This component automatically handles consent management by integrating directly with Cookiebot, eliminating the need to manually [specify consent](/proxy/services/consent/overview) through the Edgee SDK or Data Layer. The consent status will be automatically set to `pending`, `granted`, or `denied` based on the Cookiebot cookie. diff --git a/components/consent-management/cookieyes-consent-mapping.mdx b/proxy/components/consent-management/cookieyes-consent-mapping.mdx similarity index 90% rename from components/consent-management/cookieyes-consent-mapping.mdx rename to proxy/components/consent-management/cookieyes-consent-mapping.mdx index 9daa33d..72422db 100644 --- a/components/consent-management/cookieyes-consent-mapping.mdx +++ b/proxy/components/consent-management/cookieyes-consent-mapping.mdx @@ -5,13 +5,10 @@ description: Integrate user consent managed by CookieYes with your Edgee compone -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - [CookieYes](https://www.cookieyes.com/) helps you automate consent management and manage cookie compliance. -With this component, you no longer need to [specify your users' consent](/services/consent/overview) +With this component, you no longer need to [specify your users' consent](/proxy/services/consent/overview) via the Edgee SDK or Edgee Data Layer: everything is done automatically. The consent status will be automatically set to `pending`, `granted`, or `denied` based on the CookieYes cookie. diff --git a/components/consent-management/didomi-consent-mapping.mdx b/proxy/components/consent-management/didomi-consent-mapping.mdx similarity index 91% rename from components/consent-management/didomi-consent-mapping.mdx rename to proxy/components/consent-management/didomi-consent-mapping.mdx index ca7edf7..ee9d596 100644 --- a/components/consent-management/didomi-consent-mapping.mdx +++ b/proxy/components/consent-management/didomi-consent-mapping.mdx @@ -6,13 +6,10 @@ description: Integrate user consent managed by Didomi with your Edgee components -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - [Didomi](https://www.didomi.io/consent-management-platform) helps you collect user consent on your website and comply with international data privacy regulations. -With this component, you no longer need to [specify your users' consent](/services/consent/overview) +With this component, you no longer need to [specify your users' consent](/proxy/services/consent/overview) via the Edgee SDK or Edgee Data Layer: everything is done automatically. The consent status will be automatically set to `pending`, `granted`, or `denied` based on the Didomi cookie. diff --git a/components/consent-management/didomi.mdx b/proxy/components/consent-management/didomi.mdx similarity index 96% rename from components/consent-management/didomi.mdx rename to proxy/components/consent-management/didomi.mdx index 6cea211..28780ad 100644 --- a/components/consent-management/didomi.mdx +++ b/proxy/components/consent-management/didomi.mdx @@ -6,13 +6,10 @@ description: Integrate Didomi CMP at the edge and automatically handle consent m -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - [Didomi](https://www.didomi.io/consent-management-platform) helps you collect user consent on your website and comply with international data privacy regulations. -With this component, you no longer need to [specify your users' consent](/services/consent/overview) +With this component, you no longer need to [specify your users' consent](/proxy/services/consent/overview) via the Edgee SDK or Edgee Data Layer: everything is done automatically. The consent status will be automatically set to `pending`, `granted`, or `denied` based on the Didomi cookie. diff --git a/components/consent-management/iubenda-consent-mapping.mdx b/proxy/components/consent-management/iubenda-consent-mapping.mdx similarity index 93% rename from components/consent-management/iubenda-consent-mapping.mdx rename to proxy/components/consent-management/iubenda-consent-mapping.mdx index bb45f9e..10d4f56 100644 --- a/components/consent-management/iubenda-consent-mapping.mdx +++ b/proxy/components/consent-management/iubenda-consent-mapping.mdx @@ -5,13 +5,10 @@ description: Integrate user consent managed by Iubenda with your Edgee component -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - [Iubenda](https://www.iubenda.com/) provides a comprehensive consent management solution to help you comply with global privacy regulations and manage user preferences. -This component automatically handles consent management by integrating directly with Iubenda, eliminating the need to [manually specify consent](/services/consent/overview) through the Edgee SDK or Data Layer. +This component automatically handles consent management by integrating directly with Iubenda, eliminating the need to [manually specify consent](/proxy/services/consent/overview) through the Edgee SDK or Data Layer. The consent status will be automatically set to `pending`, `granted`, or `denied` based on the Iubenda cookie. diff --git a/components/consent-management/onetrust-consent-mapping.mdx b/proxy/components/consent-management/onetrust-consent-mapping.mdx similarity index 90% rename from components/consent-management/onetrust-consent-mapping.mdx rename to proxy/components/consent-management/onetrust-consent-mapping.mdx index 22c296c..7c5593a 100644 --- a/components/consent-management/onetrust-consent-mapping.mdx +++ b/proxy/components/consent-management/onetrust-consent-mapping.mdx @@ -5,13 +5,9 @@ description: Integrate user consent managed by OneTrust with your Edgee componen -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - The [OneTrust Consent Management Platform](https://www.onetrust.com/products/consent-management/) helps you collect user consent on your website. -With this component, you no longer need to [specify your users' consent](/services/consent/overview) +With this component, you no longer need to [specify your users' consent](/proxy/services/consent/overview) via the Edgee SDK or Edgee Data Layer: everything is done automatically. The consent status will be automatically set to `pending`, `granted`, or `denied` based on the OneTrust cookie. diff --git a/components/consent-management/osano-consent-mapping.mdx b/proxy/components/consent-management/osano-consent-mapping.mdx similarity index 97% rename from components/consent-management/osano-consent-mapping.mdx rename to proxy/components/consent-management/osano-consent-mapping.mdx index 1fa3f4c..b9542d1 100644 --- a/components/consent-management/osano-consent-mapping.mdx +++ b/proxy/components/consent-management/osano-consent-mapping.mdx @@ -6,13 +6,10 @@ description: Integrate user consent managed by Osano with your Edgee components. -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - [Osano](https://www.osano.com) is an intuitive data privacy platform that helps organizations manage privacy compliance across multiple regulations and jurisdictions, including cookie consent management for data privacy laws in over 50 countries. -With this component, you no longer need to [specify your users' consent](/services/consent/overview) +With this component, you no longer need to [specify your users' consent](/proxy/services/consent/overview) via the Edgee SDK or Edgee Data Layer: everything is done automatically. The consent status will be automatically set to `pending`, `granted`, or `denied` based on evaluating ALL Osano consent categories together. diff --git a/components/consent-management/simple-cmp.mdx b/proxy/components/consent-management/simple-cmp.mdx similarity index 94% rename from components/consent-management/simple-cmp.mdx rename to proxy/components/consent-management/simple-cmp.mdx index 0e79bf7..bd75491 100644 --- a/components/consent-management/simple-cmp.mdx +++ b/proxy/components/consent-management/simple-cmp.mdx @@ -5,9 +5,6 @@ description: Display a simple cookie consent banner directly at the edge with no -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - The Simple CMP component provides a lightweight, edge-rendered cookie consent banner that appears instantly without any JavaScript flicker. This component handles cookie consent management directly at the edge, offering a simple solution for basic consent requirements. @@ -54,5 +51,5 @@ The component manages three straightforward consent states: While designed for simplicity, some organizations may need more advanced features like granular consent categories, custom branding, multiple languages, or complex consent logic. In these cases, consider using external consent management platform, and connect them to Edgee -with our [Consent Mapping](/components/consent-management/axeptio-consent-mapping) components. +with our [Consent Mapping](/proxy/components/consent-management/axeptio-consent-mapping) components. diff --git a/components/data-collection/amazon-data-firehose.mdx b/proxy/components/data-collection/amazon-data-firehose.mdx similarity index 96% rename from components/data-collection/amazon-data-firehose.mdx rename to proxy/components/data-collection/amazon-data-firehose.mdx index a822f16..e209cc7 100644 --- a/components/data-collection/amazon-data-firehose.mdx +++ b/proxy/components/data-collection/amazon-data-firehose.mdx @@ -5,9 +5,6 @@ description: Collect and forward analytics events to your streaming pipelines on -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - Find it on GitHub: [ /edgee-cloud/amazon-data-firehose-component](https://github.com/edgee-cloud/amazon-data-firehose-component) diff --git a/components/data-collection/amazon-kinesis.mdx b/proxy/components/data-collection/amazon-kinesis.mdx similarity index 96% rename from components/data-collection/amazon-kinesis.mdx rename to proxy/components/data-collection/amazon-kinesis.mdx index 4142475..64f206c 100644 --- a/components/data-collection/amazon-kinesis.mdx +++ b/proxy/components/data-collection/amazon-kinesis.mdx @@ -5,9 +5,6 @@ description: Collect and forward analytics events to your streaming pipelines on -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - Find it on GitHub: [ /edgee-cloud/amazon-kinesis-component](https://github.com/edgee-cloud/amazon-kinesis-component) diff --git a/components/data-collection/amazon-s3.mdx b/proxy/components/data-collection/amazon-s3.mdx similarity index 96% rename from components/data-collection/amazon-s3.mdx rename to proxy/components/data-collection/amazon-s3.mdx index d418f38..f1dd29e 100644 --- a/components/data-collection/amazon-s3.mdx +++ b/proxy/components/data-collection/amazon-s3.mdx @@ -5,9 +5,6 @@ description: Collect and forward analytics events to your data lake on Amazon S3 -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - Find it on GitHub: [ /edgee-cloud/amazon-s3-component](https://github.com/edgee-cloud/amazon-s3-component) diff --git a/components/data-collection/amplitude.mdx b/proxy/components/data-collection/amplitude.mdx similarity index 97% rename from components/data-collection/amplitude.mdx rename to proxy/components/data-collection/amplitude.mdx index 14d53c1..be0defd 100644 --- a/components/data-collection/amplitude.mdx +++ b/proxy/components/data-collection/amplitude.mdx @@ -5,10 +5,6 @@ description: Build better products by turning your user data into meaningful ins -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/amplitude-component](https://github.com/edgee-cloud/amplitude-component) Amplitude, a comprehensive product analytics platform, is seamlessly integrated with Edgee, allowing you to leverage diff --git a/components/data-collection/clickhouse.mdx b/proxy/components/data-collection/clickhouse.mdx similarity index 98% rename from components/data-collection/clickhouse.mdx rename to proxy/components/data-collection/clickhouse.mdx index e148a55..ec010c3 100644 --- a/components/data-collection/clickhouse.mdx +++ b/proxy/components/data-collection/clickhouse.mdx @@ -7,10 +7,6 @@ description: Collect and forward analytics events to your ClickHouse tables. -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/clickhouse-component](https://github.com/edgee-cloud/clickhouse-component) ClickHouse is an open-source columnar database that allows you to generate analytical reports using SQL queries in real-time. diff --git a/components/data-collection/eulerian.mdx b/proxy/components/data-collection/eulerian.mdx similarity index 96% rename from components/data-collection/eulerian.mdx rename to proxy/components/data-collection/eulerian.mdx index b8eac2d..886831a 100644 --- a/components/data-collection/eulerian.mdx +++ b/proxy/components/data-collection/eulerian.mdx @@ -5,10 +5,6 @@ description: The smart solution to enable you to quickly make the best marketing -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /EulerianTechnologies/edgee-eulerian-analytics](https://github.com/EulerianTechnologies/edgee-eulerian-analytics) Eulerian Analytics component allowing to integrate the [Eulerian Marketing Platform](https://www.eulerian.com/) through the Edgee platform : diff --git a/components/data-collection/google-analytics.mdx b/proxy/components/data-collection/google-analytics.mdx similarity index 99% rename from components/data-collection/google-analytics.mdx rename to proxy/components/data-collection/google-analytics.mdx index 7bbf567..01ec2d9 100644 --- a/components/data-collection/google-analytics.mdx +++ b/proxy/components/data-collection/google-analytics.mdx @@ -5,9 +5,6 @@ description: Google Analytics is the leading analytics platform by Google, **now -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - Find it on GitHub: [ /edgee-cloud/ga-component](https://github.com/edgee-cloud/ga-component) diff --git a/components/data-collection/google-bigquery.mdx b/proxy/components/data-collection/google-bigquery.mdx similarity index 97% rename from components/data-collection/google-bigquery.mdx rename to proxy/components/data-collection/google-bigquery.mdx index bc08f6e..e67fb5a 100644 --- a/components/data-collection/google-bigquery.mdx +++ b/proxy/components/data-collection/google-bigquery.mdx @@ -5,9 +5,6 @@ description: Collect and forward analytics events to your BigQuery tables. -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - Find it on GitHub: [ /edgee-cloud/bigquery-component](https://github.com/edgee-cloud/bigquery-component) diff --git a/components/data-collection/gosquared.mdx b/proxy/components/data-collection/gosquared.mdx similarity index 96% rename from components/data-collection/gosquared.mdx rename to proxy/components/data-collection/gosquared.mdx index 9524b3b..38a93f1 100644 --- a/components/data-collection/gosquared.mdx +++ b/proxy/components/data-collection/gosquared.mdx @@ -5,9 +5,6 @@ description: Understand your users with GoSquared — real-time analytics, CRM, -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - Find it on GitHub: [ /edgee-cloud/gosquared-component](https://github.com/edgee-cloud/gosquared-component) diff --git a/components/data-collection/linkedin-capi.mdx b/proxy/components/data-collection/linkedin-capi.mdx similarity index 97% rename from components/data-collection/linkedin-capi.mdx rename to proxy/components/data-collection/linkedin-capi.mdx index b0ab892..a07f20b 100644 --- a/components/data-collection/linkedin-capi.mdx +++ b/proxy/components/data-collection/linkedin-capi.mdx @@ -5,10 +5,6 @@ description: Send your conversion events directly to LinkedIn's Conversions API -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/linkedin-capi-component](https://github.com/edgee-cloud/linkedin-capi-component) LinkedIn Conversions API (CAPI) allows you to send web events directly to LinkedIn from your server, ensuring reliable data tracking even with ad blockers or browser limitations. With Edgee's edge integration, you can now send these events directly from the edge, improving both reliability and performance. @@ -96,7 +92,7 @@ Implementing the LinkedIn Conversion API via Edgee is simple and straightforward 2. Scroll down to the "**Direct API access token**" section. Follow LinkedIn's steps and copy your LinkedIn Access Token. This Access Token is consistent for all future LinkedIn CAPI implementations. -3. Go to your Edgee account and project, then navigate to **Components** (learn to set up components [here](https://www.edgee.cloud/docs/getting-started/component-configuration)). Select LinkedIn and input your token. +3. Go to your Edgee account and project, then navigate to **Components** (learn to set up components [here](https://www.edgee.cloud/docs/proxy/getting-started/component-configuration)). Select LinkedIn and input your token. diff --git a/components/data-collection/matomo.mdx b/proxy/components/data-collection/matomo.mdx similarity index 96% rename from components/data-collection/matomo.mdx rename to proxy/components/data-collection/matomo.mdx index f6917e6..8b0d223 100644 --- a/components/data-collection/matomo.mdx +++ b/proxy/components/data-collection/matomo.mdx @@ -5,10 +5,6 @@ description: Privacy-first web analytics with Matomo, now running server-side at -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/matomo-component](https://github.com/edgee-cloud/matomo-component) **Matomo** is a leading open-source analytics platform focused on data privacy and user control. With Matomo, you can measure website traffic, understand user behavior, and track goals and campaigns — all without compromising user privacy. diff --git a/components/data-collection/meta-capi.mdx b/proxy/components/data-collection/meta-capi.mdx similarity index 98% rename from components/data-collection/meta-capi.mdx rename to proxy/components/data-collection/meta-capi.mdx index 379e3f8..9808295 100644 --- a/components/data-collection/meta-capi.mdx +++ b/proxy/components/data-collection/meta-capi.mdx @@ -5,10 +5,6 @@ description: Send your conversion events directly to Meta's Conversions API (CAP -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/meta-capi-component](https://github.com/edgee-cloud/meta-capi-component) Meta Conversions API (CAPI) allows you to send web events directly to Meta from your server, ensuring reliable data tracking even with ad blockers or browser limitations. diff --git a/components/data-collection/mixpanel.mdx b/proxy/components/data-collection/mixpanel.mdx similarity index 96% rename from components/data-collection/mixpanel.mdx rename to proxy/components/data-collection/mixpanel.mdx index 3ee42a0..d7383cb 100644 --- a/components/data-collection/mixpanel.mdx +++ b/proxy/components/data-collection/mixpanel.mdx @@ -5,10 +5,6 @@ description: Built successful products by analyzing, testing, and observing prod -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/mixpanel-component](https://github.com/edgee-cloud/mixpanel-component) Mixpanel is a powerful product analytics platform that helps you analyze user behavior, understand engagement, and make data-driven decisions. With Mixpanel, you can track events, create funnels, measure retention, and gain actionable insights about how users interact with your product. diff --git a/components/data-collection/piano-analytics.mdx b/proxy/components/data-collection/piano-analytics.mdx similarity index 97% rename from components/data-collection/piano-analytics.mdx rename to proxy/components/data-collection/piano-analytics.mdx index 0855427..a9c7d67 100644 --- a/components/data-collection/piano-analytics.mdx +++ b/proxy/components/data-collection/piano-analytics.mdx @@ -5,10 +5,6 @@ description: Master and share a complete data-driven view of your customer with -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/piano-analytics-component](https://github.com/edgee-cloud/piano-analytics-component) Piano Analytics, known for its precise analytics and data management platform, can be integrated directly through Edgee, diff --git a/components/data-collection/pinterest-capi.mdx b/proxy/components/data-collection/pinterest-capi.mdx similarity index 97% rename from components/data-collection/pinterest-capi.mdx rename to proxy/components/data-collection/pinterest-capi.mdx index 8392595..41b4b30 100644 --- a/components/data-collection/pinterest-capi.mdx +++ b/proxy/components/data-collection/pinterest-capi.mdx @@ -5,10 +5,6 @@ description: Send your conversion events directly to Pinterest's Conversions API -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/pinterest-capi-component](https://github.com/edgee-cloud/pinterest-capi-component) Pinterest Conversions API (CAPI) allows you to send web events directly to Pinterest from your server, ensuring reliable data tracking even with ad blockers or browser limitations. With Edgee's edge integration, you can now send these events directly from the edge, improving both reliability and performance. diff --git a/components/data-collection/plausible.mdx b/proxy/components/data-collection/plausible.mdx similarity index 96% rename from components/data-collection/plausible.mdx rename to proxy/components/data-collection/plausible.mdx index c59dbb0..87774b1 100644 --- a/components/data-collection/plausible.mdx +++ b/proxy/components/data-collection/plausible.mdx @@ -5,10 +5,6 @@ description: Plausible Analytics provides open source and privacy-friendly web a -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/plausible-component](https://github.com/edgee-cloud/plausible-component) Plausible is intuitive, lightweight and open source web analytics. diff --git a/components/data-collection/posthog.mdx b/proxy/components/data-collection/posthog.mdx similarity index 96% rename from components/data-collection/posthog.mdx rename to proxy/components/data-collection/posthog.mdx index 8259f44..ffa44b9 100644 --- a/components/data-collection/posthog.mdx +++ b/proxy/components/data-collection/posthog.mdx @@ -5,10 +5,6 @@ description: Built successful products by analyzing, testing, and observing prod -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/posthog-component](https://github.com/edgee-cloud/posthog-component) PostHog is the all-in-one platform for product analytics, feature flags, session replays, experiments, and surveys that's built for developers. diff --git a/components/data-collection/segment.mdx b/proxy/components/data-collection/segment.mdx similarity index 97% rename from components/data-collection/segment.mdx rename to proxy/components/data-collection/segment.mdx index 607ce2e..dfe211e 100644 --- a/components/data-collection/segment.mdx +++ b/proxy/components/data-collection/segment.mdx @@ -5,10 +5,6 @@ description: Segment is a customer data platform (CDP) that helps you collect, c -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/segment-component](https://github.com/edgee-cloud/segment-component) Segment's powerful customer data platform is now fully integrable with Edgee, allowing you to centralize your data collection diff --git a/components/data-collection/snapchat-capi.mdx b/proxy/components/data-collection/snapchat-capi.mdx similarity index 97% rename from components/data-collection/snapchat-capi.mdx rename to proxy/components/data-collection/snapchat-capi.mdx index 79d2252..e0a1328 100644 --- a/components/data-collection/snapchat-capi.mdx +++ b/proxy/components/data-collection/snapchat-capi.mdx @@ -5,10 +5,6 @@ description: Send your conversion events directly to Snapchat's Conversions API -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/snapchat-capi-component](https://github.com/edgee-cloud/snapchat-capi-component) Snapchat Conversions API (CAPI) allows you to send web events directly to Snapchat from your server, ensuring reliable data tracking even with ad blockers or browser limitations. With Edgee's edge integration, you can now send these events directly from the edge, improving both reliability and performance. diff --git a/components/data-collection/snowflake.mdx b/proxy/components/data-collection/snowflake.mdx similarity index 99% rename from components/data-collection/snowflake.mdx rename to proxy/components/data-collection/snowflake.mdx index b54c9d2..ea8864e 100644 --- a/components/data-collection/snowflake.mdx +++ b/proxy/components/data-collection/snowflake.mdx @@ -3,10 +3,6 @@ title: Snowflake description: Collect and forward analytics events to your Snowflake data cloud platform. --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/snowflake-component](https://github.com/edgee-cloud/snowflake-component) [Snowflake](https://www.snowflake.com/) is a cloud-based data platform that enables scalable data warehousing, data lakes, data engineering, data science, and secure data sharing. With Snowflake's [SQL API](https://docs.snowflake.com/en/developer-guide/sql-api/intro), you can execute SQL statements and manage your data warehouse programmatically. diff --git a/components/data-collection/woopra.mdx b/proxy/components/data-collection/woopra.mdx similarity index 96% rename from components/data-collection/woopra.mdx rename to proxy/components/data-collection/woopra.mdx index e781aee..de48862 100644 --- a/components/data-collection/woopra.mdx +++ b/proxy/components/data-collection/woopra.mdx @@ -5,10 +5,6 @@ description: Collect and forward analytics events to your Woopra tables, now at -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Find it on GitHub: [ /edgee-cloud/woopra-component](https://github.com/edgee-cloud/woopra-component) Woopra lets you analyze and visualize the entire customer journey, from first marketing touch to product usage. diff --git a/components/identity/amplitude-native-cookies.mdx b/proxy/components/identity/amplitude-native-cookies.mdx similarity index 94% rename from components/identity/amplitude-native-cookies.mdx rename to proxy/components/identity/amplitude-native-cookies.mdx index feb3996..c9e4944 100644 --- a/components/identity/amplitude-native-cookies.mdx +++ b/proxy/components/identity/amplitude-native-cookies.mdx @@ -5,15 +5,11 @@ description: Use Edgee's Native Cookie Support to manage Amplitude cookies at th -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Amplitude uses a device ID cookie (`AMP_[API_KEY]`) to track users across sessions. With Amplitude Native Cookies component, this cookie can be managed directly at the edge. -To know more about the native cookie support, please refer to the [Native Cookies](/services/data-collection/native-cookies) documentation. +To know more about the native cookie support, please refer to the [Native Cookies](/proxy/services/data-collection/native-cookies) documentation. ## Getting Started diff --git a/components/identity/first-id.mdx b/proxy/components/identity/first-id.mdx similarity index 98% rename from components/identity/first-id.mdx rename to proxy/components/identity/first-id.mdx index f807d9d..4ab4a40 100644 --- a/components/identity/first-id.mdx +++ b/proxy/components/identity/first-id.mdx @@ -5,10 +5,6 @@ description: Use First ID component to identify and recognize your consented use -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - First ID is a powerful solution that enables you to identify and recognize your consented users across all your websites, devices, and browsers without being dependent on email or third-party cookies. With the increasing restrictions on third-party cookies (up to 90% of users becoming invisible), First ID provides a deterministic and persistent identification solution. diff --git a/components/identity/google-analytics-native-cookies.mdx b/proxy/components/identity/google-analytics-native-cookies.mdx similarity index 93% rename from components/identity/google-analytics-native-cookies.mdx rename to proxy/components/identity/google-analytics-native-cookies.mdx index ce55536..da8f21a 100644 --- a/components/identity/google-analytics-native-cookies.mdx +++ b/proxy/components/identity/google-analytics-native-cookies.mdx @@ -5,15 +5,11 @@ description: Use Edgee's Native Cookie Support to manage Google Analytics cookie -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Google Analytics uses a client ID cookie (`_ga`) to track users across sessions. With Ga4 Native Cookies component, this cookie can be managed directly at the edge. -To know more about the native cookie support, please refer to the [Native Cookies](/services/data-collection/native-cookies) documentation. +To know more about the native cookie support, please refer to the [Native Cookies](/proxy/services/data-collection/native-cookies) documentation. ## Getting Started diff --git a/components/identity/piano-analytics-native-cookies.mdx b/proxy/components/identity/piano-analytics-native-cookies.mdx similarity index 95% rename from components/identity/piano-analytics-native-cookies.mdx rename to proxy/components/identity/piano-analytics-native-cookies.mdx index b16d973..7e29124 100644 --- a/components/identity/piano-analytics-native-cookies.mdx +++ b/proxy/components/identity/piano-analytics-native-cookies.mdx @@ -5,15 +5,11 @@ description: Use Edgee's Native Cookie Support to manage Piano Analytics cookies -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Piano Analytics uses various cookies to track users across sessions. With Piano Analytics Native Cookies component, these cookies can be managed directly at the edge. -To know more about the native cookie support, please refer to the [Native Cookies](/services/data-collection/native-cookies) documentation. +To know more about the native cookie support, please refer to the [Native Cookies](/proxy/services/data-collection/native-cookies) documentation. ## Getting Started diff --git a/components/js-gateway/google-tag-gateway.mdx b/proxy/components/js-gateway/google-tag-gateway.mdx similarity index 98% rename from components/js-gateway/google-tag-gateway.mdx rename to proxy/components/js-gateway/google-tag-gateway.mdx index 59ce61d..8b509f5 100644 --- a/components/js-gateway/google-tag-gateway.mdx +++ b/proxy/components/js-gateway/google-tag-gateway.mdx @@ -5,10 +5,6 @@ description: Google Tag Manager boosted with the edge, the only way of collectin -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Google Tag Manager is one of the most popular and powerful tag management platforms available. However, due to its widespread use, it often faces challenges with ad blockers and privacy-related restrictions. [Google Tag Gateway](https://developers.google.com/tag-platform/tag-manager/gateway/setup-guide) offers an innovative solution to these challenges. It allows you to deploy Google tags through your own first-party infrastructure, **hosted directly on your website's domain**. By acting as an intermediary between your website and Google's services, the Gateway provides: diff --git a/components/js-gateway/meta-signals-gateway.mdx b/proxy/components/js-gateway/meta-signals-gateway.mdx similarity index 98% rename from components/js-gateway/meta-signals-gateway.mdx rename to proxy/components/js-gateway/meta-signals-gateway.mdx index f2c57e3..787ed73 100644 --- a/components/js-gateway/meta-signals-gateway.mdx +++ b/proxy/components/js-gateway/meta-signals-gateway.mdx @@ -5,10 +5,6 @@ description: Signals Gateway boosted with the edge, the only way of collecting f -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Meta Signals Gateway is a server-side tagging solution that enables you to create data pipelines, perform data processing, and send signals to various destination and advertising platforms (including Meta's platforms). With Edgee, there's no need to host Signals Gateway servers on your own infrastructure - this Component works seamlessly with instances that Edgee hosts for you. diff --git a/components/js-gateway/piano-analytics-gateway.mdx b/proxy/components/js-gateway/piano-analytics-gateway.mdx similarity index 98% rename from components/js-gateway/piano-analytics-gateway.mdx rename to proxy/components/js-gateway/piano-analytics-gateway.mdx index c647490..d49a5ab 100644 --- a/components/js-gateway/piano-analytics-gateway.mdx +++ b/proxy/components/js-gateway/piano-analytics-gateway.mdx @@ -5,10 +5,6 @@ description: Piano Analytics SDK boosted with the edge, the only way of collecti -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Piano Analytics is a powerful analytics platform that provides comprehensive data collection and analysis capabilities. However, like many analytics tools, it can face challenges with ad blockers and browser privacy restrictions that may impact data collection reliability. diff --git a/components/overview.mdx b/proxy/components/overview.mdx similarity index 88% rename from components/overview.mdx rename to proxy/components/overview.mdx index cf1ce1b..0e2b55b 100644 --- a/components/overview.mdx +++ b/proxy/components/overview.mdx @@ -4,17 +4,14 @@ sidebarTitle: Overview description: Explore the Edgee components with leading technologies. --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; import DataCollectionCatalog from '/snippets/data-collection-catalog.mdx'; import JsGatewayCatalog from '/snippets/js-gateway-catalog.mdx'; import EndpointCatalog from '/snippets/endpoint-catalog.mdx'; import ConsentManagementCatalog from '/snippets/consent-management-catalog.mdx'; import IdentityCatalog from '/snippets/identity-catalog.mdx'; import SecurityCatalog from '/snippets/security-catalog.mdx'; -import EdgeFunctionCatalog from '/snippets/edge-function-catalog.mdx'; import StitchingCatalog from '/snippets/stitching-catalog.mdx'; - With Edgee, intensive and sensitive tasks are shifted away from browsers and mobile applications to the network layer, benefiting from distributed processing. This allows for faster processing, reduced network congestion, and enhanced application performance. @@ -30,10 +27,6 @@ directly at the edge. Here's an overview of the technologies available within th -#### Edge Functions - - - #### Consent Management diff --git a/components/security/crowdsec.mdx b/proxy/components/security/crowdsec.mdx similarity index 95% rename from components/security/crowdsec.mdx rename to proxy/components/security/crowdsec.mdx index 412a1d8..5866847 100644 --- a/components/security/crowdsec.mdx +++ b/proxy/components/security/crowdsec.mdx @@ -5,10 +5,6 @@ description: Crowd-sourced threat intelligence and IP blocking at the edge - pro -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - [CrowdSec](https://www.crowdsec.net/) is an open-source security engine that leverages crowd-sourced threat intelligence to identify and block malicious IP addresses. The CrowdSec component integrates with Edgee to provide real-time IP filtering at the edge using [CrowdSec's Raw IP List integration](https://docs.crowdsec.net/u/integrations/rawiplist), automatically blocking known threats while allowing legitimate traffic through. This component fetches regularly updated blocklists containing IP addresses flagged by the global CrowdSec community for malicious behavior such as brute force attacks, scanning activities, and other threat patterns. @@ -187,15 +183,15 @@ For detailed information about CrowdSec's threat intelligence and community, vis Enhance your security posture by combining CrowdSec with other Edgee security features: - + Advanced bot detection and fraud protection using machine learning to complement IP-based blocking. - + Control request rates and prevent abuse with built-in rate limiting capabilities. - + Implement IP whitelisting, geographic restrictions, and custom access rules. diff --git a/components/security/datadome.mdx b/proxy/components/security/datadome.mdx similarity index 97% rename from components/security/datadome.mdx rename to proxy/components/security/datadome.mdx index 696be7a..47462e1 100644 --- a/components/security/datadome.mdx +++ b/proxy/components/security/datadome.mdx @@ -5,10 +5,6 @@ description: Bot & online fraud protection powered by multi-layered machine lear -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - [DataDome](https://www.datadome.co/) is a comprehensive bot detection and fraud protection platform that uses advanced machine learning to protect your website from automated threats. The DataDome component integrates seamlessly with Edgee to provide real-time protection at the edge, blocking malicious bots while allowing legitimate traffic to pass through. diff --git a/components/stitching/kameleoon.mdx b/proxy/components/stitching/kameleoon.mdx similarity index 98% rename from components/stitching/kameleoon.mdx rename to proxy/components/stitching/kameleoon.mdx index c243c52..2a5776f 100644 --- a/components/stitching/kameleoon.mdx +++ b/proxy/components/stitching/kameleoon.mdx @@ -5,10 +5,6 @@ description: "Integrate Kameleoon for advanced A/B testing and feature experimen -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - [Kameleoon](https://www.kameleoon.com) is a unified experimentation platform for web and full-stack applications, enabling you to run A/B tests, manage feature flags, and personalize user experiences at scale. diff --git a/getting-started/account-creation.mdx b/proxy/getting-started/account-creation.mdx similarity index 74% rename from getting-started/account-creation.mdx rename to proxy/getting-started/account-creation.mdx index eeecb72..adaae4a 100644 --- a/getting-started/account-creation.mdx +++ b/proxy/getting-started/account-creation.mdx @@ -1,19 +1,15 @@ --- title: Account Creation description: Create a new Edgee account. -icon: square-1 +icon: dice-1 --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - 1. First of all, [create a new Edgee account](https://www.edgee.cloud/register). 2. Fill in your details, including your name, email, and password. 3. Please, be aware that creating an account means that you agree to our [Terms of Service](https://www.edgee.cloud/terms) and [Privacy Policy](https://www.edgee.cloud/privacy). 4. You will receive an email with a link to validate your email address. -You are now ready to [create your first project](/getting-started/project-settings)! +You are now ready to [create your first project](/proxy/getting-started/project-settings)! diff --git a/getting-started/component-configuration.mdx b/proxy/getting-started/component-configuration.mdx similarity index 95% rename from getting-started/component-configuration.mdx rename to proxy/getting-started/component-configuration.mdx index 412de84..06efc36 100644 --- a/getting-started/component-configuration.mdx +++ b/proxy/getting-started/component-configuration.mdx @@ -1,13 +1,9 @@ --- title: Component Configuration description: Configure your first components. -icon: square-4 +icon: dice-4 --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Components are the building blocks of Edgee's functionality. You can configure each component to meet your specific needs while maintaining privacy and compliance requirements. This guide will help you configure your first component effectively. ## Add a component @@ -81,7 +77,7 @@ Each component may have additional configuration options specific to its functio - **Consent Management Components** - Cookie names -The specific settings for each component are documented in their respective documentation pages. You can find these by clicking on the component's name in the catalog or visiting the [Components section](/components) of our documentation. +The specific settings for each component are documented in their respective documentation pages. You can find these by clicking on the component's name in the catalog or visiting the [Components section](/proxy/components) of our documentation. diff --git a/getting-started/debugging.mdx b/proxy/getting-started/debugging.mdx similarity index 92% rename from getting-started/debugging.mdx rename to proxy/getting-started/debugging.mdx index e32e27b..3946439 100644 --- a/getting-started/debugging.mdx +++ b/proxy/getting-started/debugging.mdx @@ -4,13 +4,9 @@ description: How to view and inspect a live stream of events from your website icon: bug --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -After [setting up a project](/getting-started/project-settings), -[installing the SDK](/getting-started/sdk), -and [activating your components](/getting-started/component-configuration), +After [setting up a project](/proxy/getting-started/project-settings), +[installing the SDK](/proxy/getting-started/sdk), +and [activating your components](/proxy/getting-started/component-configuration), you might wonder if everything's working smoothly on your website. We understand it might be tricky to verify since you cannot see any tracking request from the browser anymore. @@ -62,7 +58,7 @@ Please note that: the Edgee SDK is not installed on your homepage, please visit another page with the same query string. - This will enable the collection of debugging events only for yourself (not for all the users browsing your website). If you need a complete overview of how many events are being collected on your website in total, check out your -[project statistics](/getting-started/statistics). +[project statistics](/proxy/getting-started/statistics). ## Inspect debugging events diff --git a/getting-started/domains.mdx b/proxy/getting-started/domains.mdx similarity index 98% rename from getting-started/domains.mdx rename to proxy/getting-started/domains.mdx index 6861450..2ccdf53 100644 --- a/getting-started/domains.mdx +++ b/proxy/getting-started/domains.mdx @@ -4,10 +4,6 @@ description: How to configure custom domains for your Edgee project icon: shield-check --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Each project is associated with an Edgee-owned domain under `*.edgee.app`. Your default domain is `your-project-id.edgee.app` and it allows you to get started with Edgee quickly, diff --git a/getting-started/hubspot.mdx b/proxy/getting-started/hubspot.mdx similarity index 91% rename from getting-started/hubspot.mdx rename to proxy/getting-started/hubspot.mdx index f72d6b5..c8fec22 100644 --- a/getting-started/hubspot.mdx +++ b/proxy/getting-started/hubspot.mdx @@ -4,10 +4,6 @@ description: Implementing Edgee in front of HubSpot for better performance, flex icon: /images/hubspot/hubspot.svg --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Edgee can sit in front of your HubSpot CMS as a proxy to **boost performance**, **strengthen security**, and **seamless integration**. @@ -29,7 +25,7 @@ Integrating Edgee with HubSpot involves four main steps: ### Step 1 — Connect Your Domain to Edgee -See [Custom Domains](/getting-started/domains) for detailed instructions on configuring domains with Edgee. +See [Custom Domains](/proxy/getting-started/domains) for detailed instructions on configuring domains with Edgee. 1. Log in to your **Edgee** dashboard. 2. Go to **Project Settings → Routing**. @@ -69,7 +65,7 @@ This ensures HubSpot does not manage SSL or CDN — Edgee will handle it instead ### Step 4 — Point Your Domain to Edgee 1. Update your DNS settings so your domain routes traffic through **Edgee** instead of directly to HubSpot. -2. Follow the [Edgee Routing Guide](/getting-started/routing) to complete the configuration. +2. Follow the [Edgee Routing Guide](/proxy/getting-started/routing) to complete the configuration. --- diff --git a/getting-started.mdx b/proxy/getting-started/index.mdx similarity index 52% rename from getting-started.mdx rename to proxy/getting-started/index.mdx index 40b6c03..c004d5b 100644 --- a/getting-started.mdx +++ b/proxy/getting-started/index.mdx @@ -4,12 +4,7 @@ description: Start using Edgee in minutes. icon: square-minus --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - The following guide will help you get started with Edgee managed service in minutes. -If you want to self-host Edgee, please refer to the [open-source documentation](/open-source/overview). This guide will walk you through the basics of getting started with Edgee, from setting up your account to implementing our libraries in your applications. @@ -17,17 +12,17 @@ from setting up your account to implementing our libraries in your applications. | Step | Task | Time | | ---- |------- | ------------- | -| 1 | [Account Creation](/getting-started/account-creation) | 2 min | -| 2 | [Project Settings](/getting-started/project-settings) | 5-10 min | -| 3 | [SDK Installation + Autocapture](/getting-started/sdk) | 1 min | -| 4 | [Component Configuration](/getting-started/component-configuration) | 5-10 min | +| 1 | [Account Creation](/proxy/getting-started/account-creation) | 2 min | +| 2 | [Project Settings](/proxy/getting-started/project-settings) | 5-10 min | +| 3 | [SDK Installation + Autocapture](/proxy/getting-started/sdk) | 1 min | +| 4 | [Component Configuration](/proxy/getting-started/component-configuration) | 5-10 min | | | **Total Time** | **~25 min** | -Once you're up and running with Edgee, you may want to explore more advanced topics like [debugging](/getting-started/debugging), -[managing organizations and sub-organizations](/getting-started/organizations), -or follow our detailed [migration guide](/getting-started/migration-guide) for moving existing implementations to Edgee. +Once you're up and running with Edgee, you may want to explore more advanced topics like [debugging](/proxy/getting-started/debugging), +[managing organizations and sub-organizations](/proxy/getting-started/organizations), +or follow our detailed [migration guide](/proxy/getting-started/migration-guide) for moving existing implementations to Edgee. ## Different ways to discover Edgee @@ -39,14 +34,14 @@ After creating your account, you can start exploring Edgee in different ways: + href="/proxy/getting-started/project-settings"> Go on with the quickstart guide and create your first project. Moving workloads to the edge is a great way to improve performance and privacy. @@ -54,16 +49,8 @@ After creating your account, you can start exploring Edgee in different ways: Discover the different services we offer. - - - If you prefer to dive into the technical details, check out our API reference. - diff --git a/getting-started/js-sdk.mdx b/proxy/getting-started/js-sdk.mdx similarity index 79% rename from getting-started/js-sdk.mdx rename to proxy/getting-started/js-sdk.mdx index 166075a..767d914 100644 --- a/getting-started/js-sdk.mdx +++ b/proxy/getting-started/js-sdk.mdx @@ -4,10 +4,6 @@ description: Manually integrate the JavaScript SDK in a web application. icon: js --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Copy the snippet below, then add it to your HTML document - ideally just before the closing `` tag. ```html @@ -23,5 +19,5 @@ Replace `` with the URL provided in the Edgee console, in the proj ### Next Steps You can now start to explore the full capabilities of Edgee. -In the [services](/services/overview) section of this documentation, you'll find detailed guides on using the SDK and activating +In the [services](/proxy/services/overview) section of this documentation, you'll find detailed guides on using the SDK and activating features such as advanced analytics, A/B testing, security, and more. diff --git a/getting-started/migration-guide.mdx b/proxy/getting-started/migration-guide.mdx similarity index 91% rename from getting-started/migration-guide.mdx rename to proxy/getting-started/migration-guide.mdx index af6f7dd..294af4c 100644 --- a/getting-started/migration-guide.mdx +++ b/proxy/getting-started/migration-guide.mdx @@ -1,13 +1,9 @@ --- title: Migration guide description: Detailed migration guide, step by step -icon: stairs +icon: chart-no-axes-column --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Depending on the size of your website and team, there are a few different ways to go about migrating from traditional client-side technologies to Edgee Components. @@ -15,7 +11,7 @@ Let's have a look at what needs to happen both at the architectural level and at ## Architectural changes -No matter what case works better for you, the first step is always to [create and configure an Edgee project](/getting-started/project-settings). +No matter what case works better for you, the first step is always to [create and configure an Edgee project](/proxy/getting-started/project-settings). Based on the existing architectural pieces, there are at least three cases to consider. @@ -38,7 +34,7 @@ Edgee will take care of everything for you and you won't need to worry about man #### What needs to happen -To get the full benefits of Edgee's performance, you might want to [enable caching on Edgee](/services/performance/caching). +To get the full benefits of Edgee's performance, you might want to [enable caching on Edgee](/proxy/services/performance/caching). If you need to use a custom domain such as `yourwebsite.com`, you'll need to set up the SSL certificate. Here you have two options: @@ -46,7 +42,7 @@ Here you have two options: 1. Edgee can generate a certificate for you via [Let's Encrypt](https://letsencrypt.org). 2. You can install your certificate on the Edgee platform. -[Learn more about custom domains and SSL certificates](/getting-started/domains). +[Learn more about custom domains and SSL certificates](/proxy/getting-started/domains). Note: You could still use an external CDN to serve static assets such as images and JS/CSS files. @@ -71,7 +67,7 @@ such as filtering out bot traffic, enforcing HTTPS connections, password protect #### What needs to happen -If the existing CDN is already taking care of caching, you probably want to [keep caching disabled on Edgee](/services/performance/caching). +If the existing CDN is already taking care of caching, you probably want to [keep caching disabled on Edgee](/proxy/services/performance/caching). Because Edgee becomes the first destination for DNS resolution, all traffic to your existing CDN will come from Edgee. This means you need to make sure Edgee won't be considered an attacker by the existing CDN (or other security solutions in the network chain). @@ -106,7 +102,7 @@ In order to get most events collected at the edge, HTTP requests will need to re so you might want to disable caching in the existing CDN for HTML pages. Then, to get the full benefits of Edgee's performance, -you could [enable caching on Edgee](/services/performance/caching). +you could [enable caching on Edgee](/proxy/services/performance/caching). Note: Edgee will still track events (client-side) if it detects that HTML pages are being cached by your CDN. @@ -133,9 +129,9 @@ Edgee can sit alongside your CDN ensuring you maintain full control over DNS res #### What needs to happen 1. Configure your CDN to forward all incoming traffic to your Edgee endpoint (e.g., `yourproject.edgee.app`). -2. Route traffic from your Edgee endpoint to [to your domain](/getting-started/routing). +2. Route traffic from your Edgee endpoint to [to your domain](/proxy/getting-started/routing). 3. Set both the **Cookie Domain** and **Frontend Hostname** fields (in **Console** > **Project Settings > Compute**) to match your custom domain (e.g., `mywebsite.com`). -4. Secure the connection by adding [required headers](services/security/access-control#required-header) in Edgee. This ensures only authorized requests from Edgee are accepted by your CDN and forwarded to your cloud/website. +4. Secure the connection by adding [required headers](/proxy/services/security/access-control#required-header) in Edgee. This ensures only authorized requests from Edgee are accepted by your CDN and forwarded to your cloud/website. @@ -154,7 +150,7 @@ while avoiding any data loss. The first step is integrating the Edgee SDK into your website, ideally on all pages. -[Learn more about integrating the Edgee SDK](/getting-started/sdk). +[Learn more about integrating the Edgee SDK](/proxy/getting-started/sdk). Note: No events are being captured yet, but this is a useful checkpoint to make sure that your Edgee configuration @@ -280,7 +276,7 @@ edgee.track({ }); ``` -[Learn more about how to collect the track event](/services/data-collection/track-event). +[Learn more about how to collect the track event](/proxy/services/data-collection/track-event). Similarly, you'll convert this: @@ -330,7 +326,7 @@ edgee.user({ }); ``` -[Learn more about how to collect the user event](/services/data-collection/user-event). +[Learn more about how to collect the user event](/proxy/services/data-collection/user-event). Once all event tracking has been converted to the Edgee SDK, you can safely remove all the other client-side SDKs. diff --git a/getting-started/mobile-sdk.mdx b/proxy/getting-started/mobile-sdk.mdx similarity index 80% rename from getting-started/mobile-sdk.mdx rename to proxy/getting-started/mobile-sdk.mdx index 6aa1d85..9aa7550 100644 --- a/getting-started/mobile-sdk.mdx +++ b/proxy/getting-started/mobile-sdk.mdx @@ -1,19 +1,15 @@ --- title: Mobile SDK description: Integrate Edgee with a mobile application. -icon: mobile +icon: smartphone --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Edgee provides comprehensive mobile SDKs that allow you to implement data collection in your mobile applications with rich native context and privacy-first design. ## Available Mobile SDKs - + Full-featured SDK for React Native applications with 30+ native data points, offline queue, and automatic screen tracking. @@ -30,7 +26,7 @@ Our React Native SDK provides: - **Auto Screen Tracking**: Optional helpers for Expo Router and React Navigation - **Graceful Fallback**: Works without native modules (Expo Go compatible) -[Get started with React Native SDK →](/getting-started/react-native-sdk) +[Get started with React Native SDK →](/proxy/getting-started/react-native-sdk) ## Native iOS and Android SDKs @@ -38,4 +34,3 @@ We're currently working on native mobile SDKs for iOS and Android that will prov In the meantime, you can directly integrate with the data collection API of your Edgee project for native iOS and Android apps. -[Learn more about data collection API.](/api-reference/data-collection/) diff --git a/getting-started/no-code-data-layer.mdx b/proxy/getting-started/no-code-data-layer.mdx similarity index 97% rename from getting-started/no-code-data-layer.mdx rename to proxy/getting-started/no-code-data-layer.mdx index cc5f156..7f01b69 100644 --- a/getting-started/no-code-data-layer.mdx +++ b/proxy/getting-started/no-code-data-layer.mdx @@ -1,11 +1,9 @@ --- title: No-Code Data Layer description: Learn how to filter or modify your analytics events without touching code. -icon: sliders +icon: mouse-pointer --- - - The **No-code Data Layer** allows you to filter and transform analytics data on the fly — no engineering effort required. Whether you want to exclude internal traffic or adjust event names, this feature gives you full control over your data without having to write new code. ## What can you do with the No-code Data Layer? @@ -42,7 +40,7 @@ To do that: This tells Edgee to **block any event** coming from the `fr-fr` language locale. -Learn more about the Data Layer structure and what event fields are available [here](/services/data-collection/data-layer#structure-of-a-data-layer-object). +Learn more about the Data Layer structure and what event fields are available [here](/proxy/services/data-collection/data-layer#structure-of-a-data-layer-object). diff --git a/getting-started/organizations.mdx b/proxy/getting-started/organizations.mdx similarity index 97% rename from getting-started/organizations.mdx rename to proxy/getting-started/organizations.mdx index 5da2049..9c9f521 100644 --- a/getting-started/organizations.mdx +++ b/proxy/getting-started/organizations.mdx @@ -4,10 +4,6 @@ description: How to manage your Edgee organization and sub-organizations. icon: list-tree --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - The Edgee platform allows you to create **Organizations**, then create projects and invite users into each organization. This is useful for managing multiple projects, especially if you are working with different teams or clients. diff --git a/getting-started/prestashop.mdx b/proxy/getting-started/prestashop.mdx similarity index 87% rename from getting-started/prestashop.mdx rename to proxy/getting-started/prestashop.mdx index 01d79c1..f6ee6ba 100644 --- a/getting-started/prestashop.mdx +++ b/proxy/getting-started/prestashop.mdx @@ -4,10 +4,6 @@ description: Easily allow Prestashop to work with Edgee icon: /images/prestashop/prestashop-logo.svg --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - By default, PrestaShop does not capture the real visitor IP when requests pass through a proxy ([more info](https://github.com/PrestaShop/PrestaShop/issues/39190)). When Edgee sits in front of PrestaShop, it proxies all traffic, causing PrestaShop to record **Edgee’s IP** instead of the **actual client IP**, which can lead to account access problems. @@ -23,7 +19,7 @@ Integrating Edgee with PrestaShop requires **two steps**: 2. **Configure Edgee** → set up Edgee to proxy requests to your PrestaShop store. > **Important:** Installing the module **alone** does **not** complete the integration. -> You must also configure Edgee in your [project settings](/getting-started/project-settings). +> You must also configure Edgee in your [project settings](/proxy/getting-started/project-settings). --- @@ -48,5 +44,5 @@ This module ensures PrestaShop reads the **real visitor IP** from Edgee’s forw ## **Step 2 — Configure Edgee** After installing the module, configure Edgee in front of your PrestaShop store. -Follow the setup instructions [here](/getting-started/project-settings). +Follow the setup instructions [here](/proxy/getting-started/project-settings). diff --git a/getting-started/project-settings.mdx b/proxy/getting-started/project-settings.mdx similarity index 92% rename from getting-started/project-settings.mdx rename to proxy/getting-started/project-settings.mdx index fb199ac..7bb0e61 100644 --- a/getting-started/project-settings.mdx +++ b/proxy/getting-started/project-settings.mdx @@ -1,13 +1,9 @@ --- title: Project Settings description: Create and manage a project in Edgee. -icon: gear +icon: settings --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - An Edgee project is an edge computing application, that operates across all our [available edge locations](/introduction/network-map). @@ -92,7 +88,7 @@ Let's set up your first routing rule: /> Beneath the address field, you find an accordion for advanced routing options. -For detailed guidance on all available routing options and advanced rules, please visit our [routing rules documentation](/getting-started/routing). +For detailed guidance on all available routing options and advanced rules, please visit our [routing rules documentation](/proxy/getting-started/routing). ### Step 3: Project propagation @@ -120,7 +116,7 @@ Use this domain to test and ensure your project is functioning as expected. Routing settings are used to specify how Edgee should handle routing for your project. To create custom routes, navigate to the **Settings** panel in your project dashboard and select **Routing**. -To know more about how to set up new rules, you can read the [routing documentation](/getting-started/routing). +To know more about how to set up new rules, you can read the [routing documentation](/proxy/getting-started/routing). #### Adding Your Own Domain _(optional)_ @@ -128,9 +124,9 @@ To know more about how to set up new rules, you can read the [routing documentat You can associate multiple domains to your project and Edgee will take care of generating certificates and handling the renewal process. To add or edit domains, navigate to the **Domains** card in your project dashboard. -To know more about how to set up a domain, you can read the [domains documentation](/getting-started/domains). +To know more about how to set up a domain, you can read the [domains documentation](/proxy/getting-started/domains). #### Integrate the Edgee SDK -Once your domain is set up, the final step is to [integrate the Edgee SDK](/getting-started/sdk) into your website. +Once your domain is set up, the final step is to [integrate the Edgee SDK](/proxy/getting-started/sdk) into your website. diff --git a/getting-started/react-native-sdk.mdx b/proxy/getting-started/react-native-sdk.mdx similarity index 96% rename from getting-started/react-native-sdk.mdx rename to proxy/getting-started/react-native-sdk.mdx index 1ac8126..f651c3f 100644 --- a/getting-started/react-native-sdk.mdx +++ b/proxy/getting-started/react-native-sdk.mdx @@ -4,11 +4,6 @@ description: Integrate Edgee with a React Native application. icon: code --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - - For React Native applications, we provide a comprehensive SDK that enables seamless data collection with rich native context. This SDK automatically collects 30+ device and app data points while maintaining privacy compliance and optimal performance. ## Features @@ -382,6 +377,6 @@ import type { After integrating the React Native SDK, you're ready to start using Edgee's services. -In the [Services section](/services/overview), you'll find comprehensive guides on activating and customizing features such as advanced analytics, A/B testing, security, and more, ensuring your mobile application not only performs efficiently but also delivers a superior user experience. +In the [Services section](/proxy/services/overview), you'll find comprehensive guides on activating and customizing features such as advanced analytics, A/B testing, security, and more, ensuring your mobile application not only performs efficiently but also delivers a superior user experience. For more details about the React Native SDK, visit the [react-native-edgee repository](https://github.com/edgee-cloud/react-native-edgee). diff --git a/getting-started/react-sdk.mdx b/proxy/getting-started/react-sdk.mdx similarity index 94% rename from getting-started/react-sdk.mdx rename to proxy/getting-started/react-sdk.mdx index 0dadc0e..753e472 100644 --- a/getting-started/react-sdk.mdx +++ b/proxy/getting-started/react-sdk.mdx @@ -4,10 +4,6 @@ description: Manually integrate the Edgee SDK in a React app. icon: react --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - For applications built with React, we provide a dedicated library to simplify the integration of our SDK. This library ensures that Edgee's services are seamlessly integrated and that page views are tracked accurately during single-page navigations. @@ -134,5 +130,5 @@ For more details about the Edgee SDK, visit the [React-Edgee repository](https:/ After integrating the Edgee SDK, you're ready to start using Edgee's services. -In the next [page](/services/overview), you'll find comprehensive guides on activating and customizing features such as advanced analytics, +In the next [page](/proxy/services/overview), you'll find comprehensive guides on activating and customizing features such as advanced analytics, A/B testing, security, and more, ensuring your web application not only performs efficiently but also delivers a superior user experience. diff --git a/getting-started/redirects.mdx b/proxy/getting-started/redirects.mdx similarity index 95% rename from getting-started/redirects.mdx rename to proxy/getting-started/redirects.mdx index 58e53dd..2da3b4b 100644 --- a/getting-started/redirects.mdx +++ b/proxy/getting-started/redirects.mdx @@ -1,13 +1,9 @@ --- title: Redirects description: How to configure HTTP redirects for your Edgee project -icon: swap +icon: trending-up-down --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Redirects allows you to route your traffic from one URL to another, using HTTP status code such as `302 Found` for temporary redirects. This can be useful when you want to redirect users from an old URL to a new one, for example during a website migration or replatforming. diff --git a/getting-started/routing.mdx b/proxy/getting-started/routing.mdx similarity index 96% rename from getting-started/routing.mdx rename to proxy/getting-started/routing.mdx index 30a29ef..2ad2991 100644 --- a/getting-started/routing.mdx +++ b/proxy/getting-started/routing.mdx @@ -1,14 +1,10 @@ --- title: Routing rules description: How to configure custom routing rules for your Edgee project -icon: diamond-turn-right +icon: milestone --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - -Nice! Your project is [correctly configured](/getting-started/project-settings/) and you're ready to customize its routing rules. +Nice! Your project is [correctly configured](/proxy/getting-started/project-settings/) and you're ready to customize its routing rules. That means creating new **backends** and new **routes** that drive traffic to your backends. Initially, no routes are configured and all traffic is forwarded to the default backend. diff --git a/getting-started/sdk.mdx b/proxy/getting-started/sdk.mdx similarity index 75% rename from getting-started/sdk.mdx rename to proxy/getting-started/sdk.mdx index 072a5f1..f972cae 100644 --- a/getting-started/sdk.mdx +++ b/proxy/getting-started/sdk.mdx @@ -3,9 +3,6 @@ title: Choose your SDK description: Learn how to integrate the Edgee SDK to interact with Edgee services. icon: code --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - Getting up and runing with the Edgee SDK only takes a few minutes. @@ -50,23 +47,23 @@ We provide SDKs for different frameworks and libraries. Choose the one that fits your project: - + Add the JavaScript SDK to your HTML document to get Edgee up and running. - + Add the Shopify Web Pixel SDK to your Shopify store to get Edgee up and running. - + Use the React component to inject the Edgee SDK into a React application. - + Full-featured SDK for React Native apps with native context and offline support. - + Explore all available mobile SDKs for iOS, Android, and cross-platform development. @@ -77,17 +74,13 @@ Choose the one that fits your project: The Edgee SDK also supports autocapture, which is a feature that automatically captures events from your application. To enable autocapture, you need to enable the feature in your project settings. -Don't hesitate to check the [Autocapture documentation](/services/data-collection/autocapture) for more information. +Don't hesitate to check the [Autocapture documentation](/proxy/services/data-collection/autocapture) for more information. ### Good to know: Testing Edgee locally -To test Edgee locally, you have two options: - -1. Integrate the SDK of your project in your local environment and... that's it! With this simple step, the SDK will run only client-side, +To test Edgee locally, you jusr have to integrate the SDK of your project in your local environment and... that's it! With this simple step, the SDK will run only client-side, so you won't benefit from Edgee's edge processing capabilities. But it's a good way to test your application's behavior with the SDK. -2. Integrate the SDK **AND** install Edgee open-source proxy on your local machine. This way, you can test the full capabilities of Edgee, including edge processing. -To do this, follow the instructions in the [Edgee open-source repository](/open-source/overview) diff --git a/getting-started/shopify-sdk.mdx b/proxy/getting-started/shopify-sdk.mdx similarity index 97% rename from getting-started/shopify-sdk.mdx rename to proxy/getting-started/shopify-sdk.mdx index 3232f87..a3e2e15 100644 --- a/getting-started/shopify-sdk.mdx +++ b/proxy/getting-started/shopify-sdk.mdx @@ -4,10 +4,6 @@ description: Manually integrate the Shopify Web Pixel SDK in a Shopify store. icon: shopify --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - The Edgee Shopify Web Pixel SDK is a specialized version of the Edgee SDK designed to work within Shopify's Web Pixel sandbox environment. It automatically captures important e-commerce events like page views, product interactions, cart actions, checkout steps, and search queries. diff --git a/getting-started/sso.mdx b/proxy/getting-started/sso.mdx similarity index 97% rename from getting-started/sso.mdx rename to proxy/getting-started/sso.mdx index 3f9b8f6..c9834b0 100644 --- a/getting-started/sso.mdx +++ b/proxy/getting-started/sso.mdx @@ -4,10 +4,6 @@ description: How to set up Single Sign-On (SSO) for your Edgee organization usin icon: user-lock --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - As an admin of your Edgee organization, you can set up Single Sign-On (SSO) to allow users to log in using their existing credentials from your preferred OpenID Connect (OIDC) provider. diff --git a/getting-started/statistics.mdx b/proxy/getting-started/statistics.mdx similarity index 93% rename from getting-started/statistics.mdx rename to proxy/getting-started/statistics.mdx index 09d6376..a959029 100644 --- a/getting-started/statistics.mdx +++ b/proxy/getting-started/statistics.mdx @@ -1,13 +1,9 @@ --- title: Project statistics description: How to view your project's statistics -icon: chart-simple +icon: chart-no-axes-column --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - You can find your project's monthly statistics on the main project dashboard: diff --git a/getting-started/user-roles.mdx b/proxy/getting-started/user-roles.mdx similarity index 98% rename from getting-started/user-roles.mdx rename to proxy/getting-started/user-roles.mdx index 3c0d506..1edd95f 100644 --- a/getting-started/user-roles.mdx +++ b/proxy/getting-started/user-roles.mdx @@ -4,10 +4,6 @@ description: "How to manage your Edgee organization and user roles." icon: "users" --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Edgee Organizations allow you to manage users and their roles to collaborate on projects. By default, when you create a new organization, you are the only user with the **Admin** role. diff --git a/getting-started/vercel.mdx b/proxy/getting-started/vercel.mdx similarity index 95% rename from getting-started/vercel.mdx rename to proxy/getting-started/vercel.mdx index fba4b21..648e14b 100644 --- a/getting-started/vercel.mdx +++ b/proxy/getting-started/vercel.mdx @@ -4,10 +4,6 @@ description: Implementing Edgee in front of Vercel for better performance and SE icon: /images/vercel/vercel-icon-light.svg --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Edgee can act as a proxy in front of your Vercel project to **improve performance**, **enhance security**, and **simplify integrations**. This setup ensures all traffic flows through Edgee first, while Vercel continues to serve your content. diff --git a/getting-started/wpengine.mdx b/proxy/getting-started/wpengine.mdx similarity index 90% rename from getting-started/wpengine.mdx rename to proxy/getting-started/wpengine.mdx index 139047f..d4f5dc1 100644 --- a/getting-started/wpengine.mdx +++ b/proxy/getting-started/wpengine.mdx @@ -4,10 +4,6 @@ description: Implementing Edgee in front of WP Engine for better performance, fl icon: /images/wpengine/wpengine.svg --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Edgee can act as a proxy in front of your WP Engine site to **improve performance**, **enhance security**, and **simplify integrations**. @@ -25,7 +21,7 @@ Integrating Edgee with WP Engine involves two main steps: ### Step 1 — Connect Your Domain to Edgee -See [Custom Domains](/getting-started/domains) for detailed instructions on configuring domains with Edgee. +See [Custom Domains](/proxy/getting-started/domains) for detailed instructions on configuring domains with Edgee. 1. Log in to your **Edgee** dashboard. 2. Go to **Project Settings → Routing**. diff --git a/proxy/overview.mdx b/proxy/overview.mdx new file mode 100644 index 0000000..c557441 --- /dev/null +++ b/proxy/overview.mdx @@ -0,0 +1,59 @@ +--- +title: Edgee Proxy Overview +description: Edgee Proxy is a platform that allows you to deploy services at the edge and act as an app store for edge computing platforms. +icon: globe +--- + +Edgee Proxy is designed to transform how workloads and data are +processed across the internet. + +Edgee Proxy empowers developers to use, build and deploy **wasm components** operating at the edge. +This approach harnesses the potential of edge computing, enabling workloads to run closer to users than ever before. + +Our proxy is cross-platform, whether your application is hosted on **AWS**, **Vercel**, **Netlify**, or any other cloud provider, +whether your application is written in **Javascript**, **Ruby**, **PHP**, **Python**, or any other language, +you can enhance it with Edgee Proxy. + +By minimizing the distance data has to travel, Edgee Proxy significantly **reduces latency**, boosts **performance**, and +ensures greater **privacy** and **compliance** with data protection regulations. + +## Bye bye greedy SDKs - Hello Components! + +Have you ever hesitated to install a client-side SDK due to concerns about stability, performance, or data privacy? **Edgee is here to change the game!** + + + + +- **Our Mission:** We are pioneering a new ecosystem where traditional client-side libraries become secure components that operate at the edge network layer. We use the [WebAssembly Component Model](https://component-model.bytecodealliance.org/) to redefine how +technologies like Google Analytics, Amplitude, Segment, and AB Tasty are integrated into your applications. + +- **Transforming SDKs into Components:** With Edgee, every SDK becomes a 'Component' that executes at the edge, rather than on your user’s device. +This shift not only enhances performance but also ensures compliance and privacy by design. + +- **Commitment to Excellence:** We are dedicated to upholding the highest standards of performance, privacy, and compliance. +With Edgee, each interaction is processed legally, securely, and in real time. + +- **Benefits of Moving to the Edge:** By relocating intensive and sensitive tasks from browsers and mobile apps to the edge network, +Edgee leverages distributed processing power. This transition results in faster execution, reduced network congestion, and enhanced application performance. + +Edgee is more than just a platform; it represents a paradigm shift in web technology and data processing. Welcome to the cutting edge! + +## What you can achieve with Edgee: + + + + Integrate analytics third party solutions at the edge, and collect 100% of the data, 100% legal, 100% real-time. + + + + Strengthen your security posture by implementing edge-native security measures. + + + + Stay tuned, more services are coming soon! + + + +Remember: you can do all of this without compromising on performance, security, or compliance. + Simply install Edgee as a proxy in your existing infrastructure, or integrate our managed service. + Then you can start using the [Edgee SDK](/getting-started/sdk). diff --git a/introduction/privacy.mdx b/proxy/privacy.mdx similarity index 98% rename from introduction/privacy.mdx rename to proxy/privacy.mdx index cec74dd..fff9056 100644 --- a/introduction/privacy.mdx +++ b/proxy/privacy.mdx @@ -1,13 +1,9 @@ --- title: Privacy -description: Learn more about Edgee's Privacy and Data Anonymization +description: Learn more about Edgee Proxy's Privacy and Data Anonymization icon: user --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Privacy and data protection are essential in today's digital world. At Edgee, we take user privacy seriously, and have built strong safeguards to respect users' consent and protect their data, while enabling our customers to fortify their legal position. @@ -150,4 +146,4 @@ Feel free to [contact us](https://www.edgee.cloud/contact) to get a copy of the However, legal interpretations, enforcement practices, and regulatory thresholds may vary across jurisdictions and industries. We strongly encourage each customer to assess their specific legal obligations and risk posture, and to select the user identification mode, cookieless or cookie-based, that best aligns with their compliance strategy and consent requirements. - + \ No newline at end of file diff --git a/services/consent/overview.mdx b/proxy/services/consent/overview.mdx similarity index 85% rename from services/consent/overview.mdx rename to proxy/services/consent/overview.mdx index 2f680a4..8a1d98b 100644 --- a/services/consent/overview.mdx +++ b/proxy/services/consent/overview.mdx @@ -4,10 +4,6 @@ description: How to set user consent status with Edgee icon: check --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Setting user consent status is a fundamental aspect of Edgee's privacy-first approach. Our [privacy framework](/introduction/privacy) is built around respecting user consent, which directly influences how we handle user identification and data anonymization. @@ -39,10 +35,10 @@ edgee.consent("granted") ### 2. Consent Mapping Components For customers who already have a Consent Management Platform (CMP) in place, Edgee provides Consent Mapping Components that integrate directly with -popular CMP solutions ([Axeptio](/components/consent-management/axeptio-consent-mapping), -[Didomi](/components/consent-management/didomi-consent-mapping), -[OneTrust](/components/consent-management/onetrust-consent-mapping), -[CookieYes](/components/consent-management/cookieyes-consent-mapping)). +popular CMP solutions ([Axeptio](/proxy/components/consent-management/axeptio-consent-mapping), +[Didomi](/proxy/components/consent-management/didomi-consent-mapping), +[OneTrust](/proxy/components/consent-management/onetrust-consent-mapping), +[CookieYes](/proxy/components/consent-management/cookieyes-consent-mapping)). diff --git a/services/consent/status.mdx b/proxy/services/consent/status.mdx similarity index 96% rename from services/consent/status.mdx rename to proxy/services/consent/status.mdx index 53d23cc..b86d25d 100644 --- a/services/consent/status.mdx +++ b/proxy/services/consent/status.mdx @@ -1,13 +1,9 @@ --- title: Consent Status description: Detailed **Edgee Consent Status** guide -icon: signs-post +icon: milestone --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - After setting up your preferred consent management method (either through the Edgee SDK or Consent Mapping Components), you need to understand how Edgee interprets and applies different consent statuses. This guide explains the three possible consent statuses and how they affect data collection and anonymization in your components. diff --git a/services/data-collection/autocapture.mdx b/proxy/services/data-collection/autocapture.mdx similarity index 97% rename from services/data-collection/autocapture.mdx rename to proxy/services/data-collection/autocapture.mdx index c40951b..716853e 100644 --- a/services/data-collection/autocapture.mdx +++ b/proxy/services/data-collection/autocapture.mdx @@ -4,10 +4,6 @@ description: Automatically capture events from your website. icon: wand-sparkles --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - Autocapture allows you to automatically collect various user interactions and events from your website without writing any custom code. By enabling different autocapture settings, you can gather valuable analytics data with minimal setup. @@ -35,7 +31,7 @@ Specifically designed for Single Page Applications (SPAs), this feature automati - Browser back/forward navigation (`popstate` events) -You don't need to enable this feature if you're manually integrating the [Edgee React SDK](/getting-started/react-sdk). +You don't need to enable this feature if you're manually integrating the [Edgee React SDK](/proxy/getting-started/react-sdk). #### Engagement Tracking diff --git a/services/data-collection/catalog.mdx b/proxy/services/data-collection/catalog.mdx similarity index 80% rename from services/data-collection/catalog.mdx rename to proxy/services/data-collection/catalog.mdx index 392784c..3b8ff2d 100644 --- a/services/data-collection/catalog.mdx +++ b/proxy/services/data-collection/catalog.mdx @@ -4,10 +4,8 @@ description: Move your analytics to the edge and finally get 100% of the data to icon: list --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; import DataCollectionCatalog from '/snippets/data-collection-catalog.mdx'; - diff --git a/services/data-collection/data-layer.mdx b/proxy/services/data-collection/data-layer.mdx similarity index 97% rename from services/data-collection/data-layer.mdx rename to proxy/services/data-collection/data-layer.mdx index 099f35d..b07f968 100644 --- a/services/data-collection/data-layer.mdx +++ b/proxy/services/data-collection/data-layer.mdx @@ -1,13 +1,9 @@ --- title: Data Layer configuration description: Detailed **Edgee Data Layer** guide -icon: gear +icon: settings --- -import EdgeeSdk from '/snippets/edgee-sdk.mdx'; - - - The **Data Layer** is a powerful feature, providing you with fine-grained control over the data sent to various analytics. This guide will walk you through the essentials of crafting a **Data Layer** to enhance your data collection strategy. @@ -19,7 +15,7 @@ to collect, how to process it, and where to send it. ## Inserting a Data Layer in your application -The way you insert a **Data Layer** in your application depends on the [Edgee SDK](/getting-started/sdk) you're using. +The way you insert a **Data Layer** in your application depends on the [Edgee SDK](/proxy/getting-started/sdk) you're using. For HTML applications you can manually insert the **Data Layer** within a ` diff --git a/snippets/identity-catalog.mdx b/snippets/identity-catalog.mdx index f538e2d..fa23e0d 100644 --- a/snippets/identity-catalog.mdx +++ b/snippets/identity-catalog.mdx @@ -5,10 +5,10 @@ These components ensure durable, compliant tracking even in the toughest environ {/* Unique ID */} - + {/* Native Cookies */} - - - + + + \ No newline at end of file diff --git a/snippets/js-gateway-catalog.mdx b/snippets/js-gateway-catalog.mdx index 293f518..cbad840 100644 --- a/snippets/js-gateway-catalog.mdx +++ b/snippets/js-gateway-catalog.mdx @@ -11,12 +11,12 @@ They're particularly effective for platforms like Meta, Google, and Piano that s {/* Analytics */}
- +
- +
{/* Server Side Tagging */} - - + +
\ No newline at end of file diff --git a/snippets/security-catalog.mdx b/snippets/security-catalog.mdx index e7f3128..835ad78 100644 --- a/snippets/security-catalog.mdx +++ b/snippets/security-catalog.mdx @@ -3,7 +3,7 @@ protect your applications from a wide range of threats, ensuring your users' dat {/* Bot Protection */} - } /> + {/* IP Blocking */} - } /> + diff --git a/snippets/stitching-catalog.mdx b/snippets/stitching-catalog.mdx index 153c0fc..513529a 100644 --- a/snippets/stitching-catalog.mdx +++ b/snippets/stitching-catalog.mdx @@ -6,5 +6,5 @@ By handling content changes at the edge, Stitching components boost web performa blocked by browsers or ad blockers. This makes them particularly effective for use cases like A/B testing, where seamless content variations are essential. - +