diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1aaaabd..e38d8d0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,22 +16,47 @@ permissions: jobs: build: runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x] # Build on Node.js 18 + env: GITHUB_PAGES_ENV: true + steps: - name: Checkout uses: actions/checkout@v2 - - name: Setup Node.js - uses: actions/setup-node@v3 + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + - name: Setup pnpm + uses: pnpm/action-setup@v2.0.1 + with: + version: latest + + - name: Get pnpm Store Directory + id: pnpm-cache + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v3 + name: Setup pnpm Cache with: - node-version: 16.x + path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- - name: Install dependencies - run: yarn install + run: pnpm install - name: Build - run: yarn build + run: pnpm build - name: Upload artifact uses: actions/upload-pages-artifact@v1.0.8 diff --git a/docs/core-concepts/_category_.json b/docs/core-concepts/_category_.json index 3dc7cb8..0dd6967 100644 --- a/docs/core-concepts/_category_.json +++ b/docs/core-concepts/_category_.json @@ -3,6 +3,6 @@ "position": 4, "link": { "type": "generated-index", - "description": "Getting Started with using Fleetbase" + "description": "This section is designed to provide you with a foundational understanding of the Fleetbase platform, covering key aspects of its architecture, how to install and configure the system, manage upgrades, and troubleshoot common issues." } } diff --git a/docs/core-concepts/contacts.md b/docs/core-concepts/contacts.md index 0dc66dd..f4bba00 100644 --- a/docs/core-concepts/contacts.md +++ b/docs/core-concepts/contacts.md @@ -3,3 +3,16 @@ title: Contacts sidebar_position: 5 slug: /core-concepts/contacts --- + +## Overview + +Contacts are personal entities within Fleetbase, defined to manage relationships with individuals who may have various roles relative to the organization’s operations. + +## Attributes + +- **Type**: Defines the role or connection of the contact, such as customer, associate, subcontractor, or facilitator. + +## Functionality + +- **Role Definition**: Each contact’s role within the organization or projects is clearly defined, allowing for targeted interactions and management. +- **Integration**: Contacts are easily integrated with other modules, such as orders or transactions, where personal oversight or interaction is required. \ No newline at end of file diff --git a/docs/core-concepts/drivers.md b/docs/core-concepts/drivers.md index e5f033d..4a6a258 100644 --- a/docs/core-concepts/drivers.md +++ b/docs/core-concepts/drivers.md @@ -3,3 +3,17 @@ title: Drivers sidebar_position: 6 slug: /core-concepts/drivers --- + +## Overview + +Drivers are specialized users within Fleetbase who are qualified and licensed to operate vehicles for order facilitation. + +## Key Information + +- **Qualifications**: Details about licensing and qualifications that authorize a driver to operate specific types of vehicles. +- **Assignment**: Drivers can be assigned to specific orders, linking them directly to the operational tasks. + +## Functionality + +- **Order Execution**: Critical for executing delivery and transportation orders within Fleetbase. +- **Tracking and Management**: Enables detailed tracking of driver assignments and performance. \ No newline at end of file diff --git a/docs/core-concepts/orders.md b/docs/core-concepts/orders.md index d4d8c83..149b8c0 100644 --- a/docs/core-concepts/orders.md +++ b/docs/core-concepts/orders.md @@ -3,3 +3,77 @@ title: Orders sidebar_position: 1 slug: /core-concepts/orders --- + +## Overview + +In Fleetbase, an Order represents a core resource that orchestrates the logistics and tracking of items from initiation to delivery. It encapsulates all details necessary to manage and track the movement of goods, including destinations, items (payload), configurations, and interactions with various system entities. + +## Structure of an Order + +### Destinations + +- **Pickup**: The starting point where items are collected. +- **Dropoff**: The endpoint where items are delivered. +- **Waypoints**: Intermediate stops included in the delivery route. + +### Payload + +- **Entities**: Represent the physical items being transported, such as containers, parcels, etc. + +### Additional Configuration + +- **Proof of Delivery (POD)**: Confirmation of delivery with evidence like signatures or photos. +- **Ad-hoc (Adhoc)**: Indicates that the order is available for immediate fulfillment within a specific vicinity, usually near the pickup location. +- **Dispatch**: Orders can be dispatched immediately upon creation unless scheduled for a later time. + +### Scheduling + +- **Scheduled Date**: Specifies the date and time an order is scheduled for dispatch. Upon reaching this scheduled time, the order will automatically be dispatched. + +### Assignments + +- **Driver Assigned**: Specifies the driver or delivery person assigned to the order. +- **Vehicle Assigned**: Details the specific vehicle used to complete the order. + +## Order Configurations + +Defines the workflow and rules governing the lifecycle of an order, ensuring operational consistency and efficiency. + +
+ +
+ +### Activities + +- **Defined Activities**: Steps or events in an order’s lifecycle, from pickup to delivery. +- **Logic and Events**: Control transitions between activities, with events triggered as activities change, facilitating system interactions. +Custom Fields and Entities +- **Custom Fields**: Additional data points attached to an order. For example, for a haulage order, a custom field could specify the vessel and its ETA for container pickup. +- **Custom Entities**: Template-based entities that standardize the creation of new orders, enhancing the system's adaptability. + +## Facilitator + +Orders may be managed or executed by a facilitator, an external partner or a subcontracted entity, which broadens the operational network and fulfillment capabilities. + +## Quoting System + +Fleetbase dynamically generates service quotes based on the specifics of the order and predefined service rates. + +### Service Rates + +- **Service Rate Definitions**: Configured in the console to guide cost calculations for various order types and scenarios. + +## Documentation and Communication + +- **Files and Documents**: Attach important documentation directly to an order, such as shipping labels and customs forms. +- **Comments**: Discussion threads attached to each order facilitate collaborative communication among stakeholders. + +## Tracking and Labels + +- **Tracking Number**: Generated upon order creation, enabling all parties to monitor the order's progress. +- **Shipping Labels**: Generated based on the order details and shipping requirements. + +## Key Events in Order Lifecycle +- **Created**: Marks the initiation of a new order. +- **Dispatched**: Indicates that the order has been sent out for delivery. +- **Completed**: Confirms the completion of the order and fulfillment of all conditions. \ No newline at end of file diff --git a/docs/core-concepts/places.md b/docs/core-concepts/places.md index bb0dad4..0ed1099 100644 --- a/docs/core-concepts/places.md +++ b/docs/core-concepts/places.md @@ -3,3 +3,18 @@ title: Places sidebar_position: 3 slug: /core-concepts/places --- + +## Overview + +Places are a foundational resource in Fleetbase, defining physical locations with detailed attributes for comprehensive geographic referencing. + +## Structure of an Place + +- **Name, Address Details**: Includes primary and secondary address lines, postal code, province/state, city, and country. +- **Geographical Coordinates**: Locations can be defined using MySQL POINT or GeoJSON formats. +- **Contact Information**: Places may include associated phone numbers. + +## Associations + +- **Contacts and Vendors**: Places can be linked to contacts or vendors, enhancing the utility of location data across various modules. +- **Module Integration**: Used by the inventory module to define warehouses and by the storefront module for store locations. \ No newline at end of file diff --git a/docs/core-concepts/transactions.md b/docs/core-concepts/transactions.md index 6cd1b24..88cad0e 100644 --- a/docs/core-concepts/transactions.md +++ b/docs/core-concepts/transactions.md @@ -3,3 +3,16 @@ title: Transactions sidebar_position: 2 slug: /core-concepts/transactions --- + +## Overview + +Transactions are a core resource in Fleetbase that handle financial data related to operations where money is involved. They are integral in capturing and managing the financial aspects of service operations. + +## Structure of an Transaction + +- **Transaction Items**: Detail each financial entry related to a transaction, such as subtotals for services rendered. + +## Key Features + +- **Comprehensive Tracking**: Transactions record detailed financial interactions, ensuring accurate accounting and financial management. +- **Integration**: Seamlessly integrates with orders to automatically generate financial records upon order processing. \ No newline at end of file diff --git a/docs/core-concepts/vehicles.md b/docs/core-concepts/vehicles.md new file mode 100644 index 0000000..ae5da06 --- /dev/null +++ b/docs/core-concepts/vehicles.md @@ -0,0 +1,19 @@ +--- +title: Vehicles +sidebar_position: 7 +slug: /core-concepts/vehicles +--- + +## Overview + +Vehicles are core resources in Fleetbase that describe the transport assets used to facilitate orders. + +## Attributes + +- **Type and Specifications**: Includes details such as vehicle type, capacity, and operational specifications. +- **Assignment**: Vehicles can be assigned to specific drivers and linked to particular orders. + +## Usage + +- **Logistical Operations**: Essential for carrying out physical movements and deliveries in the order fulfillment process. +- **Maintenance Tracking**: Can be used to track maintenance schedules, operational availability, and performance. \ No newline at end of file diff --git a/docs/core-concepts/vendors.md b/docs/core-concepts/vendors.md index b9fbfc6..231d686 100644 --- a/docs/core-concepts/vendors.md +++ b/docs/core-concepts/vendors.md @@ -3,3 +3,16 @@ title: Vendors sidebar_position: 4 slug: /core-concepts/vendors --- + +## Overview +Vendors represent business entities that an organization interacts with, ranging from suppliers to collaborative partners in Fleetbase. + +## Key Attributes + +- **Type**: The nature of the business or the role of the vendor within the operations can be specified through a type attribute. +- **Facilitation**: Vendors can act as facilitators for orders, playing a pivotal role in the supply chain. + +## Usage + +- **Business Relationships**: Defines and manages relationships with various business entities essential for operational success. +- **Order Management**: Vendors can be integrated into the order management process, providing services or goods necessary for order fulfillment. \ No newline at end of file diff --git a/docs/developers/api.md b/docs/developers/api.md index b2ee3db..725e3fa 100644 --- a/docs/developers/api.md +++ b/docs/developers/api.md @@ -2,6 +2,216 @@ title: Develop with API sidebar_position: 2 slug: /developers/api +toc_min_heading_level: 2 +toc_max_heading_level: 5 --- -# Integrating with Fleetbase API +# Developing with the Fleetbase API + +The Fleetbase API provides developers with extensive capabilities to integrate and interact with the Fleetbase operating system. This guide covers essential topics, including authentication, working within live and test environments, and making API requests according to RESTful conventions. + +You can find detailed API Reference and examples on our [Postman docs](https://documenter.getpostman.com/view/6866273/2s9YyvAfZh). + +## Authentication and API Keys + +The Fleetbase API uses API keys to authenticate requests. You can view and manage your API keys in the Fleetbase Developers Console. + +Test mode secret keys have the prefix `flb_test_` and live mode secret keys have the prefix `flb_live_`. Alternatively, you can use restricted API keys for granular permissions. + +Your API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth. Authentication to the API is performed via HTTP Basic Auth. Provide your API key as the basic auth username value. You do not need to provide a password. Or use your API key by setting it in the initial configuration of a Fleetbase SDK Client. The SDK will then automatically send this key in each request. + +All API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail. + +### Obtaining API Keys + +1. **Log In to Your Fleetbase Account:** Start by logging into your account on the Fleetbase console. +2. **Navigate to Developers:** From the Developers extension, click into API Keys section where you can manage your API keys. +3. **Generate New API Key:** Click on ‘New’ to create a new key. To specify whether you want a test or live environment key you should use the "View test data" toggle in the section header to enter the sandbox environment then create a new key. + +
+ +
+ +### Live vs. Test Environments + +- Live Environment Keys: These keys are prefixed with `flb_live_` and are used for operations that affect real data and real transactions. +- Test Environment Keys: Prefixed with `flb_test_`, these keys allow you to work in a sandbox environment where you can safely test applications without affecting real data. + +### Making Authenticated Request + +Fleetbase uses Basic Auth for authenticating request. To make a authenticated request you must add the `Authorization` header and your Fleetbase API key as a `Bearer` token. + +```plaintext +Authorization: Bearer flb_live_yourapikey +``` + +#### cURL Example + +```bash +curl --location --request GET 'https://api.fleetbase.io/v1' \ + --header 'Accept: application/json' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer flb_live_yourapikey' +``` + +Using the appropriate keys for your development stage ensures that testing does not interfere with your live operational data. + +## RESTful Conventions + +The Fleetbase API follows RESTful principles, enabling you to interact with resources such as orders, vehicles, and drivers through standard HTTP methods. + +### HTTP Methods + +- **GET:** Retrieve information about a resource or list of resources. +- **POST:** Create a new resource. +- **PUT/PATCH:** Update an existing resource. PATCH is typically used for partial updates, while PUT may require a complete resource representation. +- **DELETE:** Remove a resource. + +### Common API Request for Orders + +Here are some examples of using these methods with the Fleetbase API: + +#### GET: Get a list of Active Orders + +```bash +curl --location --request GET 'https://api.fleetbase.io/v1/orders?status=active' \ + --header 'Content-Type: application/json' \ + --header 'Accept: application/json' \ + --header 'Authorization: Bearer flb_live_yourapikey' +``` + +#### POST: Create an Order + +```bash +curl --location --request POST 'https://api.fleetbase.io/v1/orders' \ + --header 'Content-Type: application/json' \ + --header 'Accept: application/json' \ + --header 'Authorization: Bearer flb_live_yourapikey' \ + --data '{ + "pickup": "Singapore 018971", + "dropoff": "321 Orchard Rd, Singapore" + } + ' +``` + +#### PATCH: Dispatch an Order + +```bash +curl --location --request PATCH 'https://api.fleetbase.io/v1/orders/{orderId}/dispatch' \ + --header 'Content-Type: application/json' \ + --header 'Accept: application/json' \ + --header 'Authorization: Bearer flb_live_yourapikey' +``` + +#### PUT: Update an Order + +```bash +curl --location --request PUT 'https://api.fleetbase.io/v1/orders/{orderId}' \ + --header 'Content-Type: application/json' \ + --header 'Accept: application/json' \ + --header 'Authorization: Bearer flb_live_yourapikey' \ + --data '{ + "notes": "New order notes", + "scheduled_at": "2024-02-11 05:03:02" + } + ' +``` + +#### DELETE: Cancel an Order + +```bash +curl --location --request DELETE 'https://api.fleetbase.io/v1/orders/order_7JOwsfW' \ + --header 'Content-Type: application/json' \ + --header 'Accept: application/json' \ + --header 'Authorization: Bearer flb_live_yourapikey' +``` + +## Using the Fleetbase SDK + +Fleetbase provides an SDK to simplify interacting with the API from various programming environments. Currently Fleetbase ships two official SDK's - PHP, and Javascript. + +- [Fleetbase Javascript SDK](https://github.com/fleetbase/fleetbase-js) +- [Fleetbase PHP SDK](https://github.com/fleetbase/fleetbase-php) + +Currently there are no other unofficial SDK's available, but if you'd like to contribute or submit an SDK you can share it in our [Discord](https://discord.gg/V7RVWRQ2Wm) and we will update this page. + +### Using the Javascript SDK + +You can easily get started with developing in the node/javascript ecosystem by using our official Javascript SDK. + +1. **Install the Javascript SDK:** + You can use your prefered package manager such as yarn, bun, or pnpm. In this example we simply use npm. + +```bash +npm install @fleetbase/sdk +``` + +2. **Initialize Fleetbase:** + +```javascript +const fleetbase = new Fleetbase('< api key here >'); +``` + +3. **Using the SDK:** + In the below example, we will show you how to create an order. + +```javascript +const order = await fleetbase.orders.create({ + pickup: 'Singapore 018971', + dropoff: '321 Orchard Rd, Singapore', + entities: [ + { + destination: 0, + name: 'UltraHD 4K Smart TV', + description: '65-inch high-definition smart TV with vibrant colors and a sleek design.', + currency: 'SGD', + price: 800.0, + }, + ], +}); +``` + +### Using the PHP SDK + +You can easily get started with developing in the PHP ecosystem by using our official PHP SDK. + +1. **Install the PHP SDK:** + +```bash +composer require fleetbase/fleetbase-php +``` + +2. **Initialize Fleetbase:** + +```php +$fleetbase = new \Fleetbase\Sdk\Fleetbase('< api key here >'); +``` + +3. **Using the SDK:** + In the below example, we will show you how to create an order. + +```php +$order = $fleetbase->orders->create([ + 'pickup' => 'Singapore 018971', + 'dropoff' => '321 Orchard Rd, Singapore', + 'entities' => [ + [ + 'destination' => 0, + 'name' => 'UltraHD 4K Smart TV', + 'description' => '65-inch high-definition smart TV with vibrant colors and a sleek design.', + 'currency' => 'SGD', + 'price' => 800.00, + ], + ], +]); +``` + +## Common API Topics + +- **Rate Limiting:** Understand the API’s rate limits to ensure your application handles requests without interruption. +- **Error Handling:** Learn to effectively handle potential API errors and exceptions in your application code. +- **Security Best Practices:** Implement security measures such as HTTPS, keeping API keys secure, and validating API responses. + +## Conclusion + +This guide provides you with the foundational knowledge required to effectively use the Fleetbase API for developing logistics solutions. By adhering to RESTful conventions and using the Fleetbase SDK, you can enhance your applications and seamlessly integrate sophisticated logistics management functionalities. \ No newline at end of file diff --git a/docs/developers/introduction.md b/docs/developers/introduction.md index b81da49..8a3d533 100644 --- a/docs/developers/introduction.md +++ b/docs/developers/introduction.md @@ -1,6 +1,62 @@ --- +title: Introduction sidebar_position: 1 slug: /developers/introduction --- -# Introduction +# Developing with Fleetbase + +Welcome to the Fleetbase Developers section! Whether you're looking to integrate with Fleetbase, enhance its capabilities, or build custom solutions, this guide provides all the essential information you need to get started. Our goal is to empower developers with the tools and knowledge necessary to create robust, efficient, and innovative logistics solutions using Fleetbase. + +## What You Will Find in This Section + +This documentation is divided into several key areas, each designed to provide in-depth guidance on different aspects of developing with Fleetbase. Here’s what you can expect: + +### Developing with the Fleetbase API + +Learn how to interact directly with the Fleetbase API to manipulate and retrieve data, automate processes, and integrate Fleetbase’s core functionalities into your own applications. This section will cover: + +- Authentication and security best practices. +- Detailed descriptions of API endpoints. +- Practical examples of API requests and responses. +- Utilizing the Fleetbase SDK's. +- Tips on optimizing API usage for your applications. + +### Developing with Fleetbase Websockets + +Real-time data flow is crucial in logistics. This part of the documentation delves into how to use Fleetbase’s websocket channels to: + +- Establish persistent, real-time communications between your applications and Fleetbase. +- Subscribe to updates on order status, location tracking, and more. +- Handle realtime events efficiently within your application. + +### Developing with Fleetbase Webhooks + +Webhooks provide a powerful way to react to events within Fleetbase. In this section, you’ll learn: + +- How to set up webhooks to listen for specific events like order creation, updates, or custom triggers. +- Best practices for securing and managing incoming webhook data. +- Examples of processing webhook data to trigger workflows in external systems. + +### Building Extensions for Fleetbase + +Extend the functionality of Fleetbase by building custom extensions. This section provides a framework for: + +- Understanding the extension architecture within Fleetbase. +- Step-by-step guides on developing, testing, and deploying your own extensions. +- Examples of common extensions that enhance the Fleetbase ecosystem. + +### Building User Interfaces Using the Fleetbase UI Library + +Fleetbase comes with a UI library designed to speed up front-end development. This part of the guide will cover: + +- How to leverage the Fleetbase UI library to build consistent and effective user interfaces. +- Customization of UI components to fit your brand and style guidelines. +- Integration techniques for seamless user experience across your digital platforms. + +## Get Started + +Each section of our developer documentation is structured to provide comprehensive tutorials, clear examples, and actionable advice. Whether you are a new developer just starting with Fleetbase or an experienced programmer looking to extend its capabilities, these resources are designed to support your development journey from start to finish. + +## Conclusion +Dive into the specific sections that match your development needs, and begin crafting applications and solutions that leverage the full power of Fleetbase. We are excited to see what you will build and how you will use these tools to transform the logistics landscape. diff --git a/docs/getting-started/_category_.json b/docs/getting-started/_category_.json index 9b23737..0902e57 100644 --- a/docs/getting-started/_category_.json +++ b/docs/getting-started/_category_.json @@ -1,8 +1,10 @@ { "label": "Getting Started", "position": 3, + "collapsed": false, "link": { "type": "generated-index", - "description": "Getting Started with using Fleetbase" + "description": "Getting Started with using Fleetbase", + "slug": "/getting-started" } } diff --git a/docs/getting-started/architecture.md b/docs/getting-started/architecture.md index 9484b0b..f4628f5 100644 --- a/docs/getting-started/architecture.md +++ b/docs/getting-started/architecture.md @@ -2,4 +2,43 @@ title: Architecture sidebar_position: 2 slug: /getting-started/architecture ---- \ No newline at end of file +--- + +## Overview + +This document provides an overview of the Fleetbase platform's architecture. The Fleetbase architecture is designed to be robust, scalable, and efficient, supporting a variety of logistics operations through its modular components. The architecture diagram illustrates the interaction between the different components of the system. + +
+ +
+ +### Fleetbase Console + +The Console serves as the primary user interface for Fleetbase, providing a comprehensive dashboard for managing and monitoring all logistics operations. Built using Ember.js, a productive, battle-tested JavaScript framework, the Console is designed for building modern web applications with efficiency and scalability in mind. + +#### Key Technologies: + +- *Ember.js:* Utilizes Ember.js for building ambitious web applications. Ember's convention-over-configuration approach simplifies development and enhances productivity. +- *Ember Engines:* Implements ember-engines to achieve a modular architecture. This allows for better code organization, lazy loading of parts of the application, and improved performance by isolating specific functionalities in standalone, routable engines. +- *Fleetbase Extensions*: Extensions in Fleetbase are implemented as ember-engines, enabling them to run in isolation from the core application. This isolation enhances stability and security by ensuring that extensions do not interfere with the core functionality. Despite running independently, these extensions use a centralized service and UI library, which allows them to integrate seamlessly with the main Fleetbase platform. This architecture supports scalability by enabling the addition of new features without impacting the existing system structure. +- *Fleetbase UI:* Fleetbase publishes a dedicated UI library `@fleetbase/ember-ui`, which houses a suite of pre-designed UI components. These components are tailored for building user interfaces that are consistent with the Fleetbase ecosystem. The UI library enables developers to maintain a uniform look and feel across different extensions and parts of the Fleetbase platform, ensuring that all user interfaces are not only functional but also visually integrated. + +#### Key Functions: + +- *Modular Architecture:* By leveraging ember-engines, the Fleetbase Console ensures that different aspects of the application can be developed, maintained, and scaled independently. + +### Fleetbase API + +The Fleetbase API serves as the backbone of the Fleetbase platform, handling all interactions between the various components and external integrations. Designed for high performance and reliability, the API facilitates robust data handling, real-time communications, and efficient task management. + +#### Key Technologies: + +- *Laravel:* The API is built using Laravel, a powerful and expressive PHP framework known for its elegant syntax and robust features. Laravel provides a comprehensive set of tools that make it ideal for building complex applications with demanding back-end requirements. +- *Octane on Caddy Server:* Utilizes Laravel Octane to supercharge the performance of the API by serving it on a Caddy server. This configuration enhances response times and concurrency, enabling the API to handle high loads efficiently. + +#### Key Functions: + +- *REST API:* Offers a comprehensive and consumable REST API that facilitates easy integration with other systems, supporting a wide range of operations from data management to real-time updates. +- *Webhooks:* Provides robust support for webhooks, allowing external systems to receive real-time notifications about events within the Fleetbase platform, enhancing integration capabilities. +- *Real-Time:* Manages real-time data flow throughout the platform, ensuring that all components are synchronized and updates are delivered promptly. +- *Task Management:* Effectively handles asynchronous tasks and queuing, leveraging advanced job processing capabilities to maintain high performance and responsiveness across operations. \ No newline at end of file diff --git a/docs/getting-started/configuration.md b/docs/getting-started/configuration.md index f0d9fb8..11c0232 100644 --- a/docs/getting-started/configuration.md +++ b/docs/getting-started/configuration.md @@ -2,4 +2,145 @@ title: Configuration sidebar_position: 4 slug: /getting-started/configuration ---- \ No newline at end of file +--- + +## Environment Variables + +Environment variables are key-value pairs that influence the behavior of running processes in an application. For Fleetbase, they are crucial for setting up database connections, external service integrations, and operational parameters. + +### How to Set Environment Variables + +In Docker environments, environment variables are usually set in the `docker-compose.yml` file or a separate .env file that Docker Compose can reference. When setting up from source, you may configure them directly in a .env file in the application's root directory. If you're modifying or adding environment variables to a docker setup we suggest you use a `docker-compose.override.yml` so upgrades will be seamless. + +#### Example for Docker (docker-compose.override.yml): + +This file can be used to overwrite default environment variables which are set in the `docker-compose.yml` file which ships with Fleetbase. + +```yaml +services: + application: + environment: + - DATABASE_URL=mysql://user:password@db:3306/fleetbase + - REDIS_URL=redis://redis:6379 +``` + +#### Example for Source (.env): + +```plaintext +DATABASE_URL=mysql://user:password@localhost:3306/fleetbase +REDIS_URL=redis://localhost:6379 +``` + +### Environment Variables for Fleetbase + +- `APP_URL`: The URL where your Fleetbase API is accessible. For development, you might use localhost. +- `CONSOLE_HOST`: The URL for the Fleetbase console. +- `DATABASE_URL`: The full database connection URL, including username, password, host, and database name. +- `STOREFRONT_DB_CONNECTION`: The database connection name for the storefront. +- `QUEUE_CONNECTION`: Defines the queue backend, which in this case is Redis. +- `CACHE_DRIVER`: Specifies Redis as the caching backend. +- `CACHE_PATH`: The file path for storing cache files, useful if file-based caching is used. +- `CACHE_URL`: The URL for the Redis cache server. +- `REDIS_URL`: The URL for the Redis server used for caching and queues. +- `SESSION_DOMAIN`: The domain under which sessions are valid. +- `BROADCAST_DRIVER`: The technology used for broadcasting real-time messages. +- `MAIL_FROM_NAME`: Default name used in emails sent by the system. +- `APP_NAME`: The name of your application. +- `LOG_CHANNEL`: Specifies how application logging is handled. +- `MODEL_CACHE_ENABLED`: Toggle to enable/disable model caching. +- `RESPONSE_CACHE_ENABLED`: Toggle to enable/disable response caching. +- `RESPONSE_CACHE_DRIVER`: Specifies the caching driver for responses. +- `MAIL_MAILER`: Defines the mail backend, for example: Sendgrid, SES (Amazon Simple Email Service), Postmark. +- `IPINFO_API_KEY`: API key for IPInfo service, if used. +- `GOOGLE_MAPS_API_KEY`: API key for Google Maps services. +- `GOOGLE_MAPS_LOCALE`: Locale setting for Google Maps. +- `TWILIO_SID`: Account SID for Twilio, used for sending SMS. +- `TWILIO_TOKEN`: Authentication token for Twilio. +- `TWILIO_FROM`: The phone number from which Twilio SMS are sent. +- `SENTRY_LARAVEL_DSN`: The DSN for Sentry, used for error tracking. +- `OSRM_HOST`: The OSRM server to use, defaults to https://bundle.routing.fleetbase.io + +## Setting Up SSL + +Secure Sockets Layer (SSL) is crucial for protecting your application's data in transit. Below are steps for setting up SSL in both Docker-based deployments and traditional server environments from source. + +### SSL with Docker + +1. Obtain an SSL Certificate: + +Use Let’s Encrypt or a similar CA to obtain an SSL certificate. You can automate this with certbot: + +```bash +sudo apt-get update +sudo apt-get install certbot +sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com +``` + +2. Configure Docker to Use SSL: + +Modify your `docker-compose.override.yml` to mount the SSL certificates and configure your web server to use them: + +```yaml +services: + console: + volumes: + - /etc/letsencrypt/live/yourdomain.com/fullchain.pem:/etc/ssl/certs/fullchain.pem + - /etc/letsencrypt/live/yourdomain.com/privkey.pem:/etc/ssl/private/privkey.pem + environment: + - SSL_CERTIFICATE=/etc/ssl/certs/fullchain.pem + - SSL_CERTIFICATE_KEY=/etc/ssl/private/privkey.pem +``` + +3. Update Nginx Configuration: + +Ensure your Nginx configuration within Docker utilizes these SSL certificates for HTTPS connections. You will need to modify the `console/nginx.conf` file and rebuild the console container. + +### SSL from Source + +1. Obtain SSL Certificates: +Similar to the Docker method, use certbot or manually place your SSL certificates in a secure directory on your server. + +2. Configure Web Server: +Edit your web server’s configuration to use SSL: + +For Nginx: + +```nginx +server { + listen 443 ssl; + server_name yourdomain.com www.yourdomain.com; + + ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; + + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ /index.html =404; + } +} +``` + +3. Redirect HTTP to HTTPS: + +Optionally, configure your server to redirect all HTTP traffic to HTTPS to ensure secure connections: + +For Nginx: + +```nginx +server { + listen 443 ssl; + server_name yourdomain.com www.yourdomain.com; + return 301 https://$host$request_uri; + + ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; + + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ /index.html =404; + } +} +``` + +## Conclusion +This configuration guide provides a comprehensive overview of setting up and securing Fleetbase in a production environment, covering essential environment variables and SSL configuration. Properly using this guide will help ensure that your Fleetbase installation is secure, reliable, and ready for production use. \ No newline at end of file diff --git a/docs/getting-started/install.md b/docs/getting-started/install.md deleted file mode 100644 index 08810c5..0000000 --- a/docs/getting-started/install.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Install Fleetbase -sidebar_position: 3 -slug: /getting-started/install ---- \ No newline at end of file diff --git a/docs/getting-started/install/_category_.json b/docs/getting-started/install/_category_.json new file mode 100644 index 0000000..360cfdb --- /dev/null +++ b/docs/getting-started/install/_category_.json @@ -0,0 +1,11 @@ +{ + "label": "Install Fleetbase", + "position": 3, + "collapsed": false, + "link": { + "type": "generated-index", + "title": "Install Fleetbase", + "description": "This guide will help you to install and setup Fleetbase for your desired setup and environment.", + "slug": "/getting-started/install" + } +} diff --git a/docs/getting-started/install/install-for-dev.md b/docs/getting-started/install/install-for-dev.md new file mode 100644 index 0000000..1e6be39 --- /dev/null +++ b/docs/getting-started/install/install-for-dev.md @@ -0,0 +1,66 @@ +--- +title: Install for Development +sidebar_position: 1 +slug: /getting-started/install/for-development +--- + +### Prerequisites + +- Docker and Docker Compose installed on your machine. +- Basic knowledge of terminal commands. + +### Install Commands + +```bash +# 1. Clone the repository and enter directory and get all submodules: +git clone git@github.com:fleetbase/fleetbase.git && cd fleetbase +git submodule update --init --recursive + +# 2. Start the services using docker-compose: +docker-compose up -d + +# 3. Enter the application container (could also be `fleetbase_application_1`): +docker exec -ti fleetbase-application-1 bash + +# 4. Run the Deploy script: +sh deploy.sh + +# 5. For development stop the console container +docker-compose down console + +# 6. Run the development server for the console +cd console && pnpm install && pnpm start +``` + +### Linking Packages for Development + +If you'd like to customize or contribute to a Fleetbase extension, the extension must be linked first for changes to appear. For working on frontend development you will need to link the packages via the `package.json`. + +```json +// package.json +{ + "dependencies": { + "@fleetbase/fleetops-engine": "link:../packages/fleetops" + } +} +``` + +If you need to do backend development, packages must be linked as well via `composer.json`. See the example below for linking a local package to the Fleetbase API. + +```json +// composer.json +{ + "repositories": [ + { + "type": "path", + "url": "../packages/core-api" + }, + { + "type": "path", + "url": "../packages/fleetops" + } + ] +} +``` + +Fleetbase packages contain both the frontend and server side code. For a Fleetbase extensions the frontend code will be located in the `/addon` directory while the server side code will be located in the `/server` directory. You can learn more about developing your own extension or contributing to an existing extension in the developers section. \ No newline at end of file diff --git a/docs/getting-started/install/install-from-source.md b/docs/getting-started/install/install-from-source.md new file mode 100644 index 0000000..bca2514 --- /dev/null +++ b/docs/getting-started/install/install-from-source.md @@ -0,0 +1,491 @@ +--- +title: Install from Source +sidebar_position: 3 +slug: /getting-started/install/from-source +--- + +If you'd like to install and setup Fleetbase without Docker you will need to properly prepare your server first with dependencies. Fleetbase is built with PHP and MySQL. + +## Setup on Debian or Ubuntu + +### 1. Install Dependencies +```bash +sudo apt-get update && apt-get install -y git bind9-utils mycli nodejs npm php php-cli php-fpm git curl build-essential +``` + +### 2. Install Composer +```bash +php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" +php composer-setup.php +sudo mv composer.phar /usr/local/bin/composer +``` + +### 3. Install PNPM & Ember.js CLI +```bash +npm i -g pnpm ember-cli +``` + +### 4. Install FrankenPHP + +First, find out the architecture of your Debian system. You can do this with the following command: +```bash +uname -m +``` +- If the output is something like x86_64, amd64, or similar, then your system is a 64-bit Intel or AMD processor. +- If the output is aarch64 or similar, then your system is ARM 64-bit. + +#### Install for aarch64 +```bash +# Download the FrankenPHP Binary Build +wget https://github.com/dunglas/frankenphp/releases/download/v1.1.5/frankenphp-linux-aarch64 +# Make the Binary Executable +chmod +x frankenphp-linux-aarch64 +# Move the Binary to a System Path +sudo mv frankenphp-linux-aarch64 /usr/local/bin/frankenphp +# Test the Installation +frankenphp --version +``` + +#### Install for x86_64, amd64, or similar +```bash +# Download the FrankenPHP Binary Build +wget https://github.com/dunglas/frankenphp/releases/download/v1.1.5/frankenphp-linux-x86_64 +# Make the Binary Executable +chmod +x frankenphp-linux-x86_64 +# Move the Binary to a System Path +sudo mv frankenphp-linux-x86_64 /usr/local/bin/frankenphp +# Test the Installation +frankenphp --version +``` + +### 5. Install SocketCluster + +SocketCluster is a Node.js based server that enables real-time, bidirectional and event-based communication between clients and the server. Fleetbase uses SocketCluster to enable real-time events and activities such as vehicle tracking. + +#### Step 1: Install SocketCluster +Create a directory for your SocketCluster server: +It's a good practice to keep your applications organized in separate directories. +``` +mkdir ~/socketcluster +cd ~/socketcluster +``` + +- Install SocketCluster: +You can install SocketCluster globally or in your project directory. For a system-wide installation, use: +```bash +npm install -g socketcluster +``` + +For a local installation, you can initialize a new npm project and then install SocketCluster locally within it: +```bash +npm init -y +npm install socketcluster +``` + +#### Step 2: Set Up Your SocketCluster Server + +1. Create a basic server file: +Let's create a simple SocketCluster server file. If you installed SocketCluster locally, your project directory is already set. Create a new file named server.js: +```bash +nano server.js +``` + +Add the following basic server setup: + +```javascript +const SocketCluster = require('socketcluster'); + +const socketCluster = new SocketCluster({ + workers: 1, // Number of worker processes + brokers: 1, // Number of broker processes + port: 8001, // Port number for your SocketCluster +}); + +socketCluster.on('workerMessage', function (workerId, message, respond) { + console.log('Received message from worker ' + workerId + ': ', message); + respond(null, 'This is a response from master'); +}); +``` + +This script initializes a SocketCluster server with basic configuration. + +2. Run your SocketCluster server: + +Start your server using Node.js: +```bash +node server.js +``` + +#### Step 3: Configure SocketCluster as a System Service + +To ensure your SocketCluster server runs continuously and starts at boot, you can set it up as a systemd service. + +1. Create a systemd service file: +Create a new service file in /etc/systemd/system/: +```bash +sudo nano /etc/systemd/system/socketcluster.service +``` + +Add the following configuration: + +```ini +[Unit] +Description=SocketCluster server +After=network.target + +[Service] +User=root +WorkingDirectory=/home/root/socketcluster +ExecStart=/usr/bin/node server.js +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +Replace `root` with your actual username. + +2. Reload systemd and start the service: +Enable and start your new service: +```bash +sudo systemctl daemon-reload +sudo systemctl start socketcluster.service +sudo systemctl enable socketcluster.service +``` + +3. Check the status of your service: +To ensure that your service is running correctly: +```bash +sudo systemctl status socketcluster.service +``` + +#### Conclusion +You now have a basic SocketCluster server set up on your Debian system. It's configured to start automatically at boot, and you can customize your server.js to fit the specific requirements of your Fleetbase setup. + +### 6. Install MySQL + +#### Step 1: Add the MySQL APT Repository + +MySQL 8 might not be available directly from the default Debian or Ubuntu repositories, so you generally need to add the official MySQL APT repository to get the latest version. + +1. Download the MySQL APT repository config tool: +```bash +wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb +``` + +2. Install the repository package: +```bash +sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb +``` +During the installation, a prompt will appear allowing you to select the version of MySQL you wish to install. Make sure to select MySQL 8.0. + +3. Update your package lists to reflect the new repository: +```bash +sudo apt update +``` + +#### Step 2: Install MySQL 8 + +1. Install MySQL +```bash +sudo apt install mysql-server +``` + +2. During the installation, you will be prompted to create a root password. Choose a secure password and complete the setup. + +#### Step 3: Secure MySQL Installation + +After installing, it's recommended to run the security script that comes with MySQL: +```bash +sudo mysql_secure_installation +``` + +This script will guide you through some settings that improve MySQL security, such as removing anonymous users and the test database. + +### 7. Install Redis + +#### Step 1: Install Redis + +Redis is available from the default repositories on both Debian and Ubuntu: +```bash +sudo apt update +sudo apt install redis-server +``` + +#### Step 2: Configure Redis + +By default, Redis is not configured for production use. You can modify its configuration file to suit your needs: +```bash +sudo nano /etc/redis/redis.conf +``` + +Here are a few common settings to consider: + +- **Supervised directive:** Set it to systemd if you are using systemd to manage services. This allows better management and logging through systemd. +```bash +supervised systemd +``` + +- **Binding to localhost:** Ensure Redis is only listening on localhost unless needed otherwise, for security reasons. +```bash +bind 127.0.0.1 ::1 +``` + +- **Setting a password:** Uncomment and set the requirepass directive to secure Redis with a password. +```bash +requirepass yourverysecurepassword +``` + +#### Step 3: Restart and Enable Redis Service + +After configuring Redis, restart the service to apply changes: +```bash +sudo systemctl restart redis.service +``` + +To ensure Redis starts on boot, enable it: +```bash +sudo systemctl enable redis.service +``` + +### 8. Clone Fleetbase +```bash +git clone git@github.com:fleetbase/fleetbase.git /fleetbase +cd /fleetbase +``` + +### 9. Configure Fleetbase API + +To successfully set up Fleetbase, you need to configure various settings through environment variables. These variables will enable you to tailor the behavior of the Fleetbase system to fit your deployment environment. You can read more about configuration in the [configuration section](/getting-started/configuration) of this guide. + +#### Step 1: Access the Configuration File + +Open the `.env` file located in the `api` directory. You can use any text editor; the example below uses `nano`: + +```bash +nano api/.env +``` + +#### Step 2: Configure Essential Variables + +In the .env file, add the following environment variables. These variables are essential for the basic operation of the Fleetbase server: + +- `APP_URL`: The URL where your Fleetbase API is accessible. For development, you might use localhost. +- `CONSOLE_HOST`: The URL for the Fleetbase console. Required for CORS configuration. +- `DATABASE_URL`: The full database connection URL, including username, password, host, and database name. +- `STOREFRONT_DB_CONNECTION`: The database connection name for the storefront. +- `QUEUE_CONNECTION`: Defines the queue backend, which in this case is Redis. +- `CACHE_DRIVER`: Specifies Redis as the caching backend. +- `CACHE_PATH`: The file path for storing cache files, useful if file-based caching is used. +- `CACHE_URL`: The URL for the Redis cache server. +- `REDIS_URL`: The URL for the Redis server used for caching and queues. +- `SESSION_DOMAIN`: The domain under which sessions are valid. +- `BROADCAST_DRIVER`: The technology used for broadcasting real-time messages. +- `MAIL_FROM_NAME`: Default name used in emails sent by the system. +- `APP_NAME`: The name of your application. +- `LOG_CHANNEL`: Specifies how application logging is handled. +- `MODEL_CACHE_ENABLED`: Toggle to enable/disable model caching. +- `RESPONSE_CACHE_ENABLED`: Toggle to enable/disable response caching. +- `RESPONSE_CACHE_DRIVER`: Specifies the caching driver for responses. +- `MAIL_MAILER`: Defines the mail backend, for example: Sendgrid, SES (Amazon Simple Email Service), Postmark. +- `IPINFO_API_KEY`: API key for IPInfo service, if used. +- `GOOGLE_MAPS_API_KEY`: API key for Google Maps services. +- `GOOGLE_MAPS_LOCALE`: Locale setting for Google Maps. +- `TWILIO_SID`: Account SID for Twilio, used for sending SMS. +- `TWILIO_TOKEN`: Authentication token for Twilio. +- `TWILIO_FROM`: The phone number from which Twilio SMS are sent. +- `SENTRY_LARAVEL_DSN`: The DSN for Sentry, used for error tracking. +- `OSRM_HOST`: The OSRM server to use, defaults to https://bundle.routing.fleetbase.io + +#### Example Configuration +Below is an example configuration for a development environment: +```bash +APP_URL=http://localhost:8000 +CONSOLE_HOST=http://localhost:4200 +OSRM_HOST=https://bundle.routing.fleetbase.io +DATABASE_URL=mysql://root:password@localhost/fleetbase +STOREFRONT_DB_CONNECTION=storefront +QUEUE_CONNECTION=redis +CACHE_DRIVER=redis +CACHE_PATH=/path/to/fleetbase/api/storage/framework/cache +CACHE_URL=redis://localhost:6379 +REDIS_URL=redis://localhost:6379 +SESSION_DOMAIN=localhost +BROADCAST_DRIVER=socketcluster +MAIL_FROM_NAME=Fleetbase +APP_NAME=Fleetbase +LOG_CHANNEL=daily +MODEL_CACHE_ENABLED=true +RESPONSE_CACHE_ENABLED=true +RESPONSE_CACHE_DRIVER=redis +MAIL_MAILER=ses +IPINFO_API_KEY=your_ipinfo_api_key +GOOGLE_MAPS_API_KEY=your_google_maps_api_key +GOOGLE_MAPS_LOCALE=us +TWILIO_SID=your_twilio_sid +TWILIO_TOKEN=your_twilio_token +TWILIO_FROM=your_twilio_from_number +SENTRY_LARAVEL_DSN=your_sentry_dsn +``` + +#### Step 3: Save and Close +After entering the necessary variables, save and close the file. If you're using nano, you can do this by pressing CTRL + X, then Y to confirm, and Enter to exit. + +#### Step 4: Validate Configuration +Ensure all services mentioned in the .env file are properly installed and running, such as Redis, MySQL, and any external services like Twilio or Sentry. This validation will help you catch any misconfigurations or service interruptions before going live. + +### 10. Configure Fleetbase Console + +Configuring the frontend environment of Fleetbase involves setting various parameters that ensure the frontend communicates correctly with the backend services, such as the API and real-time services like SocketCluster, as well as external services like OSRM. + +#### Step 1: Access the Configuration File + +Navigate to the `environments` directory of the console and open the `.env.production` file. You can use any text editor; below we use `nano`: + +```bash +nano /console/environments/.env.production +``` + +#### Step 2: Set Environment Variables +Below is an explanation of each variable in the .env.production file. Update each value according to your environment specifics: + +- `API_HOST`: The URL where your Fleetbase API is accessible, excluding any path or schema. +- `API_NAMESPACE`: The namespace for the API, typically indicating the version and scope of the API. +- `API_SECURE`: Indicates whether HTTPS is used to secure API communication. Set to true for HTTPS. +- `SOCKETCLUSTER_PATH`: The path component of the URL where the SocketCluster server can be accessed. +- `SOCKETCLUSTER_HOST`: The hostname or IP address of the SocketCluster server. +- `SOCKETCLUSTER_SECURE`: Specifies whether the SocketCluster connection should use SSL (true for wss://, false for ws://). +- `SOCKETCLUSTER_PORT`: The port on which the SocketCluster server is listening. +- `OSRM_HOST`: The primary URL for the Open Source Routing Machine (OSRM) server. +- `OSRM_SERVERS`: A comma-separated list of URLs for fallback or additional OSRM servers. + +#### Example Configuration +Below is an example configuration for a production environment: +```bash +API_HOST=http://localhost:8000 +API_NAMESPACE=int/v1 +API_SECURE=true +SOCKETCLUSTER_PATH=/socketcluster/ +SOCKETCLUSTER_HOST=localhost +SOCKETCLUSTER_SECURE=true +SOCKETCLUSTER_PORT=38000 +OSRM_HOST=https://bundle.routing.fleetbase.io +OSRM_SERVERS=https://canada.routing.fleetbase.io,https://us.routing.fleetbase.io +``` + +#### Step 3: Save and Close +After configuring the environment variables, save and exit the editor. If you're using nano, this is done by pressing CTRL + X, then pressing Y to confirm the changes, and Enter to exit. + +#### Step 4: Validate and Deploy +After configuring the .env.production file, ensure to validate the settings by testing the frontend connectivity with the backend and other services. Check that all endpoints are reachable and functioning as expected. This step is crucial to prevent runtime issues in a production environment. + +### 11. Install and Deploy Fleetbase API + +#### Step 1: Prepare the Environment + +Navigate to the Fleetbase API directory and ensure your environment is set up for the installation: +```bash +cd /fleetbase/api +``` + +#### Step 2: Install Dependencies + +Use Composer to install the necessary PHP dependencies. The `--no-scripts` flag avoids script execution during installation, `--optimize-autoloader` helps with optimizing the autoloader, and `--no-dev` prevents development packages from being installed in a production environment: + +```bash +composer install --no-scripts --optimize-autoloader --no-dev +composer dumpautoload # Optimize the autoloader after installation +``` + +#### Step 3: Set Permissions + +Proper file permissions are critical for the security and proper functioning of Fleetbase: + +```bash +chmod -R 755 /fleetbase/api/storage # Set the correct permissions for the storage directory +chmod +x /fleetbase/api/deploy.sh # Make the deployment script executable +``` + +#### Step 4: Run Deployment Script + +Execute the deployment script which should handle specific deployment tasks: +```bash +sh deploy.sh +``` + +#### Step 5: Start the FrankenPHP Server + +Launch the FrankenPHP server with the necessary options to serve the Fleetbase API: +```bash +php artisan octane:frankenphp --port=8000 --host=0.0.0.0 --https --http-redirect --caddyfile /fleetbase/Caddyfile +``` + +This command starts the FrankenPHP server listening on all network interfaces (0.0.0.0), on port 8000, with HTTPS enabled, and uses the specified Caddyfile for server configuration. + +### 12. Install and Build Console + +#### Step 1: Navigate to the Console Directory + +Change to the directory containing the Fleetbase console code: +```bash +cd /fleetbase/console +``` + +#### Step 2: Install Frontend Dependencies + +Use pnpm to install all necessary dependencies. pnpm is efficient and fast which makes it ideal for managing node packages: +```bash +pnpm install +``` + +#### Step 3: Build the Frontend + +Compile and build the frontend assets for production. This step generates the static files needed for deployment: +```bash +pnpm build --environment production +``` + +### 13. Set Up NGINX for the Console + +#### Step 1: Install NGINX + +Install NGINX which will serve as the web server for the Fleetbase console: +```bash +sudo apt install nginx +``` + +#### Step 2: Configure Firewall + +Allow HTTP and HTTPS traffic through the firewall: +```bash +sudo ufw allow 'Nginx Full' +``` + +#### Step 3: Check NGINX Status + +Ensure that NGINX is active and running: +```bash +sudo systemctl status nginx +``` + +#### Step 4: Deploy NGINX Configuration + +Copy the custom NGINX configuration file for the Fleetbase console to the appropriate directory and overwrite the default configuration: +```bash +sudo cp nginx.conf /etc/nginx/conf.d/default.conf +``` + +Additionally if you are setting up for production you might want to modify the default console port of 4200 to 80. + +#### Step 5: Reload NGINX + +Apply the new configuration by reloading NGINX: +```bash +sudo systemctl reload nginx +``` + +### Conclusion + +Following these steps, you have successfully installed and deployed both the Fleetbase API and Console. The API server is powered by FrankenPHP for efficient handling of requests, and the console is set up with NGINX as the web server to deliver the user interface securely and efficiently. + +You should now be able to access Fleetbase on your servers port 4200. \ No newline at end of file diff --git a/docs/getting-started/install/install-with-docker.md b/docs/getting-started/install/install-with-docker.md new file mode 100644 index 0000000..06c901f --- /dev/null +++ b/docs/getting-started/install/install-with-docker.md @@ -0,0 +1,156 @@ +--- +title: Install with Docker +sidebar_position: 2 +slug: /getting-started/install/with-docker +--- + +## Prerequisites + +Before starting the installation, ensure the following prerequisites are met: + +- **Docker:** Docker must be installed on the host machine. Ensure Docker Compose is also available for managing multi-container Docker applications. +- **Git:** Required for source code management. +- **Environment:** Prepare a production environment, preferably a virtual or dedicated server. +- **Domain Names:** Have domain names ready for the API and console, and ensure they are pointed to your server. +- **SSL Certificates:** For HTTPS, prepare SSL certificates. You can obtain these from a certificate authority or use Let’s Encrypt for free certificates. + +## Installation Steps + +### 1. Clone the Repository + +Start by cloning the Fleetbase repository into a suitable directory on your server: +```bash +git clone https://github.com/fleetbase/fleetbase.git && cd fleetbase +``` + +### 2. Configure Docker Containers + +Edit or create a `docker-compose.override.yml` file to suit production needs. This may involve configuring volumes for persistent data, adjusting environment variables, and ensuring proper network settings are applied. You can also create a `api/.env` file to configure environment variables for Fleetbase. You can read more about configuration in the [configuration section](/getting-started/configuration) of this guide. + +#### Example for Docker (docker-compose.override.yml): + +This file can be used to overwrite default environment variables which are set in the `docker-compose.yml` file which ships with Fleetbase. + +```yaml +services: + application: + environment: + - DATABASE_URL=mysql://user:password@db:3306/fleetbase + - REDIS_URL=redis://redis:6379 +``` + +#### Example for Source (.env): + +```plaintext +DATABASE_URL=mysql://user:password@localhost:3306/fleetbase +REDIS_URL=redis://localhost:6379 +``` + +#### Environment Variables for Fleetbase + +- `APP_URL`: The URL where your Fleetbase API is accessible. For development, you might use localhost. +- `CONSOLE_HOST`: The URL for the Fleetbase console. This is required for CORS configuration. +- `DATABASE_URL`: The full database connection URL, including username, password, host, and database name. +- `STOREFRONT_DB_CONNECTION`: The database connection name for the storefront. +- `QUEUE_CONNECTION`: Defines the queue backend, which in this case is Redis. +- `CACHE_DRIVER`: Specifies Redis as the caching backend. +- `CACHE_PATH`: The file path for storing cache files, useful if file-based caching is used. +- `CACHE_URL`: The URL for the Redis cache server. +- `REDIS_URL`: The URL for the Redis server used for caching and queues. +- `SESSION_DOMAIN`: The domain under which sessions are valid. +- `BROADCAST_DRIVER`: The technology used for broadcasting real-time messages. +- `MAIL_FROM_NAME`: Default name used in emails sent by the system. +- `APP_NAME`: The name of your application. +- `LOG_CHANNEL`: Specifies how application logging is handled. +- `MODEL_CACHE_ENABLED`: Toggle to enable/disable model caching. +- `RESPONSE_CACHE_ENABLED`: Toggle to enable/disable response caching. +- `RESPONSE_CACHE_DRIVER`: Specifies the caching driver for responses. +- `MAIL_MAILER`: Defines the mail backend, for example: Sendgrid, SES (Amazon Simple Email Service), Postmark. +- `IPINFO_API_KEY`: API key for IPInfo service, if used. +- `GOOGLE_MAPS_API_KEY`: API key for Google Maps services. +- `GOOGLE_MAPS_LOCALE`: Locale setting for Google Maps. +- `TWILIO_SID`: Account SID for Twilio, used for sending SMS. +- `TWILIO_TOKEN`: Authentication token for Twilio. +- `TWILIO_FROM`: The phone number from which Twilio SMS are sent. +- `SENTRY_LARAVEL_DSN`: The DSN for Sentry, used for error tracking. +- `OSRM_HOST`: The OSRM server to use, defaults to https://bundle.routing.fleetbase.io + +### 3. Build and Start Services + +Use Docker Compose to build and start the services. The -d flag runs them in detached mode: +```bash +docker-compose up --build -d +``` + +### 4. Access the Application Container + +Enter the application container to perform initial setup tasks: +```bash +# On OSX or others the application name might be "fleetbase-application-1" +docker exec -ti fleetbase_application_1 bash +``` + +### 5. Run the Deployment Script + +Execute the deployment script within the container to configure the database and other components: +```bash +sh deploy.sh +``` + +## Configuration + +Configuration involves setting up environment variables and integrating external services. + +### Fleetbase API Configuration + +Configure environment variables in the Docker Compose file or a separate .env file for the API: + +- `CONSOLE_HOST`: The URL for the Fleetbase console. Required for CORS configuration. +- `DATABASE_URL`: Full database connection string. +- `REDIS_URL`: Connection string for Redis. +- `MAIL_DRIVER`: Set up for production email sending. +- `TWILIO_SID`, `TWILIO_TOKEN`, `TWILIO_FROM`: For SMS functionality. + +### Fleetbase Console Configuration + +Modify the environment settings in the Docker setup for the console: + +- `API_HOST`: Set this to the production API URL. +- `SOCKETCLUSTER_HOST`, `SOCKETCLUSTER_PORT`: Ensure these are configured for real-time functionalities. + +### OSRM Configuration + +If using a custom OSRM service, configure the `OSRM_HOST` environment variable for both the console and the API. + +### Integrating SSL Certificates + +Set up SSL certificates for secure communication: + +- Use certbot or a similar tool to generate and configure SSL certificates for your domains. +- Configure HTTPS redirection and SSL termination in the Nginx or Caddy configuration within Docker. + +### Scheduler and Worker Configuration +Ensure the scheduler and workers are correctly set up to handle background tasks: + +```dockerfile +# Scheduler configuration for production +FROM scheduler as scheduler +ENTRYPOINT ["/sbin/ssm-parent", "-c", ".ssm-parent.yaml", "run", "--"] +CMD ["go-crond", "--verbose", "root:./crontab"] +``` + +## Verify and Monitor + +After deployment, verify all components are functioning correctly: + +- Access the Fleetbase console via its domain. +- Check connectivity between services. +- Monitor logs and performance to ensure stability. + +## Backup and Maintenance + +Set up regular backups for your databases and persistent volumes. Plan for regular maintenance updates and monitor Docker containers and services. + +## Conclusion + +This guide provides a comprehensive approach to deploying Fleetbase in a production environment using Docker. It covers the initial setup, configuration of essential components, and considerations for security and maintenance. Adjustments might be needed based on specific infrastructure or additional requirements. \ No newline at end of file diff --git a/docs/getting-started/overview.md b/docs/getting-started/overview.md index 55830de..b2be025 100644 --- a/docs/getting-started/overview.md +++ b/docs/getting-started/overview.md @@ -1,5 +1,44 @@ --- title: Overview sidebar_position: 1 -slug: /getting-started ---- \ No newline at end of file +slug: /getting-started/overview +--- + + +# Overview + +Welcome to the Fleetbase "Getting Started" guide! This section is designed to provide you with a foundational understanding of the Fleetbase platform, covering key aspects of its architecture, how to install and configure the system, manage upgrades, and troubleshoot common issues. + +## What is Fleetbase? + +Fleetbase is a versatile, modular logistics and supply chain operating system engineered to streamline operations across various sectors. It offers robust tools for management, planning, optimization, and operational control, empowering businesses to enhance efficiency and scalability. + +## What Will You Find in This Section? + +### [Architecture](/getting-started/architecture) + +- **Discover the Structure:** Learn about the modular architecture of Fleetbase, including its front-end console, backend API, and how components like databases and messaging queues integrate to form a cohesive system. +- **Technical Insights:** Gain insights into the technologies powering Fleetbase, such as Laravel, Ember.js, MySQL, Redis, and more. + +### [Installation](/getting-started/install) + +- **Step-by-Step Guides:** Find detailed instructions on how to set up Fleetbase on your local machine or production environment using Docker and other tools. +- **Initial Configuration:** Understand the essential configurations needed to get Fleetbase up and running, including environment setup and external service integrations. + +### [Upgrading](/getting-started/upgrading) + +- **Keeping Up-to-Date:** Learn the procedures for upgrading your Fleetbase installation to the latest version to ensure access to new features and security updates. +- **Best Practices:** Explore best practices to follow during the upgrade process to minimize downtime and maintain data integrity. + +### [Troubleshooting](/getting-started/troubleshoot) + +- **Common Issues:** Identify typical problems that might arise during the installation or operation of Fleetbase and learn how to solve them. +- **Support Resources:** Discover where to find additional help and community support when facing complex challenges. + +## Why Choose Fleetbase? + +Fleetbase is not just a platform; it's a solution designed with the future of logistics in mind. Its open-source nature, combined with extensive customization options and a strong focus on user experience, makes it an ideal choice for businesses looking to leverage technology to enhance their supply chain and logistics operations. + +--- + +This overview serves as your gateway to understanding and utilizing Fleetbase. Each topic mentioned here is discussed in further detail in dedicated pages within this documentation, designed to help you successfully deploy, maintain, and leverage Fleetbase in your organization. \ No newline at end of file diff --git a/docs/getting-started/troubleshoot.md b/docs/getting-started/troubleshoot.md index 28cc79e..553e28c 100644 --- a/docs/getting-started/troubleshoot.md +++ b/docs/getting-started/troubleshoot.md @@ -2,4 +2,82 @@ title: Troubleshoot sidebar_position: 6 slug: /getting-started/troubleshoot ---- \ No newline at end of file +--- + +Have an issue with the installation, try a few of these workarounds. + +## Web Installer not working? + +Fleetbase ships with a web based installer to simplify the setup process for non-technical users. This is installer may not always work, in this case if you are experiencing issues with the web based installer you should use this simple workaround to get going. + +1. Login to the application container +```bash +docker exec -ti fleetbase_application_1 bash +``` + +2. Manually run the deploy script +```bash +sh deploy.sh +``` + +## CORS Errors + +Cross-Origin Resource Sharing (CORS) errors can occur if your environment variables are not correctly set up to allow frontend access to your backend services. Follow these steps to ensure that your environment variables are configured properly in both the Fleetbase Console (frontend) and your backend. + +### Frontend Environment Configuration + +#### Set API_HOST in Fleetbase Console + +Ensure that the `API_HOST` variable in your Fleetbase Console's environment configuration points correctly to your backend API. This setting is crucial for the frontend to make requests to the backend. + +1. Locate the Environment Configuration File: +Navigate to the `console/environments/` directory and find the relevant .env.* file (e.g., .env.production for production environments). + +2. Edit the Environment Variable: +Open the file and ensure that the `API_HOST` is set to the URL where your backend API is hosted. It should look something like this: +```plaintext +API_HOST=https://api.yourdomain.com +``` + +### Backend Environment Configuration + +#### Step 1: Set CONSOLE_HOST in Backend + +The `CONSOLE_HOST` environment variable should be correctly set in your backend configuration to allow CORS requests from the frontend. + +1. Determine Configuration Method: +- If using Docker, locate your `docker-compose.override.yml` file or create one, (see configuration for more details)[/getting-started/configuration]. +- If not using Docker, locate your backend's `api/.env` file. + +2. Edit the Environment Variable: +- For Docker environments, add or modify the `CONSOLE_HOST` in your `docker-compose.override.yml`: +```yaml +services: + application: + environment: + - CONSOLE_HOST=https://console.yourdomain.com +``` +- For non-Docker environments, ensure your api/.env file includes: +```plaintext +CONSOLE_HOST=https://console.yourdomain.com +``` + +#### Step 2: Check CORS Configuration in Fleetbase + +Ensure that your Fleetbase backend is configured to handle CORS correctly. This typically involves modifying the `api/config/cors.php` configuration file in the config directory: + +- Open `api/config/cors.php` and review the paths, allowed_origins, allowed_methods, and allowed_headers to ensure they match your requirements. +- Make sure that the `allowed_origins` array includes the domain of your Fleetbase Console. + +### Testing Changes + +After making these changes, restart your services: + +- If using Docker, run: +```bash +docker-compose down && docker-compose up -d +``` +- For non-Docker setups, simply restart your server services. + +Then, test by accessing the Fleetbase Console and verifying that CORS errors no longer occur when it interacts with the backend. + diff --git a/docs/getting-started/upgrading.md b/docs/getting-started/upgrading.md index 137bf77..b9ff87d 100644 --- a/docs/getting-started/upgrading.md +++ b/docs/getting-started/upgrading.md @@ -2,4 +2,86 @@ title: Upgrading sidebar_position: 5 slug: /getting-started/upgrading ---- \ No newline at end of file +--- + +## Overview + +Upgrading Fleetbase involves pulling the latest changes from the Git repository, resolving any merge conflicts, and updating dependencies and configurations as needed. This guide provides instructions for both Docker and source installations. + +## Upgrading Fleetbase with Docker + +### Step 1: Pull Latest Changes +Navigate to your Fleetbase installation directory and use Git to fetch the latest updates: +```bash +cd /fleetbase +git pull origin main --no-rebase +``` + +### Step 2: Resolve Merge Conflicts + +If you encounter merge conflicts after pulling the latest changes, you'll need to resolve these manually. Open the conflicting files and make the necessary changes to integrate new updates with your custom configurations. + +### Step 3: Rebuild Docker Containers + +After resolving any conflicts and committing the changes, you need to rebuild your Docker containers to apply the updates: +```bash +docker-compose down +docker-compose up --build -d +``` + +This will stop the current containers, rebuild them with the latest changes, and restart them in detached mode. + +## Upgrading Fleetbase from Source + +### Step 1: Pull Latest Changes + +Just like with Docker, start by navigating to your Fleetbase directory and pulling the latest changes: + +```bash +cd /fleetbase +git pull origin main --no-rebase +``` + +### Step 2: Resolve Merge Conflicts + +Handle any merge conflicts that arise during the Git pull, ensuring that your modifications are preserved while incorporating the latest updates. + +### Step 3: Update API Dependencies + +Navigate to the API directory and run Composer to update PHP dependencies: +```bash +cd /fleetbase/api +composer install +``` + +This step ensures that all backend dependencies are up to date with the versions specified in composer.json. + +### Step 4: Run Deployment Script + +Execute the deployment script to apply database migrations and other necessary setup procedures: + +```bash +sh deploy.sh +``` + +### Step 5: Rebuild the Console + +Finally, move to the console directory and rebuild the frontend to apply any changes: + +```bash +cd /fleetbase/console +pnpm install # Ensure all dependencies are up to date +pnpm build --environment production +``` + +## Post-Upgrade Verification + +After completing the upgrade, verify that everything is running smoothly: + +- Check the application logs for any errors or warnings. +- Test the functionality to ensure all components are working as expected. +- Verify that the API and console are accessible and responsive. + +## Conclusion + +This guide provides a structured approach to upgrading Fleetbase, whether you are using Docker or a traditional source installation. By following these steps, you can ensure that your Fleetbase deployment takes advantage of the latest features and improvements while maintaining stability and security. \ No newline at end of file diff --git a/docs/guides/admin/_category_.json b/docs/guides/admin/_category_.json new file mode 100644 index 0000000..66251ce --- /dev/null +++ b/docs/guides/admin/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Admin", + "position": 7, + "link": { + "type": "generated-index", + "description": "Getting Started with using Fleetbase" + } +} diff --git a/docs/guides/admin/image-1.png b/docs/guides/admin/image-1.png new file mode 100644 index 0000000..86209f7 Binary files /dev/null and b/docs/guides/admin/image-1.png differ diff --git a/docs/guides/admin/image-10.png b/docs/guides/admin/image-10.png new file mode 100644 index 0000000..7008222 Binary files /dev/null and b/docs/guides/admin/image-10.png differ diff --git a/docs/guides/admin/image-11.png b/docs/guides/admin/image-11.png new file mode 100644 index 0000000..920acdd Binary files /dev/null and b/docs/guides/admin/image-11.png differ diff --git a/docs/guides/admin/image-12.png b/docs/guides/admin/image-12.png new file mode 100644 index 0000000..2008e1e Binary files /dev/null and b/docs/guides/admin/image-12.png differ diff --git a/docs/guides/admin/image-2.png b/docs/guides/admin/image-2.png new file mode 100644 index 0000000..9ac8bd8 Binary files /dev/null and b/docs/guides/admin/image-2.png differ diff --git a/docs/guides/admin/image-3.png b/docs/guides/admin/image-3.png new file mode 100644 index 0000000..ef5dc60 Binary files /dev/null and b/docs/guides/admin/image-3.png differ diff --git a/docs/guides/admin/image-4.png b/docs/guides/admin/image-4.png new file mode 100644 index 0000000..f7fa31a Binary files /dev/null and b/docs/guides/admin/image-4.png differ diff --git a/docs/guides/admin/image-5.png b/docs/guides/admin/image-5.png new file mode 100644 index 0000000..d00fd5e Binary files /dev/null and b/docs/guides/admin/image-5.png differ diff --git a/docs/guides/admin/image-6.png b/docs/guides/admin/image-6.png new file mode 100644 index 0000000..71021e3 Binary files /dev/null and b/docs/guides/admin/image-6.png differ diff --git a/docs/guides/admin/image-7.png b/docs/guides/admin/image-7.png new file mode 100644 index 0000000..bd11abc Binary files /dev/null and b/docs/guides/admin/image-7.png differ diff --git a/docs/guides/admin/image-8.png b/docs/guides/admin/image-8.png new file mode 100644 index 0000000..a589a83 Binary files /dev/null and b/docs/guides/admin/image-8.png differ diff --git a/docs/guides/admin/image-9.png b/docs/guides/admin/image-9.png new file mode 100644 index 0000000..943994b Binary files /dev/null and b/docs/guides/admin/image-9.png differ diff --git a/docs/guides/admin/image.png b/docs/guides/admin/image.png new file mode 100644 index 0000000..e40e908 Binary files /dev/null and b/docs/guides/admin/image.png differ diff --git a/docs/guides/admin/introduction.md b/docs/guides/admin/introduction.md new file mode 100644 index 0000000..ba984f9 --- /dev/null +++ b/docs/guides/admin/introduction.md @@ -0,0 +1,91 @@ +--- +title: Introduction +sidebar_position: 1 +slug: /guides/admin/introduction +--- + +## Admin Overview + +The admin console is where you configure the system wide settings such as 3rd party services, billing configurations, visibility controls etc. + +To access the system admin navigate to https://console.fleetbase.io/admin/ + +### Organisations + +View all of the organisations and users signed up to your Fleetbase instance. + +![Alt text](image.png) + +### Branding + +Upload your icon and logo for branding your Fleetbase instance. + +![Alt text](image-1.png) + +### Notifications + +Set up users to recieve system wide notifications. + +![Alt text](image-2.png) + +### 2FA Config + +Configure the 2FA functions for your Fleetbase instance. + +![Alt text](image-3.png) + +### Visibility Controls + +Select which FleetOps modules are visibile to the users of your Fleetbase instance. + +![Alt text](image-4.png) + +### Navigator App + +To use our existing published Navigator App with your Fleetbase instance, you need to create a instance linking URL. You can do so in the screenshot below. + +![Alt text](image-5.png) + +### Avatar Management + +Create an upload the avatars that you want users to use in your Fleetbase instance for vehicles, places and drivers. + +![Alt text](image-6.png) + +### Services + +Add in your API Keys for 3rd party services such as Google Maps, AWS, Twilio & Sentry in the Services section. + +![Alt text](image-7.png) + +### Mail Config + +Set up your mail server for sending emails from your Fleetbase instance. + +![Alt text](image-8.png) + +### Filestorage + +Set up your file storage configurations so users can upload files in your Fleetbase instance. + +![Alt text](image-9.png) + +### Queue Config + +Set up your queue service for your Fleetbase instance. + +![Alt text](image-10.png) + +### Socket Cluster + +Test socket connection. + +![Alt text](image-11.png) + +### Notification Channels + +Set up notifications system wide for your Fleetbase instance. + +![Alt text](image-12.png) + + diff --git a/docs/guides/console/_category_.json b/docs/guides/console/_category_.json new file mode 100644 index 0000000..60074f9 --- /dev/null +++ b/docs/guides/console/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Console", + "position": 1, + "link": { + "type": "generated-index", + "description": "Getting Started with using Fleetbase" + } +} diff --git a/docs/guides/console/dashboard.md b/docs/guides/console/dashboard.md new file mode 100644 index 0000000..7a263ca --- /dev/null +++ b/docs/guides/console/dashboard.md @@ -0,0 +1,23 @@ +--- +title: Dashboard +sidebar_position: 2 +slug: /guides/console/dashboard +--- + +## Dashboard Overview + +The dashboard is your centralised place for a complete overview of your operations, fully configurable and customizable. + +![Alt text](image.png) + +### Create New Dashboard + +You can create as many dashboards as you need, click on the 'Dashboard' on the top right to create a new dashboard. + +![Alt text](image-1.png) + +### Widgets + +The dashboard is compiled of 'Widgets'. Fleetbase comes with standard widgets for insights into metric for FleetOps and Storefront. Users can create their own custom widgets or reach out to one of our team for the same. + +To learn more, please visit the 'Widgets' section. \ No newline at end of file diff --git a/docs/guides/console/image-1.png b/docs/guides/console/image-1.png new file mode 100644 index 0000000..a47539c Binary files /dev/null and b/docs/guides/console/image-1.png differ diff --git a/docs/guides/console/image-2.png b/docs/guides/console/image-2.png new file mode 100644 index 0000000..073a54a Binary files /dev/null and b/docs/guides/console/image-2.png differ diff --git a/docs/guides/console/image-3.png b/docs/guides/console/image-3.png new file mode 100644 index 0000000..4d4f893 Binary files /dev/null and b/docs/guides/console/image-3.png differ diff --git a/docs/guides/console/image-4.png b/docs/guides/console/image-4.png new file mode 100644 index 0000000..19a58e7 Binary files /dev/null and b/docs/guides/console/image-4.png differ diff --git a/docs/guides/console/image-5.png b/docs/guides/console/image-5.png new file mode 100644 index 0000000..3f3c0c0 Binary files /dev/null and b/docs/guides/console/image-5.png differ diff --git a/docs/guides/console/image-6.png b/docs/guides/console/image-6.png new file mode 100644 index 0000000..49132e1 Binary files /dev/null and b/docs/guides/console/image-6.png differ diff --git a/docs/guides/console/image-7.png b/docs/guides/console/image-7.png new file mode 100644 index 0000000..755414c Binary files /dev/null and b/docs/guides/console/image-7.png differ diff --git a/docs/guides/console/image-8.png b/docs/guides/console/image-8.png new file mode 100644 index 0000000..4a1a544 Binary files /dev/null and b/docs/guides/console/image-8.png differ diff --git a/docs/guides/console/image.png b/docs/guides/console/image.png new file mode 100644 index 0000000..58df647 Binary files /dev/null and b/docs/guides/console/image.png differ diff --git a/docs/guides/console/overview.md b/docs/guides/console/overview.md new file mode 100644 index 0000000..1bfa3fe --- /dev/null +++ b/docs/guides/console/overview.md @@ -0,0 +1,44 @@ +--- +title: Overview +sidebar_position: 1 +slug: /guides/console/overview +--- +## Console Overview + +The console is the backbone of Fleetbase. It shows all of your installed extensions, cutomized dashboards and your company / user settings. + +### Navigation Bar + +The top navigation bar shows all of your extensions currently available. + +![Alt text](image-2.png) + +### Dashboard + +As you enter the console, you will see the Dashboard. + +This dashboard is fully customizble, you can learn more in the Dashboard Section. + +![Alt text](image-3.png) + +### Notifications / Chat / Translation + +View all of your system notifications, switch to multiple languages and create instant chat channels using the features in the screenshot below: + +![Alt text](image-4.png) + +### Company & User Settings + +Click into the Company Name or the User Profile Image to access settings such as: + +- Organisation Settings +- Create or Join or Switch Organisations +- Update Billing Settings +- Explore Extensions +- Access System Admin +- View or Update Profile / Passwords + +![Alt text](image-5.png) + + + diff --git a/docs/guides/console/widgets.md b/docs/guides/console/widgets.md new file mode 100644 index 0000000..8824da9 --- /dev/null +++ b/docs/guides/console/widgets.md @@ -0,0 +1,21 @@ +--- +title: Widgets +sidebar_position: 3 +slug: /guides/console/widgets +--- + +## Widgets + +The dashboard is compiled of 'Widgets'. Fleetbase comes with standard widgets for insights into metric for FleetOps and Storefront. Users can create their own custom widgets or reach out to one of our team for the same. + +### Create New Widget + +Once you have created a new Dashboard, you can then add the exisiting Widgets to this dashboard. + +Click on the ... dots on the right top corner, and then click 'Add Widgets'. + +![Alt text](image-8.png) + +Once you are here, you can select the widgets you need. If you are looking to create new widgets, you can do so from the back end, or reach out to the team. + +![Alt text](image-7.png) \ No newline at end of file diff --git a/docs/guides/developers-console/_category_.json b/docs/guides/developers-console/_category_.json new file mode 100644 index 0000000..836ee62 --- /dev/null +++ b/docs/guides/developers-console/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Developers Console", + "position": 3, + "link": { + "type": "generated-index", + "description": "Getting Started with using Fleetbase" + } +} diff --git a/docs/guides/developers-console/image-1.png b/docs/guides/developers-console/image-1.png new file mode 100644 index 0000000..82ee275 Binary files /dev/null and b/docs/guides/developers-console/image-1.png differ diff --git a/docs/guides/developers-console/image-2.png b/docs/guides/developers-console/image-2.png new file mode 100644 index 0000000..34ad863 Binary files /dev/null and b/docs/guides/developers-console/image-2.png differ diff --git a/docs/guides/developers-console/image-3.png b/docs/guides/developers-console/image-3.png new file mode 100644 index 0000000..e845859 Binary files /dev/null and b/docs/guides/developers-console/image-3.png differ diff --git a/docs/guides/developers-console/image-4.png b/docs/guides/developers-console/image-4.png new file mode 100644 index 0000000..88987eb Binary files /dev/null and b/docs/guides/developers-console/image-4.png differ diff --git a/docs/guides/developers-console/image-5.png b/docs/guides/developers-console/image-5.png new file mode 100644 index 0000000..bf02ed8 Binary files /dev/null and b/docs/guides/developers-console/image-5.png differ diff --git a/docs/guides/developers-console/image.png b/docs/guides/developers-console/image.png new file mode 100644 index 0000000..a3d1228 Binary files /dev/null and b/docs/guides/developers-console/image.png differ diff --git a/docs/guides/developers-console/introduction.md b/docs/guides/developers-console/introduction.md new file mode 100644 index 0000000..fb6b0ff --- /dev/null +++ b/docs/guides/developers-console/introduction.md @@ -0,0 +1,33 @@ +--- +title: Introduction +sidebar_position: 1 +slug: /guides/console/introduction +--- +## Overview + +The Developers console allows you to have an overview of your activity, and create the API Keys and Webhooks you need to integrate and run Fleetbase programatically. + +1. **Insights** - View API insights. + +![Alt text](image.png) + +2. **API Keys** - Create and view API Keys. + +![Alt text](image-1.png) + +3. **Webhooks** - Create and view webhook endpoints. + +![Alt text](image-2.png) + +4. **WebSockets** - View your webhooks success and errors. + +![Alt text](image-3.png) + +5. **Logs** - View all of the logs for your account. + +![Alt text](image-4.png) + +6. **Events** - View all of the logs for your account. + +![Alt text](image-5.png) + diff --git a/docs/guides/fleet-ops/_category_.json b/docs/guides/fleet-ops/_category_.json index c89dc2f..59f1b37 100644 --- a/docs/guides/fleet-ops/_category_.json +++ b/docs/guides/fleet-ops/_category_.json @@ -1,6 +1,6 @@ { "label": "Fleet-Ops", - "position": 3, + "position": 2, "link": { "type": "generated-index", "description": "Getting Started with using Fleetbase" diff --git a/docs/guides/fleet-ops/contacts.md b/docs/guides/fleet-ops/contacts.md new file mode 100644 index 0000000..7ac7eec --- /dev/null +++ b/docs/guides/fleet-ops/contacts.md @@ -0,0 +1,30 @@ +--- +title: Contacts +sidebar_position: 10 +slug: /guides/fleet-ops/contacts +--- + +## Overview + +Contacts can be defined in multiple ways. + +1. **Contacts** - Contacts can be any contacts you wish to document in the system, such as contractors / stakeholdersetc. +2. **Customers** - Customers can be the end customer your want to assign deliveries to. + +![Alt text](image-40.png) + +### Create Contact / Customer ### + +You can create a new contact by clicking on the button on the top of the panel. + +1. **Contact Details** - Populate your contact / customer details. +2. **Type** - Select from the list to select either 'Contact' or 'Customer'. + +![Alt text](image-41.png) + + +### Export Contacts ### + +Export contacts by selecting the contacts and then clicking the 'Export' button. + +![Alt text](image-42.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/dashboard.md b/docs/guides/fleet-ops/dashboard.md new file mode 100644 index 0000000..d0662f3 --- /dev/null +++ b/docs/guides/fleet-ops/dashboard.md @@ -0,0 +1,65 @@ +--- +title: Dashboard +sidebar_position: 2 +slug: /guides/fleet-ops/dashboard +--- + +## Overview + +The map view in FleetOps is probabsly where you will spend most of your time. + +Here, you can have a full overview of all of your drivers locations in real time, as well create and view orders, create and view service areas and add custom zoning. + +### Map View + +The map view shows a visual representation of the drivers, this is using the GPS from the mobile device, as long as the driver is online using the Navigator App you will be able to see their location. + +![Alt text](image.png) + +#### Create Order + +You can create an order directly from the dashboard by clicking on the 'Create New Order' button, or by clicking the first button in the left side bar. + +![Alt text](image-5.png) + +Navigate to the 'Orders' section to learn more. + +#### View Orders + +You can view orders directly from the dashboard by clicking the 3rd button on the left side bar. + +![Alt text](image-8.png) + +Navigate to the 'Orders' section to learn more. + +#### Search + +You can search for your order by simply clicking the second button on the left side bar, and then searching in the box above. + + ![Alt text](image-7.png) + +#### Create Service Areas + +You can create an service area directly from the dashboard by clicking on the 'Create New Service Area' button, or by clicking the fourth button in the left side bar. + +![Alt text](image-6.png) + +Navigate to the 'Service Areas' section to learn more. + +### Table View + +The Table View in FleetOps shows a full list of the orders created by the users in FleetOps, from here, you can bulk action orders, see the statuses of orders, and export all of your order details. + +![Alt text](image-9.png) + +#### Custom Columns + +Users can view and hide all of the columns they want to see in the table view. Simple click the columns tab and check or uncheck the required fields. + +![Alt text](image-10.png) + +#### Bulk Actions + +Once you select orders from the Table View, you can commit bulk actions on these orders. Simply navigate to the 'Bulk Action' button on the top right. + +![Alt text](image-12.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/drivers.md b/docs/guides/fleet-ops/drivers.md new file mode 100644 index 0000000..e1f483c --- /dev/null +++ b/docs/guides/fleet-ops/drivers.md @@ -0,0 +1,29 @@ +--- +title: Drivers +sidebar_position: 6 +slug: /guides/fleet-ops/drivers +--- + +## Overview + +Drivers can be used to assign new orders, vehicles and fleets to. + +![Alt text](image-28.png) + +### Create Drivers + +You can create new orders by clicking on the button on the top of the panel. + +1. **User Account** - If the driver has an exisiting user account in the system, you can link this account to create the new driver. +2. **Driver Details** - Add in the details of the driver. +3. **Avatar** - Select an avatar, this will be displayed when you view the driver on the map. +4. **Navigator App** - The phone number you add to the driver will be used to login to the Driver app once you assign the order to them. + + +![Alt text](image-29.png) + +### Export Drivers ### + +Export drivers by selecting the drivers and then clicking the 'Export' button. + +![Alt text](image-30.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/fleets.md b/docs/guides/fleet-ops/fleets.md new file mode 100644 index 0000000..a5caaf7 --- /dev/null +++ b/docs/guides/fleet-ops/fleets.md @@ -0,0 +1,37 @@ +--- +title: Fleets +sidebar_position: 8 +slug: /guides/fleet-ops/fleets +--- + +## Overview + +You can group drivers & vehicles to Fleets. This can then be used to assign Fleets to specific service areas or zones. + +![Alt text](image-28.png) + +### Create Fleets + +You can create new fleets by clicking on the button on the top of the panel. + +1. **Fleet Name** - Add in the name of the Fleet. +2. **Parent Fleet** - This is your Fleet hierarchy, you can create a fleet and then sub fleets under it. +3. **Vendor** - Vendors can be 3rd party logistics companies that you assign order to, you can assign a Fleet to a Vendor. +4. **Assign to Service Area** - If you have multiple Fleets, you can assign specific Fleets to Service Areas. +5. **Assign to Zone** - Assign this Fleet to a specific Zone. +6. **Status** - Set if this fleet is active or not. +7. **Task / Mission** - Define the mission for this Fleet. + +![Alt text](image-33.png) + +### Assign Drivers & Vehicles ### + +Once you have created the Fleet, click the three dots and click 'View Details'. From here, you can assign the specific drivers and vehicles to this Fleet. + +![Alt text](image-35.png) + +### Export Fleets ### + +Export vehicles by selecting the drivers and then clicking the 'Export' button. + +![Alt text](image-34.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/fuel-reports.md b/docs/guides/fleet-ops/fuel-reports.md new file mode 100644 index 0000000..ffd40e5 --- /dev/null +++ b/docs/guides/fleet-ops/fuel-reports.md @@ -0,0 +1,33 @@ +--- +title: Fuel Reports +sidebar_position: 12 +slug: /guides/fleet-ops/fuel-reports +--- + +## Overview + +You can upload and track fuel reports for your fleet. + +![Alt text](image-46.png) + +### Create Fuel Reports ### + +You can create a fuel reports by clicking on the button on the top of the panel. + +1. **Reporter** - Select the user who is submitting this fuel report. +2. **Driver** - Select the driver that is submitting this fuel report. +3. **Vehicle** - Select vehicle that this fuel report relates to. +4. **Status** - Select the status of the fuel report, if it is in draft mode or published etc. +5. **Odometer** - Populate the current odometer reading at the time of this fuel report. +6. **Cost** - Populate the cost of this fuel report. +7. **Volume** - Populate the liters that have been added for this fuel report. +8. **Coordinates** - Select the coordinates that relate to this fuel report. + +![Alt text](image-47.png) + + +### Export Fuel Reports ### + +Export fuel reports by selecting the fuel reports and then clicking the 'Export' button. + +![Alt text](image-48.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/getting-started.md b/docs/guides/fleet-ops/getting-started.md new file mode 100644 index 0000000..bc1a27a --- /dev/null +++ b/docs/guides/fleet-ops/getting-started.md @@ -0,0 +1,93 @@ +--- +title: Getting Started +sidebar_position: 15 +slug: /guides/fleet-ops/getting-started +--- + +## Get Started With FleetOps ## + +### 1. Sign Up ### + +‍The first step to revolutionizing your logistics operations is to sign up for Fleetbase. It's as simple as following this link and filling in a few details. + +![Alt text](image-51.png) + +### 2. Invite Users ### + +Invite your team members to join the platform, assign roles, and empower everyone to contribute to your fleet's success. + +![Alt text](image-52.png) + +### 3. Download Driver App ### + +‍Download the Fleetbase Navigator App on your iOS or Android device to take your fleet management wherever you go. + +Once you create a Driver within Fleetbase you can login to the Navigator App using the mobile you have assigned to that Driver. + +![Alt text](image-53.png) + +### 4. Configure Your Operations Flow ### + +Fleetbase can be fully customised to for your operations flow, whether your company conducts food delivery, garage pick up, courier services or logistics operations processes. + +Head to the Order Config within Fleetbase and follow the below step: + +1. Create New - Click 'New Order Config' and enter your operation flow details. ‍ + +2. Custom Fields - Create as many custom fields as you like, these fields will appear in the Order Form + +3. Activity Flow - Create custom activity flow statuses. These status are each activity point the driver either needs to update or gets updated automatically. +‍ +![Alt text](image-54.png) + +### 5. Create your Service Areas ### + +Define service areas and zones within Fleetbase to optimize your routes and streamline your deliveries. + +![Alt text](image-55.png) + +### 6. Set Up Custom Service Rates ### + +‍Our platform offers advanced algorithms to help you create custom service rates that reflect your business objectives. + +![Alt text](image-56.png) + +### 7. Invite Your Drivers ### + +‍Your drivers are the backbone of your fleet, and Fleetbase makes it easy to manage them efficiently. Add drivers to your fleet, track their assignments, and ensure seamless communication at all times. + +![Alt text](image-57.png) + +### 8. Equip Your Fleet ### + +‍From trucks to vans to bikes, add vehicles to your Fleetbase account in Fleets and keep track of their performance, maintenance schedules, and more. Your fleet, your rules! + +![Alt text](image-58.png) + +### 9. Keep Contacts & Customers Organized ### + +‍Managing contacts is a breeze with Fleetbase. Add clients, suppliers, and partners to your contact list and streamline communication for smooth order processing. + +![Alt text](image-59.png) + +### 10. Manage Delivery Locations ### + +‍Simplify your delivery logistics by adding places to your Fleetbase account. Whether it's a client's office or a warehouse, easily access and manage all your delivery locations in one place. + +![Alt text](image-60.png) + +### 11. Seamlessly Create Orders ### + +‍Ready to kickstart your operations? Create orders seamlessly within Fleetbase, specifying all the necessary details for smooth execution, from pickup to delivery. + +### 12. Stay Updated in Real-Time ### + +‍Keep track of your order's progress by updating its activity in real-time. From order acceptance to delivery confirmation, stay informed every step of the way. + +![Alt text](image-61.png) + +### 13. Close the Loop with POD ### + +‍Complete proof of delivery (POD) for your orders to finalize the transaction and ensure customer satisfaction. Capture essential information such as signatures and timestamps to confirm successful deliveries. + +![Alt text](image-62.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/image-1.png b/docs/guides/fleet-ops/image-1.png new file mode 100644 index 0000000..0cab72d Binary files /dev/null and b/docs/guides/fleet-ops/image-1.png differ diff --git a/docs/guides/fleet-ops/image-10.png b/docs/guides/fleet-ops/image-10.png new file mode 100644 index 0000000..79ca28a Binary files /dev/null and b/docs/guides/fleet-ops/image-10.png differ diff --git a/docs/guides/fleet-ops/image-11.png b/docs/guides/fleet-ops/image-11.png new file mode 100644 index 0000000..ca3ee4e Binary files /dev/null and b/docs/guides/fleet-ops/image-11.png differ diff --git a/docs/guides/fleet-ops/image-12.png b/docs/guides/fleet-ops/image-12.png new file mode 100644 index 0000000..f444ecf Binary files /dev/null and b/docs/guides/fleet-ops/image-12.png differ diff --git a/docs/guides/fleet-ops/image-13.png b/docs/guides/fleet-ops/image-13.png new file mode 100644 index 0000000..9d7975d Binary files /dev/null and b/docs/guides/fleet-ops/image-13.png differ diff --git a/docs/guides/fleet-ops/image-14.png b/docs/guides/fleet-ops/image-14.png new file mode 100644 index 0000000..9d7975d Binary files /dev/null and b/docs/guides/fleet-ops/image-14.png differ diff --git a/docs/guides/fleet-ops/image-15.png b/docs/guides/fleet-ops/image-15.png new file mode 100644 index 0000000..1a4cd46 Binary files /dev/null and b/docs/guides/fleet-ops/image-15.png differ diff --git a/docs/guides/fleet-ops/image-16.png b/docs/guides/fleet-ops/image-16.png new file mode 100644 index 0000000..607f0c4 Binary files /dev/null and b/docs/guides/fleet-ops/image-16.png differ diff --git a/docs/guides/fleet-ops/image-17.png b/docs/guides/fleet-ops/image-17.png new file mode 100644 index 0000000..72a565a Binary files /dev/null and b/docs/guides/fleet-ops/image-17.png differ diff --git a/docs/guides/fleet-ops/image-18.png b/docs/guides/fleet-ops/image-18.png new file mode 100644 index 0000000..f880130 Binary files /dev/null and b/docs/guides/fleet-ops/image-18.png differ diff --git a/docs/guides/fleet-ops/image-19.png b/docs/guides/fleet-ops/image-19.png new file mode 100644 index 0000000..0a93713 Binary files /dev/null and b/docs/guides/fleet-ops/image-19.png differ diff --git a/docs/guides/fleet-ops/image-2.png b/docs/guides/fleet-ops/image-2.png new file mode 100644 index 0000000..0ebdb7e Binary files /dev/null and b/docs/guides/fleet-ops/image-2.png differ diff --git a/docs/guides/fleet-ops/image-20.png b/docs/guides/fleet-ops/image-20.png new file mode 100644 index 0000000..8fd4b95 Binary files /dev/null and b/docs/guides/fleet-ops/image-20.png differ diff --git a/docs/guides/fleet-ops/image-21.png b/docs/guides/fleet-ops/image-21.png new file mode 100644 index 0000000..3b0e5a4 Binary files /dev/null and b/docs/guides/fleet-ops/image-21.png differ diff --git a/docs/guides/fleet-ops/image-22.png b/docs/guides/fleet-ops/image-22.png new file mode 100644 index 0000000..702688a Binary files /dev/null and b/docs/guides/fleet-ops/image-22.png differ diff --git a/docs/guides/fleet-ops/image-23.png b/docs/guides/fleet-ops/image-23.png new file mode 100644 index 0000000..adf34b1 Binary files /dev/null and b/docs/guides/fleet-ops/image-23.png differ diff --git a/docs/guides/fleet-ops/image-24.png b/docs/guides/fleet-ops/image-24.png new file mode 100644 index 0000000..adf34b1 Binary files /dev/null and b/docs/guides/fleet-ops/image-24.png differ diff --git a/docs/guides/fleet-ops/image-25.png b/docs/guides/fleet-ops/image-25.png new file mode 100644 index 0000000..1b68b7e Binary files /dev/null and b/docs/guides/fleet-ops/image-25.png differ diff --git a/docs/guides/fleet-ops/image-26.png b/docs/guides/fleet-ops/image-26.png new file mode 100644 index 0000000..d04bb35 Binary files /dev/null and b/docs/guides/fleet-ops/image-26.png differ diff --git a/docs/guides/fleet-ops/image-27.png b/docs/guides/fleet-ops/image-27.png new file mode 100644 index 0000000..f15bbd4 Binary files /dev/null and b/docs/guides/fleet-ops/image-27.png differ diff --git a/docs/guides/fleet-ops/image-28.png b/docs/guides/fleet-ops/image-28.png new file mode 100644 index 0000000..6eaecfd Binary files /dev/null and b/docs/guides/fleet-ops/image-28.png differ diff --git a/docs/guides/fleet-ops/image-29.png b/docs/guides/fleet-ops/image-29.png new file mode 100644 index 0000000..f53685c Binary files /dev/null and b/docs/guides/fleet-ops/image-29.png differ diff --git a/docs/guides/fleet-ops/image-3.png b/docs/guides/fleet-ops/image-3.png new file mode 100644 index 0000000..3787392 Binary files /dev/null and b/docs/guides/fleet-ops/image-3.png differ diff --git a/docs/guides/fleet-ops/image-30.png b/docs/guides/fleet-ops/image-30.png new file mode 100644 index 0000000..7ce8a87 Binary files /dev/null and b/docs/guides/fleet-ops/image-30.png differ diff --git a/docs/guides/fleet-ops/image-31.png b/docs/guides/fleet-ops/image-31.png new file mode 100644 index 0000000..1dac70f Binary files /dev/null and b/docs/guides/fleet-ops/image-31.png differ diff --git a/docs/guides/fleet-ops/image-32.png b/docs/guides/fleet-ops/image-32.png new file mode 100644 index 0000000..f5720c4 Binary files /dev/null and b/docs/guides/fleet-ops/image-32.png differ diff --git a/docs/guides/fleet-ops/image-33.png b/docs/guides/fleet-ops/image-33.png new file mode 100644 index 0000000..af44814 Binary files /dev/null and b/docs/guides/fleet-ops/image-33.png differ diff --git a/docs/guides/fleet-ops/image-34.png b/docs/guides/fleet-ops/image-34.png new file mode 100644 index 0000000..aa42cc4 Binary files /dev/null and b/docs/guides/fleet-ops/image-34.png differ diff --git a/docs/guides/fleet-ops/image-35.png b/docs/guides/fleet-ops/image-35.png new file mode 100644 index 0000000..4a17c3d Binary files /dev/null and b/docs/guides/fleet-ops/image-35.png differ diff --git a/docs/guides/fleet-ops/image-36.png b/docs/guides/fleet-ops/image-36.png new file mode 100644 index 0000000..988e952 Binary files /dev/null and b/docs/guides/fleet-ops/image-36.png differ diff --git a/docs/guides/fleet-ops/image-37.png b/docs/guides/fleet-ops/image-37.png new file mode 100644 index 0000000..e9b7340 Binary files /dev/null and b/docs/guides/fleet-ops/image-37.png differ diff --git a/docs/guides/fleet-ops/image-38.png b/docs/guides/fleet-ops/image-38.png new file mode 100644 index 0000000..f54ebc3 Binary files /dev/null and b/docs/guides/fleet-ops/image-38.png differ diff --git a/docs/guides/fleet-ops/image-39.png b/docs/guides/fleet-ops/image-39.png new file mode 100644 index 0000000..620f043 Binary files /dev/null and b/docs/guides/fleet-ops/image-39.png differ diff --git a/docs/guides/fleet-ops/image-4.png b/docs/guides/fleet-ops/image-4.png new file mode 100644 index 0000000..3787392 Binary files /dev/null and b/docs/guides/fleet-ops/image-4.png differ diff --git a/docs/guides/fleet-ops/image-40.png b/docs/guides/fleet-ops/image-40.png new file mode 100644 index 0000000..620f043 Binary files /dev/null and b/docs/guides/fleet-ops/image-40.png differ diff --git a/docs/guides/fleet-ops/image-41.png b/docs/guides/fleet-ops/image-41.png new file mode 100644 index 0000000..295b4e5 Binary files /dev/null and b/docs/guides/fleet-ops/image-41.png differ diff --git a/docs/guides/fleet-ops/image-42.png b/docs/guides/fleet-ops/image-42.png new file mode 100644 index 0000000..73120e3 Binary files /dev/null and b/docs/guides/fleet-ops/image-42.png differ diff --git a/docs/guides/fleet-ops/image-43.png b/docs/guides/fleet-ops/image-43.png new file mode 100644 index 0000000..f534d98 Binary files /dev/null and b/docs/guides/fleet-ops/image-43.png differ diff --git a/docs/guides/fleet-ops/image-44.png b/docs/guides/fleet-ops/image-44.png new file mode 100644 index 0000000..386f69c Binary files /dev/null and b/docs/guides/fleet-ops/image-44.png differ diff --git a/docs/guides/fleet-ops/image-45.png b/docs/guides/fleet-ops/image-45.png new file mode 100644 index 0000000..55ff515 Binary files /dev/null and b/docs/guides/fleet-ops/image-45.png differ diff --git a/docs/guides/fleet-ops/image-46.png b/docs/guides/fleet-ops/image-46.png new file mode 100644 index 0000000..3c1addc Binary files /dev/null and b/docs/guides/fleet-ops/image-46.png differ diff --git a/docs/guides/fleet-ops/image-47.png b/docs/guides/fleet-ops/image-47.png new file mode 100644 index 0000000..ecf6b7a Binary files /dev/null and b/docs/guides/fleet-ops/image-47.png differ diff --git a/docs/guides/fleet-ops/image-48.png b/docs/guides/fleet-ops/image-48.png new file mode 100644 index 0000000..c1a8dd9 Binary files /dev/null and b/docs/guides/fleet-ops/image-48.png differ diff --git a/docs/guides/fleet-ops/image-49.png b/docs/guides/fleet-ops/image-49.png new file mode 100644 index 0000000..9f36c67 Binary files /dev/null and b/docs/guides/fleet-ops/image-49.png differ diff --git a/docs/guides/fleet-ops/image-5.png b/docs/guides/fleet-ops/image-5.png new file mode 100644 index 0000000..e8a73a3 Binary files /dev/null and b/docs/guides/fleet-ops/image-5.png differ diff --git a/docs/guides/fleet-ops/image-50.png b/docs/guides/fleet-ops/image-50.png new file mode 100644 index 0000000..33763fa Binary files /dev/null and b/docs/guides/fleet-ops/image-50.png differ diff --git a/docs/guides/fleet-ops/image-51.png b/docs/guides/fleet-ops/image-51.png new file mode 100644 index 0000000..15092b2 Binary files /dev/null and b/docs/guides/fleet-ops/image-51.png differ diff --git a/docs/guides/fleet-ops/image-52.png b/docs/guides/fleet-ops/image-52.png new file mode 100644 index 0000000..ebb84f8 Binary files /dev/null and b/docs/guides/fleet-ops/image-52.png differ diff --git a/docs/guides/fleet-ops/image-53.png b/docs/guides/fleet-ops/image-53.png new file mode 100644 index 0000000..6bb3b7b Binary files /dev/null and b/docs/guides/fleet-ops/image-53.png differ diff --git a/docs/guides/fleet-ops/image-54.png b/docs/guides/fleet-ops/image-54.png new file mode 100644 index 0000000..5073fd1 Binary files /dev/null and b/docs/guides/fleet-ops/image-54.png differ diff --git a/docs/guides/fleet-ops/image-55.png b/docs/guides/fleet-ops/image-55.png new file mode 100644 index 0000000..c70e07b Binary files /dev/null and b/docs/guides/fleet-ops/image-55.png differ diff --git a/docs/guides/fleet-ops/image-56.png b/docs/guides/fleet-ops/image-56.png new file mode 100644 index 0000000..ee9ee0c Binary files /dev/null and b/docs/guides/fleet-ops/image-56.png differ diff --git a/docs/guides/fleet-ops/image-57.png b/docs/guides/fleet-ops/image-57.png new file mode 100644 index 0000000..23da811 Binary files /dev/null and b/docs/guides/fleet-ops/image-57.png differ diff --git a/docs/guides/fleet-ops/image-58.png b/docs/guides/fleet-ops/image-58.png new file mode 100644 index 0000000..4428b14 Binary files /dev/null and b/docs/guides/fleet-ops/image-58.png differ diff --git a/docs/guides/fleet-ops/image-59.png b/docs/guides/fleet-ops/image-59.png new file mode 100644 index 0000000..0fd9692 Binary files /dev/null and b/docs/guides/fleet-ops/image-59.png differ diff --git a/docs/guides/fleet-ops/image-6.png b/docs/guides/fleet-ops/image-6.png new file mode 100644 index 0000000..ba7d67e Binary files /dev/null and b/docs/guides/fleet-ops/image-6.png differ diff --git a/docs/guides/fleet-ops/image-60.png b/docs/guides/fleet-ops/image-60.png new file mode 100644 index 0000000..d868482 Binary files /dev/null and b/docs/guides/fleet-ops/image-60.png differ diff --git a/docs/guides/fleet-ops/image-61.png b/docs/guides/fleet-ops/image-61.png new file mode 100644 index 0000000..847f6ad Binary files /dev/null and b/docs/guides/fleet-ops/image-61.png differ diff --git a/docs/guides/fleet-ops/image-62.png b/docs/guides/fleet-ops/image-62.png new file mode 100644 index 0000000..7afb2f9 Binary files /dev/null and b/docs/guides/fleet-ops/image-62.png differ diff --git a/docs/guides/fleet-ops/image-7.png b/docs/guides/fleet-ops/image-7.png new file mode 100644 index 0000000..70c4750 Binary files /dev/null and b/docs/guides/fleet-ops/image-7.png differ diff --git a/docs/guides/fleet-ops/image-8.png b/docs/guides/fleet-ops/image-8.png new file mode 100644 index 0000000..add1d08 Binary files /dev/null and b/docs/guides/fleet-ops/image-8.png differ diff --git a/docs/guides/fleet-ops/image-9.png b/docs/guides/fleet-ops/image-9.png new file mode 100644 index 0000000..ea0b846 Binary files /dev/null and b/docs/guides/fleet-ops/image-9.png differ diff --git a/docs/guides/fleet-ops/image.png b/docs/guides/fleet-ops/image.png new file mode 100644 index 0000000..404a795 Binary files /dev/null and b/docs/guides/fleet-ops/image.png differ diff --git a/docs/guides/fleet-ops/introduction.md b/docs/guides/fleet-ops/introduction.md index 821286e..c9a48c0 100644 --- a/docs/guides/fleet-ops/introduction.md +++ b/docs/guides/fleet-ops/introduction.md @@ -3,3 +3,83 @@ title: Introduction sidebar_position: 1 slug: /guides/fleet-ops/introduction --- +## What is FleetOps? + +FleetOps is a dynamic last-mile operations and fleet management system. + +### Dashboard + +The Dashboard is your central place for operations. + +- View Drivers on Map +- Create Orders +- View Orders +- View Service Areas +- Create Service Areas +- Export Orders + +Navigate to the 'Dashboard' section to learn more. + +### Service Rates + +Create custom service rates for your different delivery operations. + +Navigate to the 'Service Rates' section to learn more. + +### Scheduler + +The scheduler allows your to have an overview of all your orders, and view your schedule in a calandar view. + +Naviagte to the 'Scheduler' section to learn more. + +### Drivers + +The Drivers section is for management and overview of all the drivers in your organisation. + +Navigate to the 'Drivers' section to learn more. + +### Vehicles + +The Vehicles section is for management and overview of all the vehicles in your organisation. + +Navigate to the 'Vehicles' section to learn more. + +### Fleets + +The Fleets section is for management and overview of all the fleets in your organisation. + +Navigate to the 'Fleets' section to learn more. + +### Vendors + +The Vendors section is for management and overview of all the vendors in your organisation. + +Navigate to the 'Vendors' section to learn more. + +### Contacts + +The Contacts section is for management and overview of all the contacts in your organisation. + +Navigate to the 'Contacts' section to learn more. + +### Places + +The Places section is for management and overview of all the places in your organisation. + +Navigate to the 'Places' section to learn more. + +### Fuel Reports + +The Fuel Reports section is for management and overview of all the fuel reports in your organisation. + +Navigate to the 'Fuel Reports' section to learn more. + +### Issues + +The Issues section is for management and overview of all the issues in your organisation. + +Navigate to the 'Issues' section to learn more. + +### Navigator App + + diff --git a/docs/guides/fleet-ops/issues.md b/docs/guides/fleet-ops/issues.md new file mode 100644 index 0000000..d2bbda7 --- /dev/null +++ b/docs/guides/fleet-ops/issues.md @@ -0,0 +1,37 @@ +--- +title: Issues +sidebar_position: 13 +slug: /guides/fleet-ops/issues +--- + +## Overview + +Operations can create and track issues in real time as they occur in the field. This can be created here and also by the driver on the Navigator App. + +![Alt text](image-46.png) + +### Create Fuel Reports ### + +You can create a fuel reports by clicking on the button on the top of the panel. + +1. **Reported By** - Select the user who is reporting this issue. +2. **Assigned To** - Select the user that is required to resolve this issue. +3. **Driver** - Select the driver assigned to the issue. +4. **Vehicle** - Select the vehicle assigned to the issue. +5. **Issue Type** - Populate the type of issue. +6. **Issue Category** - Select the category of the issue. +7. **Issue Report** - Describe the full details of the issue. +8. **Issue Tags** - Add multiple tags for this issue for easier searching. +8. **Issue Priority** - Select the priority of this issue. +8. **Status** - Select tcurrent status of this issue. +8. **Coordinates** - Select the coordinates that relate to this iisue. + + +![Alt text](image-49.png) + + +### Export Issues ### + +Export issues by selecting the issues and then clicking the 'Export' button. + +![Alt text](image-50.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/order-configuration.md b/docs/guides/fleet-ops/order-configuration.md index c489b8d..58075b5 100644 --- a/docs/guides/fleet-ops/order-configuration.md +++ b/docs/guides/fleet-ops/order-configuration.md @@ -1,5 +1,82 @@ --- title: Order Configuration -sidebar_position: 2 +sidebar_position: 5 slug: /guides/fleet-ops/order-config --- + +## Overview + +The order configuration section in Fleetbase is the backbone of what fields are included when a new order is created, the activity flow and the activity statuses of the orders, and also the type of entity that is attached to the order. + +When creating a new order, once you specify the order type, this will pull in the fields and logic configured in that particular order configuration. + +### Creating New Order Configuration + +![Alt text](image-22.png) + +1. **New Order Config** - Click here to create a new order configuration. +2. **Config Name** - Set the name of the configuration. +3. **Config Description** - Set the description of the order configuration. +4. **Config Tag** - Set tags for this order configuration. + +### Select Order Configuration + +From the drop down, you can see all of the order configs you have created, select one to view the details, custom fields, activity flows and entities. + +![Alt text](image-23.png) + +### Creating Custom Fields + +Custom fields can be created and importing into the new order form when creating a new orders. This can be for additonal fields that are not in the basic order forms. These fields can also be used to create custom activity logic as well. + +![Alt text](image-25.png) + +1. **Create Field Group** - Click here to create a group of fields, you can create as many as you like. +2. **Create Field** - Click here to create the custom field, this will sit within the field group. +3. **Field Lable** - This is the name of the field. +4. **Field Description** - This is the description of the field. +5. **Field Help Text** - Set a help text for this field. +6. **Field Is Required** - If this is toggled, you wont be able to submit the order without this field populated. +7. **Field Editable** - If this is toggled, you will be able to edit this field. +8. **Field Type** - You can select from a number of different field types, such as date / time input, money input, radio button etc. +9. **Field Option** - If you select radio button, you can add in different options for the user to choose from. +10. **Column Span** - You can choose how many columns this field will span over. + +Once you have finished, click 'Create New Field', this will be available when you create a new order and select this order config. + +### Creating Custom Activity Flow + +Cutsom activity flows can be created so that specific logic conditions can be created, depending on the companies requirements. These activity flows will be what the driver and the operations staff will have to confirm through, before the order can be completed. For example, you can create + +![Alt text](image-26.png) + +1. **Order Status** - You can see each order status and the details here, when you add a new status, it will appear in this flow chart. +2. **Create New Status** - Click the + button to create a new order status and pull out the activity status details. +3. **Status Key** - Enter a key that will be used for programatic decision making. +4. **Status Code** - This is where you can set a unique identifier. +5. **Status** - This is what you will set to show the status to the end customer. +6. **Details** - This is the details of the status that will be sent to the end customer. +7. **Completes Order** - If this is toggled, this status will complete the order. +8. **POD** - If this is toggled, this status will require a proof of delivery +9. **Select POD** - Select from the different types of proof of delivery. +10. **Activity Logic** - This is where (from your custom fields) you can set custom logic conditions. You can create as many logic conditions as you like. Please reach out to us if you need more assistance with this. +11. **Events** - Add a specific event to this status. + +Once you have finalised, click save. + +### Creating Custom Entities + +Entities in Fleetbase are the types of specifics of the payloads that are moving moved. + +For example, here you can create containers, parcle types, waste types etc etc. + +Again, once you create an entitiy type, once you pull this specific order configuration in, then these entities will be assigned to the order as well. + +![Alt text](image-27.png) + +1. **New Custom Entity** - Click here to create the new custom entity. +2. **Details** - Populate the main details of the entity, for example the Name, Description & Type. +3. **Image** - Add in a new image for this entity. +4. **Measurements** - Set your custom measurements for the entity. + +Once you save, your custom order config will be completed, please see the 'Order' section for steps on how to create a new order. diff --git a/docs/guides/fleet-ops/places.md b/docs/guides/fleet-ops/places.md new file mode 100644 index 0000000..56cb9b2 --- /dev/null +++ b/docs/guides/fleet-ops/places.md @@ -0,0 +1,28 @@ +--- +title: Places +sidebar_position: 11 +slug: /guides/fleet-ops/places +--- + +## Overview + +Places are used to assign waypoints to orders. Places can be automatically created when the order is created, or you can create them manually and assign when creating the order. + +![Alt text](image-43.png) + +### Create Place ### + +You can create a new place by clicking on the button on the top of the panel. + +1. **Name** - Populate the name for this place, you can search by this name when creating the order. +2. **Select From Map** - Add in the address by selecting 'Select from map', once you do this, the form will auto populate. +3. **Avatar** - Select the custom avatar to view the place on the map. + +![Alt text](image-44.png) + + +### Export Places ### + +Export places by selecting the places and then clicking the 'Export' button. + +![Alt text](image-45.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/scheduler.md b/docs/guides/fleet-ops/scheduler.md new file mode 100644 index 0000000..5d54980 --- /dev/null +++ b/docs/guides/fleet-ops/scheduler.md @@ -0,0 +1,19 @@ +--- +title: Scheduler +sidebar_position: 4 +slug: /guides/fleet-ops/scheduler +--- + +## Overview + +The Scheduler shows all of your Unscheduled and Scheduled orders, you can then view all of them in a easy to digest calendar view. + +Additional Zones can be created within the Service Area. + +![Alt text](image-20.png) + +1. **Unscheduled Orders** - All of these orders have been created but not given a scheduled date for delivery. +2. **Scheduled Orders** - All of these orders have been created with a scheduled delivery date and time. . +3. **Orders** - These are the orders that have been scheduled, if you want to see more details for a specific order, you can click into it. + +![Alt text](image-21.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/service-areas.md b/docs/guides/fleet-ops/service-areas.md new file mode 100644 index 0000000..fb6a66f --- /dev/null +++ b/docs/guides/fleet-ops/service-areas.md @@ -0,0 +1,32 @@ +--- +title: Service Areas +sidebar_position: 3 +slug: /guides/fleet-ops/service-areas +--- + +## Overview + +Service areas in FleetOps are used to assign fleets, vehicles, drivers and even service rates to. Custom logic can be created on the back end as well, for things like IOT device integrations and geofencing. + +Additional Zones can be created within the Service Area. + +![Alt text](image-19.png) + +### Create Service Area + +From the Dashboard section, you can view and create new service areas from the 4th button on the bar on the left hand side. + +![Alt text](image-17.png) + +Below are the steps needed to create Service Areas & Zones. + +1. **Manage Service Area** - Navigate to the Service Area section. +2. **Create Service Area** - Click on 'Create New Service Area'. Once you click on this, there will be tools for you to create the service area. +3. **Select Drawing Tool** - Select the type of drawing tool you would like to use to draw your service area. +4. **Draw and Confirm** - Use the drawing tool to create the service area you would like to start with. Once you connect the polygon back together, the service area will be created. + +### Create Zones + +Zones are geofenced areas within Service Areas. Once the service are has been created, you can Right Click into the service area, and select 'Create Zone'. + +![Alt text](image-18.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/service-rates.md b/docs/guides/fleet-ops/service-rates.md new file mode 100644 index 0000000..5167c5a --- /dev/null +++ b/docs/guides/fleet-ops/service-rates.md @@ -0,0 +1,32 @@ +--- +title: Service Rates +sidebar_position: 3 +slug: /guides/fleet-ops/service-rates +--- + +## Overview + +Service Rates in Fleetops are used to calculate delivery fees automatically when a new order is created. + +Users can link service rates to specific order types (see Order Configuration section) and even create custom algorithims to calulate service rate fees. + +![Alt text](image-13.png) + +### Create Service Rates + +Once you have navigated to the Service Area section, you can create a new Service Rate by clicking 'New' + +1. **Service Name** - This is the name for your service rate. +2. **Service Order Type** - Restricting this service rate to the order type means, when you create the order and select the specific service type, only this rate calculation will be used. +3. **Base Fee** - The standard base fee you want to set for this service rate. +4. **Rate Calculation Method** + - **Fixed Meter** - This option defines a fixed fee per kilometer. + - **Per Meter** - this optons allows the service to be calculated per kilometer or meter, this means you define a flat fee which is then multiplied by the distance which can be either meter or kilometer. + - **Per Drop-off** - This options defines a dixed fee per drop-offs + - **Custom Algorithm** - This option is to define a custom calculation for this service's fee with variables. Note that variables must be wrapped in a single curly brace. +5. **Duration Terms** - You can add additional terms of service regarding duration for this service rate. +6. **Cash on Delivery** - Toggle this to enable cash on delivery for orders. +7. **Peak Hours** - Toggle this to add an additional fee for peak hours. +8. **Restrict Service** - Restrict this service to an order type, you can learn more about this in the Order Configuration. + +![Alt text](image-15.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/vehicles.md b/docs/guides/fleet-ops/vehicles.md new file mode 100644 index 0000000..29e4b0b --- /dev/null +++ b/docs/guides/fleet-ops/vehicles.md @@ -0,0 +1,26 @@ +--- +title: Vehicles +sidebar_position: 7 +slug: /guides/fleet-ops/vehicles +--- + +## Overview + +Vehicles can be used to assign new orders, vehicles and fleets to. + +![Alt text](image-28.png) + +### Create Drivers + +You can create new orders by clicking on the button on the top of the panel. + +1. **Vehicle Details** - Add in the details of the vehicle. +2. **Avatar** - Select an avatar, this will be displayed when you view the vehicle on the map. + +![Alt text](image-31.png) + +### Export Vehicles ### + +Export vehicles by selecting the drivers and then clicking the 'Export' button. + +![Alt text](image-32.png) \ No newline at end of file diff --git a/docs/guides/fleet-ops/vendors.md b/docs/guides/fleet-ops/vendors.md new file mode 100644 index 0000000..75dceab --- /dev/null +++ b/docs/guides/fleet-ops/vendors.md @@ -0,0 +1,37 @@ +--- +title: Vendors +sidebar_position: 9 +slug: /guides/fleet-ops/vendors +--- + +## Overview + +Vendors can be defined in multiple ways. + +1. **Vendors** - This can be a 3rd party logistics company that is faciliting the delivery on your behalf, or it can be defined as your customer you are delivery goods on behalf of. +2. **Integrated Vendors** - Integrated vendors are the same as the above, but there is an exisiting integration either to recieve orders, or assign delivery orders to them, and recieved automated updates. + +![Alt text](image-36.png) + +### Create Integrated Vendor ### + +You can create a new vendor by clicking on the button on the top of the panel. + +1. **Select Vendor Type** - Select 'Integrated Vendor'. +2. **Choose Vendor Provider** - Select from the list of integrated vendor, then populate your API details for this vendor. + +![Alt text](image-37.png) + +### Create Custom Vendor ### + +You can create a new vendor by clicking on the button on the top of the panel. + +1. **Select Vendor Type** - Select 'Custom Vendor'. +2. **Vendor Details** - Populate the details for your custom vendor. + + +### Export Vendors ### + +Export vendors by selecting the vendors and then clicking the 'Export' button. + +![Alt text](image-38.png) \ No newline at end of file diff --git a/docs/guides/iam/_category_.json b/docs/guides/iam/_category_.json new file mode 100644 index 0000000..a0fb8c8 --- /dev/null +++ b/docs/guides/iam/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "IAM", + "position": 5, + "link": { + "type": "generated-index", + "description": "Getting Started with using Fleetbase" + } +} diff --git a/docs/guides/iam/image.png b/docs/guides/iam/image.png new file mode 100644 index 0000000..5f05cf0 Binary files /dev/null and b/docs/guides/iam/image.png differ diff --git a/docs/guides/iam/introduction.md b/docs/guides/iam/introduction.md new file mode 100644 index 0000000..dd29884 --- /dev/null +++ b/docs/guides/iam/introduction.md @@ -0,0 +1,23 @@ +--- +title: Introduction +sidebar_position: 1 +slug: /guides/iam/introduction +--- +## Overview + +You can view all of your users, roles, groups and policies in the dashboard. + +### Users + +Add additional users to your organisation. You can then assign specific roles to these users or add them to groups. + +![Alt text](image.png) + +### Groups + +Add your existing users to groups to assign them to certain roles and policies. + +### Roles + +You can create specific roles which limit certain actions to Fleetbase features. Once you client New you can select which features are will be available for users or groups assigned to this role. + diff --git a/docs/guides/storefront/customers.md b/docs/guides/storefront/customers.md new file mode 100644 index 0000000..54da7a0 --- /dev/null +++ b/docs/guides/storefront/customers.md @@ -0,0 +1,19 @@ +--- +title: Customers +sidebar_position: 1 +slug: /guides/storefront/customers +--- + +## Customers + +View all customers by clicking on the customers section under Resources + +### Create Customers + +You can create new customers 2 ways: + +1. Customers are automatically created when customers order through your Storefront App + +2. You can also create Customers manually by clicking ‘New’ on the top right + +![Alt text](image-6.png) \ No newline at end of file diff --git a/docs/guides/storefront/image-1.png b/docs/guides/storefront/image-1.png new file mode 100644 index 0000000..fd08af3 Binary files /dev/null and b/docs/guides/storefront/image-1.png differ diff --git a/docs/guides/storefront/image-10.png b/docs/guides/storefront/image-10.png new file mode 100644 index 0000000..091b4f6 Binary files /dev/null and b/docs/guides/storefront/image-10.png differ diff --git a/docs/guides/storefront/image-11.png b/docs/guides/storefront/image-11.png new file mode 100644 index 0000000..0690452 Binary files /dev/null and b/docs/guides/storefront/image-11.png differ diff --git a/docs/guides/storefront/image-12.png b/docs/guides/storefront/image-12.png new file mode 100644 index 0000000..8d2568b Binary files /dev/null and b/docs/guides/storefront/image-12.png differ diff --git a/docs/guides/storefront/image-2.png b/docs/guides/storefront/image-2.png new file mode 100644 index 0000000..9d08937 Binary files /dev/null and b/docs/guides/storefront/image-2.png differ diff --git a/docs/guides/storefront/image-3.png b/docs/guides/storefront/image-3.png new file mode 100644 index 0000000..9a8616d Binary files /dev/null and b/docs/guides/storefront/image-3.png differ diff --git a/docs/guides/storefront/image-4.png b/docs/guides/storefront/image-4.png new file mode 100644 index 0000000..62df6f7 Binary files /dev/null and b/docs/guides/storefront/image-4.png differ diff --git a/docs/guides/storefront/image-5.png b/docs/guides/storefront/image-5.png new file mode 100644 index 0000000..5485de0 Binary files /dev/null and b/docs/guides/storefront/image-5.png differ diff --git a/docs/guides/storefront/image-6.png b/docs/guides/storefront/image-6.png new file mode 100644 index 0000000..1a3c1eb Binary files /dev/null and b/docs/guides/storefront/image-6.png differ diff --git a/docs/guides/storefront/image-7.png b/docs/guides/storefront/image-7.png new file mode 100644 index 0000000..a27706d Binary files /dev/null and b/docs/guides/storefront/image-7.png differ diff --git a/docs/guides/storefront/image-8.png b/docs/guides/storefront/image-8.png new file mode 100644 index 0000000..5d542e3 Binary files /dev/null and b/docs/guides/storefront/image-8.png differ diff --git a/docs/guides/storefront/image-9.png b/docs/guides/storefront/image-9.png new file mode 100644 index 0000000..13eedbd Binary files /dev/null and b/docs/guides/storefront/image-9.png differ diff --git a/docs/guides/storefront/image.png b/docs/guides/storefront/image.png new file mode 100644 index 0000000..36d8c6e Binary files /dev/null and b/docs/guides/storefront/image.png differ diff --git a/docs/guides/storefront/introduction.md b/docs/guides/storefront/introduction.md index c46448b..6cdf1d5 100644 --- a/docs/guides/storefront/introduction.md +++ b/docs/guides/storefront/introduction.md @@ -3,3 +3,17 @@ title: Introduction sidebar_position: 1 slug: /guides/storefront/introduction --- + +## Overview + +Storefront is a headless e-commerce service which functions as an extension within Fleetbase + +Fleetbase Storefront provides several API-first approaches to products, carts, categories, customers, and checkout flow giving developers more control over the shopping experience. + +This project is to provide an open-sourced hyperlocal shopping app which can be fully customised and adapted to personal and commercial projects. + +This Storefront app is built with React Native to provide react native developers a head start building with Fleetbase and Storefront. + +The dashboard is where you can manage all of your orders, customers, stores and current earnings. + +![Alt text](image-8.png) \ No newline at end of file diff --git a/docs/guides/storefront/networks.md b/docs/guides/storefront/networks.md new file mode 100644 index 0000000..a148236 --- /dev/null +++ b/docs/guides/storefront/networks.md @@ -0,0 +1,64 @@ +--- +title: Networks +sidebar_position: 1 +slug: /guides/storefront/networks +--- + +## Networks + +Storefront allows you to quickly create marketplaces, enabling multiple storefronts to sell under an umbrella. When you create the network you define your rules and you're able to expand your network through invitations.. + +### Create Networks + +You can create new Network by clicking on the button on the top of the panel. + +1. **Name** - The name of the network. +2. **Description** - The description of the network. +2. **Currency** - The currency of the network. + +![Alt text](image.png) + +### Network Settings + +Configure the main settings of your network. + +![Alt text](image-1.png) + +1. **Name** - The name of your network. +2. **Description** - The description of the network. +2. **Tags** - Create tags for this Storefront to be selected on your app. +2. **Currency** - The currency of the network. +2. **Contact & Social** - Add contact details and social media accounts to be shown on your storefront app. +2. **Logo & Backdrop** - Add in a logo and your backdrop for your network. +2. **Images & Videos** - Add images & videos to your network. +2. **Alerts** - You can add users in your organisation to receive alerts for new orders that are placed on your Storefront App. +2. **Online** - Toggle if this network is online and available on your Storefront app. +2. **Enable Tax** - Toggle this to enable a tax percentage on this network orders. +2. **Auto Accept** - Toggle this to auto accept orders when placed by your customers on the Storefront App. +2. **Require Proof of Delivery** - Select whether proof of delivery is required on your network orders. Select the type of POD using the drop down. +2. **Enable Cash on Delivery** - Toggle for cash on delivery option for the orders in the network. +2. **Enable Order PickUp** - Toggle this for the option for your customers to collect orders from your network locations. +2. **Enable Tips** - Toggle for allowing tips on orders. +2. **Enable Delivery Tips** - Toggle for allowing tips for drivers on orders. +2. **Enable Multi-cart Checkout** - Toggle this to allow customers to order products / services from multiple vendors. +**Enable User Reviews** - Enable your customers to leave reviews on the individual Storefronts. + +### Stores ### + +You can invite and add multiple stores to your network. + +![Alt text](image-2.png) + + +### Orders ### + +View all of the orders that have been recieved from this network. + +![Alt text](image-3.png) + +### Customers ### + +View all of the customers that have been created from this orders in this network. + +![Alt text](image-4.png) + diff --git a/docs/guides/storefront/orders.md b/docs/guides/storefront/orders.md new file mode 100644 index 0000000..2b67402 --- /dev/null +++ b/docs/guides/storefront/orders.md @@ -0,0 +1,15 @@ +--- +title: Orders +sidebar_position: 1 +slug: /guides/storefront/orders +--- + +## Orders + +All of your orders that are generated form your Strorefront. + +### View Orders + +All of the orders that are generated by your customers from your Storefront App will be available to view, accept or reject from the orders section. + +![Alt text](image-5.png) \ No newline at end of file diff --git a/docs/guides/storefront/products.md b/docs/guides/storefront/products.md new file mode 100644 index 0000000..d3319ad --- /dev/null +++ b/docs/guides/storefront/products.md @@ -0,0 +1,43 @@ +--- +title: Products +sidebar_position: 1 +slug: /guides/storefront/products +--- + +## Products + +You can structure your storefront app with categories and products. + +These will be automatically displayed on your mobile app for your customers order or schedule your services. + +### Create Categories + +You can create categories to add your products or services to. + +1. **Create Order** - Click ‘Create Category’ from the Product section +2. **Enter Details** - Enter the details to create the category. + +![Alt text](image-7.png) + +### Create Products & Services + +Add products and services to be made available on your Storefront app by clicking ‘New’ inside the product category. + +**Details** - Add the specific details for the product or service. +**Product Name** - Name of the product. +**Product Description** - Description of the product. +**Product Tags** - Make tags on your storefront to group products to. +**Product SKU** - the SKU of the product. +**Price** - The price the customer will play for your product. +**Sale Price** - Add a sale price if the product is on sale. +**Metadata** - Add any metadata for this product. +**Translations** - Translate any product details by selecting a language from the dropdown menu. +**This is a Service** - Selecting this will show this product as a service on your Strorefront App. +**The Product is On Sale** - Selecting this will show that this product is on sale. +**This Product is Recommended** - Selecting this will show this product is recommended. +**This Product Is Available** - Selecting this will show that the product is available for purchase. +**Variants** - Adding new variants to products allow your customers to select variations of the product which suits their preference. +**Add-Ons** - Create pre set add ons for your customers to select from. +**Availability** - Set which times this product is available. +**Images** - Add images for this product. +**Youtube** - Add You tube links for this product. diff --git a/docs/guides/storefront/storefront-config.md b/docs/guides/storefront/storefront-config.md new file mode 100644 index 0000000..d548725 --- /dev/null +++ b/docs/guides/storefront/storefront-config.md @@ -0,0 +1,67 @@ +--- +title: Settings +sidebar_position: 1 +slug: /guides/storefront/config +--- + +## Settings + +The first thing to do in order to launch your Storefront app and so your customers can start purchasing your products or services is to create this storefronts main settings. + + +### General Settings + +The general settings are the backbone of your Store. + +![Alt text](image-9.png) + +1. **Name** - The name of your Store. +2. **Description** - The description of the Store. +2. **Tags** - Create tags for this Storefront to be selected on your app. +2. **Currency** - The currency of the store. +2. **Contact & Social** - Add contact details and social media accounts to be shown on your storefront app. +2. **Logo & Backdrop** - Add in a logo and your backdrop for your store. +2. **Images & Videos** - Add images & videos to your store. +2. **Alerts** - You can add users in your organisation to receive alerts for new orders that are placed on your Storefront App. +2. **Online** - Toggle if this store is online and available on your Storefront app. +2. **Enable Tax** - Toggle this to enable a tax percentage on this stores orders. +2. **Auto Accept** - Toggle this to auto accept orders when placed by your customers on the Storefront App. +2. **Require Proof of Delivery** - Select whether proof of delivery is required on your Storefront orders. Select the type of POD using the drop down. +2. **Enable Cash on Delivery** - Toggle for cash on delivery option for the orders in the store. +2. **Enable Order PickUp** - Toggle this for the option for your customers to collect orders from your Storefront locations. +2. **Enable Tips** - Toggle for allowing tips on orders. +2. **Enable Delivery Tips** - Toggle for allowing tips for drivers on orders. +2. **Enable Multi-cart Checkout** - Toggle this to allow customers to order products / services from multiple vendors. +**Enable User Reviews** - Enable your customers to leave reviews on the individual Storefronts. + + +### Locations ### + +Locations are the pick up location for the products or services that are purchased from this Storefront. + +![Alt text](image-10.png) + +1. **Create New Locations** - Add your Storefront locations for your customers to order from. +2. **Name** - Create the name of the location. +2. **Add Address** - dd the address of the location. +2. **Add Your Store Hours** - Once you have created the Store location, you can add the timings that the Store location is available. + +### Payment Gateway Settings ### + +You can add your own payment gateway specifically for orders which are executed for this Network. + +![Alt text](image-11.png) + +1. **Gateway Type** - Choose from the list of preset gateways or create your own. +2. **Gateway Name** - Create a gateway name. +2. **Gateway Code** - Create a code that is identifiable for the SDK. +2. **Callback URL** - Add a call back URL. +2. **Return URL** - Add a return URL. + +### Notification Channels ### + +Add your own Notification channel for example from Apple Push Notifications. + +![Alt text](image-12.png) + + diff --git a/docs/introduction.md b/docs/introduction.md index a54f540..ffa0ef5 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -4,12 +4,40 @@ sidebar_position: 1 slug: / --- -## What is Fleetbase? +### What is Fleetbase? +**An introduction to the Fleetbase logistics and supply chain operating system.** Fleetbase is a modular logistics and supply chain operating system designed to streamline management, planning, optimization, and operational control across various sectors of the supply chain industry. -## How does it work? +### How does it work? -## Why Fleetbase? +Fleetbase operates through a core system that integrates seamlessly with various modular components and extensions, each designed to address specific areas of the logistics and supply chain processes. The system includes a powerful API that connects these components, allowing for real-time data flow and communication between the front-end interfaces and backend services. Fleetbase leverages modern technologies such as Laravel for the API, Ember.js for the frontend, and robust databases like MySQL and Redis to ensure high performance and reliability. -## Key Features \ No newline at end of file +### Why Fleetbase? + +Fleetbase stands out in the logistics software landscape due to its exceptional modularity, scalability, and the comprehensive feature set it offers: + +- **Extensible:** Fleetbase’s modular architecture allows for the creation of installable extensions, enhancing functionality and adaptability to meet specific operational needs. +- **Developer Friendly:** Offers a RESTful API, real-time communication through sockets, and extensive webhook support for seamless integration with external systems or the development of tailored applications. +- **Native Apps:** A suite of open-source native applications specifically designed to support both operational and customer-facing activities, ensuring a coherent experience across different touchpoints. +- **Collaboration:** Features a dedicated chat and comments system that facilitates effective collaboration and communication within your organization, enhancing teamwork and information flow. +- **Security:** Prioritizes data protection with secure data encryption, adherence to industry-standard security practices, and a dynamic Identity and Access Management (IAM) system to safeguard your information. +- **Telematics:** Supports integration with hardware devices and sensors, providing enhanced feedback and visibility into your operations, essential for real-time decision-making. +- **Internationalized:** Fully supports multiple languages, making it a versatile choice for global operations and a diverse user base. +- **Framework:** Built on a PHP core with logistics and supply chain-specific abstractions, which streamlines the development of extensions and custom solutions. +- **Dynamic:** Features configurable rules, flows, and logic that drive powerful automation and extensive customization capabilities to adapt to evolving business needs. +- **UI/UX:** Boasts a clean, responsive, and user-friendly interface designed for efficient management and operations, accessible from both desktop and mobile devices. +- **Dashboards:** Enables the creation of custom dashboards and widgets that offer comprehensive visibility into your operations, helping you monitor and manage with precision. +- **Scalability:** Designed with scalability in mind, Fleetbase’s infrastructure supports uninterrupted growth, capable of handling increasing volumes of data and expanding user demands as your business grows. +- **Continuous Improvements:** Committed to continuous enhancement, Fleetbase regularly introduces updates that optimize performance, add new features, and improve the overall user experience. +- **Open Source:** Flexible deployment options include on-premise or cloud-based setups, allowing you to choose the solution that best fits your organization's needs and preferences. + +### Key Features + +- **Dynamic Routing and Scheduling**: Optimize routes and schedules in real-time to reduce costs and improve delivery times. +- **Real-time Tracking**: Track vehicles, shipments, and assets with precision in real-time to enhance transparency and accountability. +- **Automation Tools**: Automate various aspects of the supply chain, from order processing to inventory management, reducing manual errors and increasing efficiency. +- **Extensive Integrations**: Seamlessly integrate with existing systems and third-party services to expand capabilities and leverage additional functionalities. +- **Robust Security**: Advanced security protocols to protect data integrity and privacy, ensuring that your business and customer information is secure. + +Fleetbase is not just a platform; it's a comprehensive solution engineered to transform the logistics and supply chain operations of any business, paving the way for a more efficient and reliable future in the industry. \ No newline at end of file diff --git a/docs/quick-start.md b/docs/quick-start.md index ef66f97..3f74da5 100644 --- a/docs/quick-start.md +++ b/docs/quick-start.md @@ -6,4 +6,60 @@ slug: /quick-start # Quick Start -If you have a bit of developer experience you can get started with the open-source version of Fleetbase within 10 to 15 minutes. \ No newline at end of file +Get started with the open-source version of Fleetbase in just 10 to 15 minutes. This guide is intended for developers with basic familiarity with command line tools and development processes. + +## Prerequisites + +Before you begin, ensure you have Docker installed on your machine. This guide uses Docker to simplify the setup of Fleetbase. + +## Installation Steps + +```bash +# 1. Clone the repository and enter directory: +git clone git@github.com:fleetbase/fleetbase.git && cd fleetbase + +# 2. Start the services using docker-compose: +docker-compose up -d + +# 3. Enter the application container (could also be `fleetbase_application_1`): +docker exec -ti fleetbase-application-1 bash + +# 4. Run the Deploy script: +sh deploy.sh +``` +## Configuration + +There is various environment variables and services which are required to successfuly run Fleetbase depending on your setup. For a local/development setup the default environment variables should be enough, but if you're running it on AWS, DigitalOcean, Azure, or some other cloud provider you may need to tweak the configuration. + +### Fleetbase API Configuration + +- `CONSOLE_HOST`: Specifies the host and port for the Fleetbase console. +- `SOCKETCLUSTER_HOST`: Specifices the host of your SocketCluster service. +- `SOCKETCLUSTER_PORT`: Specifices the port of your SocketCluster service. (Defaults to 38000) +- `SOCKETCLUSTER_SECURE`: Specifices if the SocketCluster service should use WSS or WS to connect. (Defaults to `false`) +- `GOOGLE_MAPS_API_KEY`: Required if you plan to use Google API for geocoding. (More providers coming later) +- `IPINFO_API_KEY`: Used to retrieve user information based on their IP address. +- `TWILIO_SID`, `TWILIO_TOKEN`, `TWILIO_FROM`: Required for Fleetbase to send SMS via Twilio. (More providers coming later) + +Setting up mail is also very important for Fleetbase to send critical emails and verifications. Since Fleetbase is built using Laravel you can use the Laravel mail guide for setting up and configuring emails in Fleetbase. + +### Fleetbase Console Configuration + +Modify the environment settings in the `console/environments/*` directory: + +- `API_HOST`: URL where the Fleetbase API is accessible. (Defaults to http://localhost:8000) +- `SOCKETCLUSTER_HOST`: Specifices the host of your SocketCluster service. +- `SOCKETCLUSTER_PORT`: Specifices the port of your SocketCluster service. (Defaults to 38000) +- `SOCKETCLUSTER_SECURE`: Specifices if the SocketCluster service should use WSS or WS to connect. (Defaults to `false`) + +### OSRM Configuration + +Additionally you may want to use your own OSRM routing engine, or OSRM compatible engine for routing and route optimization. You can easily do this by setting the `OSRM_HOST` environment variable on both the console and the API. + +- `OSRM_HOST`: Specifies the host for the OSRM compatible routing engine to use. (Defaults to https://bundle.routing.fleetbase.io) + +### Next Steps + +After completing the installation and configuration, you should verify that all services are running correctly and the application is responsive. Explore the Fleetbase documentation for advanced configurations, features, and how to start adding custom extensions. + +Congratulations on setting up Fleetbase! Start exploring the capabilities of your new logistics and supply chain operating system. \ No newline at end of file diff --git a/docusaurus.config.js b/docusaurus.config.js index 1534685..92a3c73 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -10,7 +10,7 @@ const isGithubPagesEnv = process.env.GITHUB_PAGES_ENV === 'true'; const config = { title: 'Fleetbase', tagline: 'Modular logistics and supply chain operating system (LSOS)', - favicon: 'img/fleetbase-icon.png', + favicon: '/img/fleetbase-icon.png', // Set the production url of your site here url: 'https://fleetbase.github.io', @@ -22,7 +22,7 @@ const config = { // GitHub pages deployment config. // If you aren't using GitHub pages, you don't need these. organizationName: 'fleetbase', // Usually your GitHub org/user name. - projectName: 'docs', // Usually your repo name. + projectName: 'docs', deploymentBranch: 'gh-pages', onBrokenLinks: 'throw', @@ -43,16 +43,12 @@ const config = { ({ docs: { sidebarPath: require.resolve('./sidebars.js'), - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', + editUrl: 'https://github.com/fleetbase/docs/blob/main/sidebars.js', routeBasePath: '/', }, blog: { showReadingTime: true, - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', + editUrl: 'https://github.com/fleetbase/docs/tree/main/blog', }, theme: { customCss: require.resolve('./src/css/custom.css'), @@ -61,6 +57,35 @@ const config = { ], ], + plugins: [ + [ + '@scalar/docusaurus', + { + id: 'fleetbase-api', + label: 'Fleetbase API', + route: '/api', + configuration: { + spec: { + url: 'https://raw.githubusercontent.com/fleetbase/docs/ron-v1-docs/static/openapi/fleetbase-api-latest.json', + }, + }, + }, + ], + [ + '@scalar/docusaurus', + { + id: 'storefront-api', + label: 'Storefront API', + route: '/storefront-api', + configuration: { + spec: { + url: 'https://raw.githubusercontent.com/fleetbase/docs/ron-v1-docs/static/openapi/storefront-api-latest.json', + }, + }, + }, + ], + ], + themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ @@ -79,8 +104,11 @@ const config = { position: 'left', label: 'Docs', }, - { href: 'https://fleetbase.github.io/api-reference', label: 'API Reference', position: 'left' }, - { href: 'https://discord.gg/V39d5X9z', label: 'Community', position: 'left' }, + { + href: 'https://discord.gg/V7RVWRQ2Wm', + label: 'Discord', + position: 'right', + }, { href: 'https://github.com/fleetbase/fleetbase', label: 'GitHub', @@ -115,10 +143,10 @@ const config = { { title: 'Learn', items: [ - { - label: 'Guides', - href: '/category/system-guides', - }, + // { + // label: 'Guides', + // href: '/category/guides', + // }, { label: 'API Reference', href: 'https://fleetbase.github.io/api-reference/', @@ -167,7 +195,7 @@ const config = { copyright: `Copyright © ${new Date().getFullYear()} Fleetbase`, }, prism: { - additionalLanguages: ['bash', 'diff', 'json'], + additionalLanguages: ['bash', 'diff', 'json', 'php', 'javascript'], theme: lightTheme, darkTheme: darkTheme, }, diff --git a/package.json b/package.json index a4d6259..53c1e69 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@docusaurus/core": "3.0.0", "@docusaurus/preset-classic": "3.0.0", "@mdx-js/react": "^3.0.0", + "@scalar/docusaurus": "^0.2.52", "clsx": "^1.2.1", "prism-react-renderer": "^2.3.1", "react": "^18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a96f2cf..805d36b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - dependencies: '@docusaurus/core': specifier: 3.0.0 @@ -14,6 +10,9 @@ dependencies: '@mdx-js/react': specifier: ^3.0.0 version: 3.0.1(@types/react@18.3.1)(react@18.3.1) + '@scalar/docusaurus': + specifier: ^0.2.52 + version: 0.2.52(nanoid@5.0.7)(postcss@8.4.38)(react@18.3.1)(typescript@5.4.5)(unified@11.0.4)(vue-sonner@1.1.2)(vue@3.4.27)(yjs@13.6.15) clsx: specifier: ^1.2.1 version: 1.2.1 @@ -37,6 +36,10 @@ devDependencies: packages: + /@adobe/css-tools@4.3.3: + resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} + dev: false + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0): resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} dependencies: @@ -1517,6 +1520,126 @@ packages: to-fast-properties: 2.0.0 dev: false + /@codemirror/autocomplete@6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1): + resolution: {integrity: sha512-P/LeCTtZHRTCU4xQsa89vSKWecYv1ZqwzOd5topheGRf+qtacFgBeIMQi3eL8Kt/BUNvxUWkx+5qP2jlGoARrg==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/common': ^1.0.0 + dependencies: + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + dev: false + + /@codemirror/commands@6.5.0: + resolution: {integrity: sha512-rK+sj4fCAN/QfcY9BEzYMgp4wwL/q5aj/VfNSoH1RWPF9XS/dUwBkvlL3hpWgEjOqlpdN1uLC9UkjJ4tmyjJYg==} + dependencies: + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + dev: false + + /@codemirror/lang-css@6.2.1(@codemirror/view@6.26.3): + resolution: {integrity: sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==} + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/css': 1.1.8 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/lang-html@6.4.9: + resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==} + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/lang-css': 6.2.1(@codemirror/view@6.26.3) + '@codemirror/lang-javascript': 6.2.2 + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + '@lezer/css': 1.1.8 + '@lezer/html': 1.3.9 + dev: false + + /@codemirror/lang-javascript@6.2.2: + resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==} + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.1 + '@codemirror/lint': 6.8.0 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + '@lezer/javascript': 1.4.16 + dev: false + + /@codemirror/lang-json@6.0.1: + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} + dependencies: + '@codemirror/language': 6.10.1 + '@lezer/json': 1.0.2 + dev: false + + /@codemirror/lang-yaml@6.1.1(@codemirror/view@6.26.3): + resolution: {integrity: sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw==} + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/yaml': 1.0.3 + transitivePeerDependencies: + - '@codemirror/view' + dev: false + + /@codemirror/language@6.10.1: + resolution: {integrity: sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==} + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + style-mod: 4.1.2 + dev: false + + /@codemirror/lint@6.8.0: + resolution: {integrity: sha512-lsFofvaw0lnPRJlQylNsC4IRt/1lI4OD/yYslrSGVndOJfStc58v+8p9dgGiD90ktOfL7OhBWns1ZETYgz0EJA==} + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + crelt: 1.0.6 + dev: false + + /@codemirror/search@6.5.6: + resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==} + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + crelt: 1.0.6 + dev: false + + /@codemirror/state@6.4.1: + resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} + dev: false + + /@codemirror/view@6.26.3: + resolution: {integrity: sha512-gmqxkPALZjkgSxIeeweY/wGQXBfwTUaLs8h7OKtSwfbj9Ct3L11lD+u1sS7XHppxFQoMDiMDp07P9f3I2jWOHw==} + dependencies: + '@codemirror/state': 6.4.1 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + dev: false + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -2336,6 +2459,241 @@ packages: - webpack-cli dev: false + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: false + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@floating-ui/core@1.6.2: + resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} + dependencies: + '@floating-ui/utils': 0.2.2 + dev: false + + /@floating-ui/dom@1.6.5: + resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} + dependencies: + '@floating-ui/core': 1.6.2 + '@floating-ui/utils': 0.2.2 + dev: false + + /@floating-ui/utils@0.2.2: + resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} + dev: false + + /@floating-ui/vue@1.0.6(vue@3.4.27): + resolution: {integrity: sha512-EdrOljjkpkkqZnrpqUcPoz9NvHxuTjUtSInh6GMv3+Mcy+giY2cE2pHh9rpacRcZ2eMSCxel9jWkWXTjLmY55w==} + dependencies: + '@floating-ui/dom': 1.6.5 + '@floating-ui/utils': 0.2.2 + vue-demi: 0.14.7(vue@3.4.27) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + /@hapi/hoek@9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -2344,6 +2702,21 @@ packages: dependencies: '@hapi/hoek': 9.3.0 + /@headlessui/vue@1.7.22(vue@3.4.27): + resolution: {integrity: sha512-Hoffjoolq1rY+LOfJ+B/OvkhuBXXBFgd8oBlN+l1TApma2dB0En0ucFZrwQtb33SmcCqd32EQd0y07oziXWNYg==} + engines: {node: '>=10'} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@tanstack/vue-virtual': 3.5.0(vue@3.4.27) + vue: 3.4.27(typescript@5.4.5) + dev: false + + /@humanwhocodes/momoa@3.0.2: + resolution: {integrity: sha512-YrVdm6ntzi49kj/YlFQF5MClnOeZJv2d34tZqdrMKzVCOi0EC6pD/0z9SWb8fU9bTPkmUNPsYVJ1wFd4QamBBQ==} + engines: {node: '>=18'} + dev: false + /@jest/schemas@29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2398,6 +2771,62 @@ packages: resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} dev: false + /@lezer/common@1.2.1: + resolution: {integrity: sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==} + dev: false + + /@lezer/css@1.1.8: + resolution: {integrity: sha512-7JhxupKuMBaWQKjQoLtzhGj83DdnZY9MckEOG5+/iLKNK2ZJqKc6hf6uc0HjwCX7Qlok44jBNqZhHKDhEhZYLA==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + dev: false + + /@lezer/highlight@1.2.0: + resolution: {integrity: sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==} + dependencies: + '@lezer/common': 1.2.1 + dev: false + + /@lezer/html@1.3.9: + resolution: {integrity: sha512-MXxeCMPyrcemSLGaTQEZx0dBUH0i+RPl8RN5GwMAzo53nTsd/Unc/t5ZxACeQoyPUM5/GkPLRUs2WliOImzkRA==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + dev: false + + /@lezer/javascript@1.4.16: + resolution: {integrity: sha512-84UXR3N7s11MPQHWgMnjb9571fr19MmXnr5zTv2XX0gHXXUvW3uPJ8GCjKrfTXmSdfktjRK0ayKklw+A13rk4g==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + dev: false + + /@lezer/json@1.0.2: + resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + dev: false + + /@lezer/lr@1.4.0: + resolution: {integrity: sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==} + dependencies: + '@lezer/common': 1.2.1 + dev: false + + /@lezer/yaml@1.0.3: + resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==} + dependencies: + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + dev: false + /@mdx-js/mdx@3.0.1: resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} dependencies: @@ -2502,52 +2931,630 @@ packages: resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} dev: false - /@sideway/address@4.1.5: - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + /@replit/codemirror-css-color-picker@6.1.1(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3): + resolution: {integrity: sha512-e/wYHcgt3HRDpvYuwqXyjv3LEY6VyFjJeDQK1UtFmaykp86R6Cbw3ULH9pvuJuelaW6nS4CVtIRHuOfbFLlqwQ==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 dependencies: - '@hapi/hoek': 9.3.0 + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + dev: false - /@sideway/formula@3.0.1: - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + /@rollup/rollup-android-arm-eabi@4.18.0: + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true - /@sideway/pinpoint@2.0.0: - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + /@rollup/rollup-android-arm64@4.18.0: + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + /@rollup/rollup-darwin-arm64@4.18.0: + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + cpu: [arm64] + os: [darwin] + requiresBuild: true dev: false + optional: true - /@sindresorhus/is@4.6.0: - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} + /@rollup/rollup-darwin-x64@4.18.0: + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + cpu: [x64] + os: [darwin] + requiresBuild: true dev: false + optional: true - /@sindresorhus/is@5.6.0: - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} + /@rollup/rollup-linux-arm-gnueabihf@4.18.0: + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + cpu: [arm] + os: [linux] + requiresBuild: true dev: false + optional: true - /@slorber/remark-comment@1.0.0: - resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 + /@rollup/rollup-linux-arm-musleabihf@4.18.0: + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + cpu: [arm] + os: [linux] + requiresBuild: true dev: false + optional: true - /@slorber/static-site-generator-webpack-plugin@4.0.7: - resolution: {integrity: sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==} - engines: {node: '>=14'} - dependencies: - eval: 0.1.8 - p-map: 4.0.0 - webpack-sources: 3.2.3 + /@rollup/rollup-linux-arm64-gnu@4.18.0: + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + cpu: [arm64] + os: [linux] + requiresBuild: true dev: false + optional: true - /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.24.5): - resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} - engines: {node: '>=10'} - peerDependencies: + /@rollup/rollup-linux-arm64-musl@4.18.0: + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-powerpc64le-gnu@4.18.0: + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.18.0: + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.18.0: + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-x64-gnu@4.18.0: + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-linux-x64-musl@4.18.0: + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.18.0: + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.18.0: + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@rollup/rollup-win32-x64-msvc@4.18.0: + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@scalar/api-client@1.2.36(@scalar/oas-utils@0.1.15)(typescript@5.4.5)(vue@3.4.27)(yjs@13.6.15): + resolution: {integrity: sha512-dTEy+ALkpKYv+TeBZIrDBUIu8mq4A8TDfvMk/GJjGDWBqUsSxvqI0Gu80pDN+DZG5TIYyTYtIsL63n+Mk8tHlw==} + engines: {node: '>=18'} + peerDependencies: + '@scalar/oas-utils': 0.1.15 + vue: ^3.3.0 + dependencies: + '@floating-ui/vue': 1.0.6(vue@3.4.27) + '@headlessui/vue': 1.7.22(vue@3.4.27) + '@scalar/components': 0.7.14(axios@1.6.8)(typescript@5.4.5)(vue@3.4.27) + '@scalar/oas-utils': 0.1.15(axios@1.6.8) + '@scalar/openapi-parser': 0.3.2 + '@scalar/themes': 0.7.11(vue@3.4.27) + '@scalar/use-codemirror': 0.10.5(vue@3.4.27)(yjs@13.6.15) + '@scalar/use-modal': 0.3.3(@headlessui/vue@1.7.22)(vue@3.4.27) + '@scalar/use-tooltip': 0.6.2(vue@3.4.27) + '@vueuse/core': 10.10.0(vue@3.4.27) + axios: 1.6.8 + httpsnippet-lite: 3.0.5 + nanoid: 5.0.7 + pretty-bytes: 6.1.1 + pretty-ms: 8.0.0 + vue: 3.4.27(typescript@5.4.5) + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - '@vue/composition-api' + - debug + - jest + - less + - lightningcss + - sass + - stylus + - sugarss + - terser + - typescript + - vitest + - yjs + dev: false + + /@scalar/api-reference-react@0.1.94(nanoid@5.0.7)(postcss@8.4.38)(react@18.3.1)(typescript@5.4.5)(unified@11.0.4)(vue-sonner@1.1.2)(vue@3.4.27)(yjs@13.6.15): + resolution: {integrity: sha512-LeZ4JG9Hji7YKBj3Az+uzO4TrUtMu2OcIa+85+CwFOA9Ii0T8lpn/N53ZkGVI0wcMv4a/PTNTxXmRk9CSiI4jw==} + engines: {node: '>=18'} + peerDependencies: + react: ^18.0.0 + dependencies: + '@scalar/api-reference': 1.22.52(nanoid@5.0.7)(postcss@8.4.38)(typescript@5.4.5)(unified@11.0.4)(vue-sonner@1.1.2)(vue@3.4.27)(yjs@13.6.15) + react: 18.3.1 + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - '@vue/composition-api' + - debug + - jest + - less + - lightningcss + - nanoid + - postcss + - sass + - stylus + - sugarss + - supports-color + - terser + - typescript + - unified + - vitest + - vue + - vue-sonner + - yjs + dev: false + + /@scalar/api-reference@1.22.52(nanoid@5.0.7)(postcss@8.4.38)(typescript@5.4.5)(unified@11.0.4)(vue-sonner@1.1.2)(vue@3.4.27)(yjs@13.6.15): + resolution: {integrity: sha512-8SpwdZcTvJhfvT8GyLxRHO21GqBD15bL3U40xPUlG69CsYYRh9cBhoGw4iYWtCyMhsped3mUr/oBSuSpbSXqqQ==} + engines: {node: '>=18'} + peerDependencies: + unified: ^11.0.0 + vue: ^3.3.0 + dependencies: + '@headlessui/vue': 1.7.22(vue@3.4.27) + '@scalar/api-client': 1.2.36(@scalar/oas-utils@0.1.15)(typescript@5.4.5)(vue@3.4.27)(yjs@13.6.15) + '@scalar/components': 0.7.14(axios@1.6.8)(typescript@5.4.5)(vue@3.4.27) + '@scalar/oas-utils': 0.1.15(axios@1.6.8) + '@scalar/openapi-parser': 0.3.2 + '@scalar/snippetz': 0.1.6 + '@scalar/themes': 0.7.11(vue@3.4.27) + '@scalar/use-modal': 0.3.3(@headlessui/vue@1.7.22)(vue@3.4.27) + '@scalar/use-toasts': 0.6.6(nanoid@5.0.7)(vue-sonner@1.1.2)(vue@3.4.27) + '@scalar/use-tooltip': 0.6.2(vue@3.4.27) + '@unhead/schema': 1.9.11 + '@vcarl/remark-headings': 0.1.0 + '@vueuse/core': 10.10.0(vue@3.4.27) + axios: 1.6.8 + fuse.js: 6.6.2 + github-slugger: 2.0.0 + httpsnippet-lite: 3.0.5 + postcss-nested: 6.0.1(postcss@8.4.38) + prismjs: 1.29.0 + rehype-external-links: 3.0.0 + rehype-format: 5.0.0 + rehype-highlight: 7.0.0 + rehype-raw: 7.0.0 + rehype-sanitize: 6.0.0 + rehype-stringify: 10.0.0 + remark-gfm: 4.0.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.0 + remark-stringify: 11.0.0 + unhead: 1.9.11 + unified: 11.0.4 + vue: 3.4.27(typescript@5.4.5) + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - '@vue/composition-api' + - debug + - jest + - less + - lightningcss + - nanoid + - postcss + - sass + - stylus + - sugarss + - supports-color + - terser + - typescript + - vitest + - vue-sonner + - yjs + dev: false + + /@scalar/components@0.7.14(axios@1.6.8)(typescript@5.4.5)(vue@3.4.27): + resolution: {integrity: sha512-7/WKodDc+EnKC2j2jwTZ7eXGA3HEGnrvDVwSlu1Rx15Xle7zVwTRd/q4KwEKEPOJJh/MXcJPXGIwsqJDt6tXWA==} + engines: {node: '>=18'} + peerDependencies: + vue: ^3.3.0 + dependencies: + '@floating-ui/utils': 0.2.2 + '@floating-ui/vue': 1.0.6(vue@3.4.27) + '@headlessui/vue': 1.7.22(vue@3.4.27) + '@scalar/oas-utils': 0.1.15(axios@1.6.8) + '@storybook/test': 8.1.4 + '@vueuse/core': 10.10.0(vue@3.4.27) + cva: 1.0.0-beta.1(typescript@5.4.5) + nanoid: 5.0.7 + prismjs: 1.29.0 + tailwind-merge: 2.3.0 + vue: 3.4.27(typescript@5.4.5) + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - '@vue/composition-api' + - axios + - jest + - typescript + - vitest + dev: false + + /@scalar/docusaurus@0.2.52(nanoid@5.0.7)(postcss@8.4.38)(react@18.3.1)(typescript@5.4.5)(unified@11.0.4)(vue-sonner@1.1.2)(vue@3.4.27)(yjs@13.6.15): + resolution: {integrity: sha512-mx6Gf79Y4pRl/CwAhWws0Ilw7lo7qqJrk7AmattjVNu9zMuRRRsjtYLzA/VX51IgkXM58e2dbbXEBXV6xdRYdQ==} + engines: {node: '>=18'} + peerDependencies: + react: ^18.0.0 + dependencies: + '@scalar/api-reference-react': 0.1.94(nanoid@5.0.7)(postcss@8.4.38)(react@18.3.1)(typescript@5.4.5)(unified@11.0.4)(vue-sonner@1.1.2)(vue@3.4.27)(yjs@13.6.15) + react: 18.3.1 + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - '@vue/composition-api' + - debug + - jest + - less + - lightningcss + - nanoid + - postcss + - sass + - stylus + - sugarss + - supports-color + - terser + - typescript + - unified + - vitest + - vue + - vue-sonner + - yjs + dev: false + + /@scalar/oas-utils@0.1.15(axios@1.6.8): + resolution: {integrity: sha512-sBAoU84o5Dhr/KmNrbalyD2i80W+SzKZT0wYbmnBRKdyiQuhAs8vNSdddHI2h2V3NDoG8hddNcQqAsr1G/ScDw==} + engines: {node: '>=18'} + peerDependencies: + axios: ^1.5 + dependencies: + axios: 1.6.8 + yaml: 2.4.2 + dev: false + + /@scalar/openapi-parser@0.3.2: + resolution: {integrity: sha512-o38wF1rKqCc7R0zFMta5rPTiY4cWwVcZPJkV1OCcnPsF2eE79uPkhYU2j/kdocJXVwMqqAe9a6+0o4R8YjgPVw==} + engines: {node: '>=18'} + dependencies: + '@humanwhocodes/momoa': 3.0.2 + '@types/node': 20.12.8 + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 2.1.1(ajv@8.13.0) + js-yaml: 4.1.0 + jsonpointer: 5.0.1 + leven: 4.0.0 + openapi-types: 12.1.3 + vite: 5.2.11(@types/node@20.12.8) + yaml: 2.4.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - terser + dev: false + + /@scalar/snippetz-core@0.1.4: + resolution: {integrity: sha512-NMnDzl5dHgUj0k8ZtfssDfy6wv1wO/M+GhpdGr/4OH3m8UZB27CZ3hM7wXh+fm75hZO5XIBsANW20kJVnzpaHg==} + dependencies: + '@types/har-format': 1.2.15 + dev: false + + /@scalar/snippetz-plugin-js-fetch@0.1.1: + resolution: {integrity: sha512-9ODfi0OaEvZHdCe09c91eH1R5QPynL+FPxtYuK/9K5ElRE2NqxYysri9AsgOhr1Fqhpy5qKzDj4Gi5FHsJSGXw==} + dependencies: + '@scalar/snippetz-core': 0.1.4 + dev: false + + /@scalar/snippetz-plugin-js-ofetch@0.1.1: + resolution: {integrity: sha512-fPIJlY4q1j5gbnsYSxix0IJ7hqcvm8Ly7iVoK66vaL738AIMiGZMhGKtLrTVPad77PimwO+jeq5iDIZ495UY7Q==} + dependencies: + '@scalar/snippetz-core': 0.1.4 + dev: false + + /@scalar/snippetz-plugin-node-fetch@0.1.2: + resolution: {integrity: sha512-kD6erA6aAqjHkj+JrJQKqrqcH4fnCrLi2uYw16CmELIGtqVHFau7ew2c087y4OQTltdi5rEk2zj5zOBu9yaS3Q==} + dependencies: + '@scalar/snippetz-core': 0.1.4 + dev: false + + /@scalar/snippetz-plugin-node-ofetch@0.1.1: + resolution: {integrity: sha512-9NpvdMKebg82FkVWoWyOxd1JXAB8KNxmrsFFwQKNjhAw0A5hjNR5oW9lD+FtB1Laupg2FNtw9dcCydnF+LcCWw==} + dependencies: + '@scalar/snippetz-core': 0.1.4 + dev: false + + /@scalar/snippetz-plugin-node-undici@0.1.6: + resolution: {integrity: sha512-CivUl7wgZ6vlUb01FMdqOt/NVyOWqT0iHZRp5YlPp1pflXZLnAyi5antUTtBEUHUtHM2EO/WR7vx4kRsPcrgLg==} + dependencies: + '@scalar/snippetz-core': 0.1.4 + dev: false + + /@scalar/snippetz@0.1.6: + resolution: {integrity: sha512-z3DEpT/FIZq9yeHL/tz2v6WvdHIiZ4uvK96RdeTPKUUJ0IXvA5vONG3PF5LE0Q/408PCzWsZpGs9f97ztaeJSQ==} + dependencies: + '@scalar/snippetz-core': 0.1.4 + '@scalar/snippetz-plugin-js-fetch': 0.1.1 + '@scalar/snippetz-plugin-js-ofetch': 0.1.1 + '@scalar/snippetz-plugin-node-fetch': 0.1.2 + '@scalar/snippetz-plugin-node-ofetch': 0.1.1 + '@scalar/snippetz-plugin-node-undici': 0.1.6 + dev: false + + /@scalar/themes@0.7.11(vue@3.4.27): + resolution: {integrity: sha512-JakLxHhNnL0scW+29tZutkndVVS82bhaZcbAZxbu6PwIy2DJ5v5fOtcuRyGwyKlmF5G2grQl4yhlkHrIzSiF+g==} + engines: {node: '>=18'} + peerDependencies: + vue: ^3.3.0 + dependencies: + vue: 3.4.27(typescript@5.4.5) + dev: false + + /@scalar/use-codemirror@0.10.5(vue@3.4.27)(yjs@13.6.15): + resolution: {integrity: sha512-P7WTP061bIbGUMbtUG9pwIyItSxSbXljmWTFkqyq47qQOiDEG3cKXczjCapPn6LMR26s4m3mWAm4kl08dx0hQg==} + engines: {node: '>=18'} + peerDependencies: + vue: ^3.3.0 + yjs: ^13.6.0 + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/commands': 6.5.0 + '@codemirror/lang-css': 6.2.1(@codemirror/view@6.26.3) + '@codemirror/lang-html': 6.4.9 + '@codemirror/lang-json': 6.0.1 + '@codemirror/lang-yaml': 6.1.1(@codemirror/view@6.26.3) + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + '@lezer/highlight': 1.2.0 + '@lezer/lr': 1.4.0 + '@replit/codemirror-css-color-picker': 6.1.1(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3) + '@uiw/codemirror-themes': 4.22.1(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3) + codemirror: 6.0.1(@lezer/common@1.2.1) + vue: 3.4.27(typescript@5.4.5) + yjs: 13.6.15 + optionalDependencies: + y-codemirror.next: 0.3.3(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(yjs@13.6.15) + dev: false + + /@scalar/use-modal@0.3.3(@headlessui/vue@1.7.22)(vue@3.4.27): + resolution: {integrity: sha512-j+o3RDeRoYT875oSSa8SytKwDPRMdL74Av9r9lwH95Fwk+IGC/B9Gc8dxtdncKmJBRvTk18nWVEoDn7JZ+CwaA==} + engines: {node: '>=18'} + peerDependencies: + '@headlessui/vue': ^1.7.0 + vue: ^3.3.0 + dependencies: + '@headlessui/vue': 1.7.22(vue@3.4.27) + vue: 3.4.27(typescript@5.4.5) + dev: false + + /@scalar/use-toasts@0.6.6(nanoid@5.0.7)(vue-sonner@1.1.2)(vue@3.4.27): + resolution: {integrity: sha512-+Wf9qp/UsElGbygrMXwt803OP7odNLtfAQOKzffedyY1jaNl9VncaIXDWFsR3URmLBTN5ZM07d346aCMo6xjLw==} + engines: {node: '>=18'} + peerDependencies: + nanoid: 4 - 5 + vue: ^3.3.0 + vue-sonner: ^1.0.3 + dependencies: + nanoid: 5.0.7 + vue: 3.4.27(typescript@5.4.5) + vue-sonner: 1.1.2 + dev: false + + /@scalar/use-tooltip@0.6.2(vue@3.4.27): + resolution: {integrity: sha512-ntiHkA1A/4DHS7ISqIsE4az0AvG3LovwwJpX6LcnsiezwGfIswe6DSSwX2T0OIOO1n1Amg2/VhGFg+xOyWGOKQ==} + engines: {node: '>=18'} + peerDependencies: + vue: ^3.3.0 + dependencies: + vue: 3.4.27(typescript@5.4.5) + dev: false + + /@sideway/address@4.1.5: + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + dependencies: + '@hapi/hoek': 9.3.0 + + /@sideway/formula@3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + /@sideway/pinpoint@2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: false + + /@sindresorhus/is@4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + dev: false + + /@sindresorhus/is@5.6.0: + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + dev: false + + /@slorber/remark-comment@1.0.0: + resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + dev: false + + /@slorber/static-site-generator-webpack-plugin@4.0.7: + resolution: {integrity: sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==} + engines: {node: '>=14'} + dependencies: + eval: 0.1.8 + p-map: 4.0.0 + webpack-sources: 3.2.3 + dev: false + + /@storybook/channels@8.1.4: + resolution: {integrity: sha512-cmITS0w8e9Ys1vqp8S7+uyQKgqVIdUEWs9FK90XeAs0lcuvW10S3qdrarWPbUgKFFFsGIGPIvImbT1vf80/bcQ==} + dependencies: + '@storybook/client-logger': 8.1.4 + '@storybook/core-events': 8.1.4 + '@storybook/global': 5.0.0 + telejson: 7.2.0 + tiny-invariant: 1.3.3 + dev: false + + /@storybook/client-logger@8.1.4: + resolution: {integrity: sha512-I0PqDoNZf4rqrJYwFHhCwuXumpxvzyTzI5qI5R2JT93i49QShI3pLXY31C9VemVBJmS+pBWVOm6RTIdkQiKVWw==} + dependencies: + '@storybook/global': 5.0.0 + dev: false + + /@storybook/core-events@8.1.4: + resolution: {integrity: sha512-oZAP3aRDeRyo2GQmADh4R3wJLIb9Ie0FUcWx8V4fvuydzeh6Pprgo//COCR+kySG4kRLqofWeF1Zzvft58Q0kg==} + dependencies: + '@storybook/csf': 0.1.7 + ts-dedent: 2.2.0 + dev: false + + /@storybook/csf@0.1.7: + resolution: {integrity: sha512-53JeLZBibjQxi0Ep+/AJTfxlofJlxy1jXcSKENlnKxHjWEYyHQCumMP5yTFjf7vhNnMjEpV3zx6t23ssFiGRyw==} + dependencies: + type-fest: 2.19.0 + dev: false + + /@storybook/global@5.0.0: + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + dev: false + + /@storybook/instrumenter@8.1.4: + resolution: {integrity: sha512-0FSEbrRdqJtND+re5Z462ZXy4WIcE45wjlGZd++ukoA7XKklYQdfRNyodNzibUAA3FHbGGFZa5Omf53yN07C6A==} + dependencies: + '@storybook/channels': 8.1.4 + '@storybook/client-logger': 8.1.4 + '@storybook/core-events': 8.1.4 + '@storybook/global': 5.0.0 + '@storybook/preview-api': 8.1.4 + '@vitest/utils': 1.6.0 + util: 0.12.5 + dev: false + + /@storybook/preview-api@8.1.4: + resolution: {integrity: sha512-WHS3k/8UZT5vYJ+evSAMLG89sv1rBaojTQ2XNgv/DX74vK4l0MQ61wsORC0v7ScGyEuwYIuSCqHH5NNrOBLxmA==} + dependencies: + '@storybook/channels': 8.1.4 + '@storybook/client-logger': 8.1.4 + '@storybook/core-events': 8.1.4 + '@storybook/csf': 0.1.7 + '@storybook/global': 5.0.0 + '@storybook/types': 8.1.4 + '@types/qs': 6.9.15 + dequal: 2.0.3 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.11.0 + tiny-invariant: 1.3.3 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: false + + /@storybook/test@8.1.4: + resolution: {integrity: sha512-9fV7dWecNsKxy10LADZDxxI5lALkW1t+ibTBlH8Q2rCrKLeNU4yBeaHpKh+DqdIF1QRynNnvbBE/o7b7KlwBfQ==} + dependencies: + '@storybook/client-logger': 8.1.4 + '@storybook/core-events': 8.1.4 + '@storybook/instrumenter': 8.1.4 + '@storybook/preview-api': 8.1.4 + '@testing-library/dom': 9.3.4 + '@testing-library/jest-dom': 6.4.5 + '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) + '@vitest/expect': 1.3.1 + '@vitest/spy': 1.6.0 + util: 0.12.5 + transitivePeerDependencies: + - '@jest/globals' + - '@types/bun' + - '@types/jest' + - jest + - vitest + dev: false + + /@storybook/types@8.1.4: + resolution: {integrity: sha512-QfTJg5Hu3c0eiD38Z75bZsw0iCIpruOTGV5O65vCpNun7D6WUyyMM0aUJN3ytujGiHfjsWVgiSe+WoHxdy/fEA==} + dependencies: + '@storybook/channels': 8.1.4 + '@types/express': 4.17.21 + file-system-cache: 2.3.0 + dev: false + + /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.24.5): + resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} + engines: {node: '>=10'} + peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 @@ -2704,6 +3711,73 @@ packages: defer-to-connect: 2.0.1 dev: false + /@tanstack/virtual-core@3.5.0: + resolution: {integrity: sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg==} + dev: false + + /@tanstack/vue-virtual@3.5.0(vue@3.4.27): + resolution: {integrity: sha512-wvRQ8sFxn/NDr3WvI5XabhFovZ5MBmpEck2GHpTxYunmV63Ovpl30lRu6W5BPQo35a1GqDZ+Pvzlz6WDWRNqqw==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + dependencies: + '@tanstack/virtual-core': 3.5.0 + vue: 3.4.27(typescript@5.4.5) + dev: false + + /@testing-library/dom@9.3.4: + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} + dependencies: + '@babel/code-frame': 7.24.2 + '@babel/runtime': 7.24.5 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: false + + /@testing-library/jest-dom@6.4.5: + resolution: {integrity: sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + peerDependencies: + '@jest/globals': '>= 28' + '@types/bun': latest + '@types/jest': '>= 28' + jest: '>= 28' + vitest: '>= 0.32' + peerDependenciesMeta: + '@jest/globals': + optional: true + '@types/bun': + optional: true + '@types/jest': + optional: true + jest: + optional: true + vitest: + optional: true + dependencies: + '@adobe/css-tools': 4.3.3 + '@babel/runtime': 7.24.5 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + dev: false + + /@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4): + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + dependencies: + '@testing-library/dom': 9.3.4 + dev: false + /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -2715,6 +3789,10 @@ packages: '@types/estree': 1.0.5 dev: false + /@types/aria-query@5.0.4: + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + dev: false + /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: @@ -2790,6 +3868,10 @@ packages: resolution: {integrity: sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==} dev: false + /@types/har-format@1.2.15: + resolution: {integrity: sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==} + dev: false + /@types/hast@3.0.4: resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} dependencies: @@ -2836,6 +3918,12 @@ packages: /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + dependencies: + '@types/unist': 2.0.10 + dev: false + /@types/mdast@4.0.3: resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} dependencies: @@ -2959,6 +4047,10 @@ packages: resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} dev: false + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: false + /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: @@ -2975,10 +4067,185 @@ packages: '@types/yargs-parser': 21.0.3 dev: false + /@uiw/codemirror-themes@4.22.1(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3): + resolution: {integrity: sha512-5TeB8wCc0aNd3YEhzOvgekpAFQfEm4fCTUcGmEIQqaRNgKAM83HYNpE1JF2j7x2oDFugdiO0yJynS6bo1zVOuw==} + peerDependencies: + '@codemirror/language': '>=6.0.0' + '@codemirror/state': '>=6.0.0' + '@codemirror/view': '>=6.0.0' + dependencies: + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + dev: false + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: false + /@unhead/dom@1.9.11: + resolution: {integrity: sha512-mg8DuqPcm+JWSN3SIPa9lbNtFhdQ1M7K2TJe8icI4bK56GSj4eUgJZrbphZAUWPAUAS1UFyFFGJG7N9Y31LKOw==} + dependencies: + '@unhead/schema': 1.9.11 + '@unhead/shared': 1.9.11 + dev: false + + /@unhead/schema@1.9.11: + resolution: {integrity: sha512-hvIGl20wpQQImyHvAMv2tPgccKLGEwMn8KYQdImUkiCLdQw2Jw9jH7syE/u+TPSqwOQIwsvPja5sK+SChL1KNw==} + dependencies: + hookable: 5.5.3 + zhead: 2.2.4 + dev: false + + /@unhead/shared@1.9.11: + resolution: {integrity: sha512-jgpQ/cPfXzQA7c4F4PKyPXxS9POXAMrJ0QUBMTQYNOW6t6KlljjK89n6nUEmGuiyO4jdJGooZNVS1fXVaKIgYQ==} + dependencies: + '@unhead/schema': 1.9.11 + dev: false + + /@vcarl/remark-headings@0.1.0: + resolution: {integrity: sha512-ffQxJUcapJ9Bk+fiGN49YJ9RaYMibrSTSezB1Fcrtu+0YSZxA3bsaLlIv1u/4sjPIeW/BKrs4xtMT3l3P9Ba5Q==} + dependencies: + mdast-util-to-string: 3.2.0 + unist-util-visit: 4.1.2 + dev: false + + /@vitest/expect@1.3.1: + resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} + dependencies: + '@vitest/spy': 1.3.1 + '@vitest/utils': 1.3.1 + chai: 4.4.1 + dev: false + + /@vitest/spy@1.3.1: + resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} + dependencies: + tinyspy: 2.2.1 + dev: false + + /@vitest/spy@1.6.0: + resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + dependencies: + tinyspy: 2.2.1 + dev: false + + /@vitest/utils@1.3.1: + resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: false + + /@vitest/utils@1.6.0: + resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: false + + /@vue/compiler-core@3.4.27: + resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==} + dependencies: + '@babel/parser': 7.24.5 + '@vue/shared': 3.4.27 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: false + + /@vue/compiler-dom@3.4.27: + resolution: {integrity: sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==} + dependencies: + '@vue/compiler-core': 3.4.27 + '@vue/shared': 3.4.27 + dev: false + + /@vue/compiler-sfc@3.4.27: + resolution: {integrity: sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==} + dependencies: + '@babel/parser': 7.24.5 + '@vue/compiler-core': 3.4.27 + '@vue/compiler-dom': 3.4.27 + '@vue/compiler-ssr': 3.4.27 + '@vue/shared': 3.4.27 + estree-walker: 2.0.2 + magic-string: 0.30.10 + postcss: 8.4.38 + source-map-js: 1.2.0 + dev: false + + /@vue/compiler-ssr@3.4.27: + resolution: {integrity: sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==} + dependencies: + '@vue/compiler-dom': 3.4.27 + '@vue/shared': 3.4.27 + dev: false + + /@vue/reactivity@3.4.27: + resolution: {integrity: sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==} + dependencies: + '@vue/shared': 3.4.27 + dev: false + + /@vue/runtime-core@3.4.27: + resolution: {integrity: sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==} + dependencies: + '@vue/reactivity': 3.4.27 + '@vue/shared': 3.4.27 + dev: false + + /@vue/runtime-dom@3.4.27: + resolution: {integrity: sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==} + dependencies: + '@vue/runtime-core': 3.4.27 + '@vue/shared': 3.4.27 + csstype: 3.1.3 + dev: false + + /@vue/server-renderer@3.4.27(vue@3.4.27): + resolution: {integrity: sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==} + peerDependencies: + vue: 3.4.27 + dependencies: + '@vue/compiler-ssr': 3.4.27 + '@vue/shared': 3.4.27 + vue: 3.4.27(typescript@5.4.5) + dev: false + + /@vue/shared@3.4.27: + resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==} + dev: false + + /@vueuse/core@10.10.0(vue@3.4.27): + resolution: {integrity: sha512-vexJ/YXYs2S42B783rI95lMt3GzEwkxzC8Hb0Ndpd8rD+p+Lk/Za4bd797Ym7yq4jXqdSyj3JLChunF/vyYjUw==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.10.0 + '@vueuse/shared': 10.10.0(vue@3.4.27) + vue-demi: 0.14.7(vue@3.4.27) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@vueuse/metadata@10.10.0: + resolution: {integrity: sha512-UNAo2sTCAW5ge6OErPEHb5z7NEAg3XcO9Cj7OK45aZXfLLH1QkexDcZD77HBi5zvEiLOm1An+p/4b5K3Worpug==} + dev: false + + /@vueuse/shared@10.10.0(vue@3.4.27): + resolution: {integrity: sha512-2aW33Ac0Uk0U+9yo3Ypg9s5KcR42cuehRWl7vnUHadQyFvCktseyxxEPBi1Eiq4D2yBGACOnqLZpx1eMc7g5Og==} + dependencies: + vue-demi: 0.14.7(vue@3.4.27) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + /@webassemblyjs/ast@1.12.1: resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: @@ -3122,6 +4389,17 @@ packages: indent-string: 4.0.0 dev: false + /ajv-draft-04@1.0.0(ajv@8.13.0): + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.13.0 + dev: false + /ajv-formats@2.1.1(ajv@8.13.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -3231,6 +4509,11 @@ packages: color-convert: 2.0.1 dev: false + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: false + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -3258,6 +4541,26 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: false + /aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.3 + dev: false + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: false + + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: false + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: false @@ -3271,6 +4574,10 @@ packages: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: false + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: false + /astring@1.8.6: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true @@ -3301,6 +4608,13 @@ packages: postcss-value-parser: 4.2.0 dev: false + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: false + /axios@1.6.8: resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} dependencies: @@ -3554,6 +4868,19 @@ packages: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: false + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3563,6 +4890,14 @@ packages: supports-color: 5.5.0 dev: false + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3597,6 +4932,12 @@ packages: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} dev: false + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: false + /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: @@ -3684,11 +5025,30 @@ packages: engines: {node: '>=6'} dev: false + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + /clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} dev: false + /codemirror@6.0.1(@lezer/common@1.2.1): + resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/commands': 6.5.0 + '@codemirror/language': 6.10.1 + '@codemirror/lint': 6.8.0 + '@codemirror/search': 6.5.6 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + transitivePeerDependencies: + - '@lezer/common' + dev: false + /collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} dev: false @@ -3925,6 +5285,10 @@ packages: typescript: 5.4.5 dev: false + /crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + dev: false + /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: @@ -4049,6 +5413,10 @@ packages: engines: {node: '>= 6'} dev: false + /css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: false + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -4139,6 +5507,18 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + /cva@1.0.0-beta.1(typescript@5.4.5): + resolution: {integrity: sha512-gznFqTgERU9q4wg7jfgqtt34+RUt9S5t0xDAAEuDwQEAXEgjdDkKXpLLNjwSxsB4Ln/sqWJEH7yhE8Ny0mxd0w==} + peerDependencies: + typescript: '>= 4.5.5 < 6' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + clsx: 2.0.0 + typescript: 5.4.5 + dev: false + /debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} dev: false @@ -4179,6 +5559,37 @@ packages: mimic-response: 3.1.0 dev: false + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: false + + /deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.4 + is-arguments: 1.1.1 + is-array-buffer: 3.0.4 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + side-channel: 1.0.6 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: false + /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -4294,6 +5705,11 @@ packages: dequal: 2.0.3 dev: false + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4308,6 +5724,14 @@ packages: '@leichtgewicht/ip-codec': 2.0.5 dev: false + /dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: false + + /dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dev: false + /dom-converter@0.2.0: resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} dependencies: @@ -4453,9 +5877,54 @@ packages: engines: {node: '>= 0.4'} dev: false + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: false + /es-module-lexer@1.5.2: resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: false + /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -4552,6 +6021,10 @@ packages: '@types/unist': 3.0.2 dev: false + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: false + /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: @@ -4740,6 +6213,13 @@ packages: webpack: 5.91.0 dev: false + /file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + dependencies: + fs-extra: 11.1.1 + ramda: 0.29.0 + dev: false + /filesize@8.0.7: resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} engines: {node: '>= 0.4.0'} @@ -4824,6 +6304,12 @@ packages: optional: true dev: false + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: false + /fork-ts-checker-webpack-plugin@6.5.3(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} @@ -4874,6 +6360,14 @@ packages: engines: {node: '>=0.4.x'} dev: false + /formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + dev: false + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -4888,6 +6382,15 @@ packages: engines: {node: '>= 0.6'} dev: false + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + /fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -4927,11 +6430,24 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: false + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false + + /fuse.js@6.6.2: + resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==} + engines: {node: '>=10'} + dev: false + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: false + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: false + /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -4956,6 +6472,10 @@ packages: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} dev: false + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + dev: false + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -5086,6 +6606,10 @@ packages: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: false + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5111,6 +6635,13 @@ packages: engines: {node: '>= 0.4'} dev: false + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + /has-yarn@3.0.0: resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5123,6 +6654,13 @@ packages: function-bind: 1.1.2 dev: false + /hast-util-embedded@3.0.0: + resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + dependencies: + '@types/hast': 3.0.4 + hast-util-is-element: 3.0.0 + dev: false + /hast-util-from-parse5@8.0.1: resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} dependencies: @@ -5136,12 +6674,40 @@ packages: web-namespaces: 2.0.1 dev: false + /hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + dependencies: + '@types/hast': 3.0.4 + dev: false + + /hast-util-is-body-ok-link@3.0.0: + resolution: {integrity: sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w==} + dependencies: + '@types/hast': 3.0.4 + dev: false + + /hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + dependencies: + '@types/hast': 3.0.4 + dev: false + /hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} dependencies: '@types/hast': 3.0.4 dev: false + /hast-util-phrasing@3.0.1: + resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.0 + hast-util-is-element: 3.0.0 + dev: false + /hast-util-raw@9.0.2: resolution: {integrity: sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==} dependencies: @@ -5160,6 +6726,14 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-sanitize@5.0.1: + resolution: {integrity: sha512-IGrgWLuip4O2nq5CugXy4GI2V8kx4sFVy5Hd4vF7AR2gxS0N9s7nEAVUyeMtZKZvzrxVsHt73XdTsno1tClIkQ==} + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.2.0 + unist-util-position: 5.0.0 + dev: false + /hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} dependencies: @@ -5183,6 +6757,23 @@ packages: - supports-color dev: false + /hast-util-to-html@9.0.1: + resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 9.0.2 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.1.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + dev: false + /hast-util-to-jsx-runtime@2.3.0: resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} dependencies: @@ -5217,6 +6808,15 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + dev: false + /hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} dependencies: @@ -5238,6 +6838,11 @@ packages: hasBin: true dev: false + /highlight.js@11.9.0: + resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} + engines: {node: '>=12.0.0'} + dev: false + /history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: @@ -5255,6 +6860,10 @@ packages: react-is: 16.13.1 dev: false + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: false + /hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} dependencies: @@ -5329,6 +6938,10 @@ packages: webpack: 5.91.0 dev: false + /html-whitespace-sensitive-tag-names@3.0.0: + resolution: {integrity: sha512-KlClZ3/Qy5UgvpvVvDomGhnQhNWH5INE8GwvSIQ9CWt1K0zbbXrl7eN5bWaafOZgtmO3jMPwUqmrmEwinhPq1w==} + dev: false + /htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} dependencies: @@ -5418,6 +7031,15 @@ packages: resolve-alpn: 1.2.1 dev: false + /httpsnippet-lite@3.0.5: + resolution: {integrity: sha512-So4qTXY5iFj5XtFDwyz2PicUu+8NWrI8e8h+ZeZoVtMNcFQp4FFIntBHUE+JPUG6QQU8o1VHCy+X4ETRDwt9CA==} + engines: {node: '>=14.13'} + dependencies: + '@types/har-format': 1.2.15 + formdata-node: 4.4.1 + stringify-object: 3.3.0 + dev: false + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -5516,6 +7138,15 @@ packages: resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} dev: false + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: false + /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -5536,6 +7167,11 @@ packages: engines: {node: '>= 10'} dev: false + /is-absolute-url@4.0.1: + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} dev: false @@ -5547,10 +7183,32 @@ packages: is-decimal: 2.0.1 dev: false + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: false + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: false + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: false + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -5558,6 +7216,19 @@ packages: binary-extensions: 2.3.0 dev: false + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: false + /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true @@ -5571,6 +7242,13 @@ packages: hasown: 2.0.2 dev: false + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} dev: false @@ -5596,6 +7274,13 @@ packages: engines: {node: '>=8'} dev: false + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -5615,11 +7300,23 @@ packages: is-path-inside: 3.0.3 dev: false + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: false + /is-npm@6.0.0: resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5667,6 +7364,14 @@ packages: '@types/estree': 1.0.5 dev: false + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + /is-regexp@1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} engines: {node: '>=0.10.0'} @@ -5677,15 +7382,61 @@ packages: engines: {node: '>=6'} dev: false + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: false + + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: false + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: false + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: false + /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: false + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: false + + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: false + /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -5706,6 +7457,10 @@ packages: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: false + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: false @@ -5714,6 +7469,10 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + /isomorphic.js@0.2.5: + resolution: {integrity: sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==} + dev: false + /jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5815,6 +7574,11 @@ packages: graceful-fs: 4.2.11 dev: false + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: false + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -5849,6 +7613,19 @@ packages: engines: {node: '>=6'} dev: false + /leven@4.0.0: + resolution: {integrity: sha512-puehA3YKku3osqPlNuzGDUHq8WpwXupUg1V6NXdV38G+gr+gkBwFC8g1b/+YcIvp8gnqVIus+eJCH/eGsRmJNw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /lib0@0.2.94: + resolution: {integrity: sha512-hZ3p54jL4Wpu7IOg26uC7dnEWiMyNlUrb9KoG7+xYs45WkQwpVvKFndVq2+pqLYKe1u8Fp3+zAfZHVvTK34PvQ==} + engines: {node: '>=16'} + hasBin: true + dependencies: + isomorphic.js: 0.2.5 + dev: false + /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -5932,6 +7709,12 @@ packages: dependencies: js-tokens: 4.0.0 + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: false + /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: @@ -5943,6 +7726,14 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false + /lowlight@3.1.0: + resolution: {integrity: sha512-CEbNVoSikAxwDMDPjXlqlFYiZLkDJHwyGu/MfOsJnF3d7f3tds5J3z8s/l9TMXhzfsJCCJEAsD78842mwmg0PQ==} + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + highlight.js: 11.9.0 + dev: false + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -5956,6 +7747,21 @@ packages: yallist: 4.0.0 dev: false + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + dev: false + + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + + /map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + dev: false + /markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -6182,6 +7988,12 @@ packages: zwitch: 2.0.4 dev: false + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.15 + dev: false + /mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} dependencies: @@ -6204,6 +8016,12 @@ packages: fs-monkey: 1.0.6 dev: false + /memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + dependencies: + map-or-similar: 1.5.0 + dev: false + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: false @@ -6649,6 +8467,11 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: false + /mini-css-extract-plugin@2.9.0(webpack@5.91.0): resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} engines: {node: '>= 12.13.0'} @@ -6705,6 +8528,12 @@ packages: hasBin: true dev: false + /nanoid@5.0.7: + resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} + engines: {node: ^18 || >=20} + hasBin: true + dev: false + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -6720,6 +8549,11 @@ packages: tslib: 2.6.2 dev: false + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + /node-emoji@2.1.3: resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} engines: {node: '>=18'} @@ -6795,6 +8629,14 @@ packages: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: false + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + dev: false + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -6848,6 +8690,10 @@ packages: is-wsl: 2.2.0 dev: false + /openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + dev: false + /opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -6967,6 +8813,11 @@ packages: lines-and-columns: 1.2.4 dev: false + /parse-ms@3.0.0: + resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==} + engines: {node: '>=12'} + dev: false + /parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} dev: false @@ -7048,6 +8899,10 @@ packages: engines: {node: '>=8'} dev: false + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: false + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -7078,6 +8933,11 @@ packages: find-up: 3.0.0 dev: false + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: false + /postcss-calc@8.2.4(postcss@8.4.38): resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: @@ -7294,6 +9154,16 @@ packages: postcss: 8.4.38 dev: false + /postcss-nested@6.0.1(postcss@8.4.38): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 + dev: false + /postcss-normalize-charset@5.1.0(postcss@8.4.38): resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} @@ -7488,6 +9358,11 @@ packages: source-map-js: 1.2.0 dev: false + /pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: false + /pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} dependencies: @@ -7495,6 +9370,31 @@ packages: renderkid: 3.0.0 dev: false + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: false + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + dev: false + + /pretty-ms@8.0.0: + resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} + engines: {node: '>=14.16'} + dependencies: + parse-ms: 3.0.0 + dev: false + /pretty-time@1.1.0: resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} engines: {node: '>=4'} @@ -7601,6 +9501,10 @@ packages: engines: {node: '>=10'} dev: false + /ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + dev: false + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -7732,6 +9636,14 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: false + + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + dev: false + /react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} dev: false @@ -7857,6 +9769,14 @@ packages: minimatch: 3.1.2 dev: false + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: false + /regenerate-unicode-properties@10.1.1: resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} @@ -7877,6 +9797,16 @@ packages: '@babel/runtime': 7.24.5 dev: false + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: false + /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} @@ -7910,6 +9840,50 @@ packages: jsesc: 0.5.0 dev: false + /rehype-external-links@3.0.0: + resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.2.0 + hast-util-is-element: 3.0.0 + is-absolute-url: 4.0.1 + space-separated-tokens: 2.0.2 + unist-util-visit: 5.0.0 + dev: false + + /rehype-format@5.0.0: + resolution: {integrity: sha512-kM4II8krCHmUhxrlvzFSptvaWh280Fr7UGNJU5DCMuvmAwGCNmGfi9CvFAQK6JDjsNoRMWQStglK3zKJH685Wg==} + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-phrasing: 3.0.1 + hast-util-whitespace: 3.0.0 + html-whitespace-sensitive-tag-names: 3.0.0 + rehype-minify-whitespace: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false + + /rehype-highlight@7.0.0: + resolution: {integrity: sha512-QtobgRgYoQaK6p1eSr2SD1i61f7bjF2kZHAQHxeCHAuJf7ZUDMvQ7owDq9YTkmar5m5TSUol+2D3bp3KfJf/oA==} + dependencies: + '@types/hast': 3.0.4 + hast-util-to-text: 4.0.2 + lowlight: 3.1.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + dev: false + + /rehype-minify-whitespace@6.0.0: + resolution: {integrity: sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA==} + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.0 + dev: false + /rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} dependencies: @@ -7918,6 +9892,21 @@ packages: vfile: 6.0.1 dev: false + /rehype-sanitize@6.0.0: + resolution: {integrity: sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==} + dependencies: + '@types/hast': 3.0.4 + hast-util-sanitize: 5.0.1 + dev: false + + /rehype-stringify@10.0.0: + resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} + dependencies: + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.1 + unified: 11.0.4 + dev: false + /relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -8076,6 +10065,32 @@ packages: glob: 7.2.3 dev: false + /rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 + fsevents: 2.3.3 + dev: false + /rtl-detect@1.1.2: resolution: {integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==} dev: false @@ -8272,6 +10287,16 @@ packages: has-property-descriptors: 1.0.2 dev: false + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: false + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: false @@ -8465,6 +10490,13 @@ packages: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} dev: false + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.7 + dev: false + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -8535,6 +10567,13 @@ packages: engines: {node: '>=6'} dev: false + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: false + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -8545,6 +10584,10 @@ packages: engines: {node: '>=8'} dev: false + /style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + dev: false + /style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: @@ -8611,6 +10654,12 @@ packages: stable: 0.1.8 dev: false + /tailwind-merge@2.3.0: + resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} + dependencies: + '@babel/runtime': 7.24.5 + dev: false + /tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -8620,6 +10669,12 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + /telejson@7.2.0: + resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} + dependencies: + memoizerific: 1.11.3 + dev: false + /terser-webpack-plugin@5.3.10(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} @@ -8669,6 +10724,11 @@ packages: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} dev: false + /tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + dev: false + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -8703,10 +10763,20 @@ packages: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: false + /ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + dev: false + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: false + /type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -8744,6 +10814,15 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /unhead@1.9.11: + resolution: {integrity: sha512-AoX0hOBrpYM5ctX3rNPaKeHkhybIMrrirb+NlonRBMHy/YkodO5m6mretYEe17bu9mQoeU2rnEWRm36MXtG4OQ==} + dependencies: + '@unhead/dom': 1.9.11 + '@unhead/schema': 1.9.11 + '@unhead/shared': 1.9.11 + hookable: 5.5.3 + dev: false + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -8791,6 +10870,19 @@ packages: crypto-random-string: 4.0.0 dev: false + /unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + dev: false + + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.10 + dev: false + /unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: @@ -8822,6 +10914,13 @@ packages: '@types/unist': 3.0.2 dev: false + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + dev: false + /unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: @@ -8829,6 +10928,14 @@ packages: unist-util-is: 6.0.0 dev: false + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.10 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + /unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: @@ -8938,6 +11045,16 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: false + /utila@0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} dev: false @@ -8987,6 +11104,81 @@ packages: vfile-message: 4.0.2 dev: false + /vite@5.2.11(@types/node@20.12.8): + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.12.8 + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.18.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /vue-demi@0.14.7(vue@3.4.27): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.4.27(typescript@5.4.5) + dev: false + + /vue-sonner@1.1.2: + resolution: {integrity: sha512-yg4f5s0a3oiiI7cNvO0Dajux1Y7s04lxww3vnQtnwQawJ3KqaKA9RIRMdI9wGTosRGIOwgYFniFRGl4+IuKPZw==} + dev: false + + /vue@3.4.27(typescript@5.4.5): + resolution: {integrity: sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.27 + '@vue/compiler-sfc': 3.4.27 + '@vue/runtime-dom': 3.4.27 + '@vue/server-renderer': 3.4.27(vue@3.4.27) + '@vue/shared': 3.4.27 + typescript: 5.4.5 + dev: false + + /w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + dev: false + /wait-on@7.2.0: resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} engines: {node: '>=12.0.0'} @@ -9018,6 +11210,11 @@ packages: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} dev: false + /web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + dev: false + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false @@ -9194,6 +11391,37 @@ packages: webidl-conversions: 3.0.1 dev: false + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: false + + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + dev: false + + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: false + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -9279,6 +11507,20 @@ packages: sax: 1.3.0 dev: false + /y-codemirror.next@0.3.3(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(yjs@13.6.15): + resolution: {integrity: sha512-rlL/Ax01Ul7W09L75tiV3R03+qJTYYfjy08AeiETtvFVFDUt+yNkvBvI50Kw3Z1Ypn1J+CEPTuFykHD0iwVo2Q==} + peerDependencies: + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + yjs: ^13.5.6 + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + lib0: 0.2.94 + yjs: 13.6.15 + dev: false + optional: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: false @@ -9292,6 +11534,19 @@ packages: engines: {node: '>= 6'} dev: false + /yaml@2.4.2: + resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + engines: {node: '>= 14'} + hasBin: true + dev: false + + /yjs@13.6.15: + resolution: {integrity: sha512-moFv4uNYhp8BFxIk3AkpoAnnjts7gwdpiG8RtyFiKbMtxKCS0zVZ5wPaaGpwC3V2N/K8TK8MwtSI3+WO9CHWjQ==} + engines: {node: '>=16.0.0', npm: '>=8.0.0'} + dependencies: + lib0: 0.2.94 + dev: false + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -9302,6 +11557,14 @@ packages: engines: {node: '>=12.20'} dev: false + /zhead@2.2.4: + resolution: {integrity: sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==} + dev: false + /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false diff --git a/static/img/create-api-key.png b/static/img/create-api-key.png new file mode 100644 index 0000000..7eded74 Binary files /dev/null and b/static/img/create-api-key.png differ diff --git a/static/img/fleetbase-architecture-diagram.svg b/static/img/fleetbase-architecture-diagram.svg new file mode 100644 index 0000000..ad7e6df --- /dev/null +++ b/static/img/fleetbase-architecture-diagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/order-config-activity-example.png b/static/img/order-config-activity-example.png new file mode 100644 index 0000000..57ea3c0 Binary files /dev/null and b/static/img/order-config-activity-example.png differ diff --git a/static/openapi/fleetbase-api-latest.json b/static/openapi/fleetbase-api-latest.json new file mode 100644 index 0000000..19a3f57 --- /dev/null +++ b/static/openapi/fleetbase-api-latest.json @@ -0,0 +1,8141 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "Fleetbase API", + "description": "# Introduction\n\nThe Fleetbase API is organized around REST. Our API has predictable, resource-oriented URLs, and uses HTTP response codes to indicate API errors. We use built-in HTTP features, like HTTP authentication and HTTP verbs, which are understood by off-the-shelf HTTP clients. We support cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application (though you should never expose your secret API key in any public website's client-side code). JSON is returned by all API responses, including errors, although our API libraries convert responses to appropriate language-specific objects.\n\nTo make the API as explorable as possible, accounts have test mode and live mode API keys. There is no \"switch\" for changing between modes, just use the appropriate key to perform a live or test transaction. Requests made with test mode credentials never hit the banking networks and incur no cost.\n\n# Authentication\n\nThe Fleetbase API uses API keys to authenticate requests. You can view and manage your API keys in the Fleetbase Developers Console.\n\nTest mode secret keys have the prefix `flb_test_` and live mode secret keys have the prefix `flb_live_`. Alternatively, you can use restricted API keys for granular permissions.\n\nYour API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth. Authentication to the API is performed via HTTP Basic Auth. Provide your API key as the basic auth username value. You do not need to provide a password. Or use your API key by setting it in the initial configuration of a Fleetbase SDK Client. The SDK will then automatically send this key in each request.\n\nAll API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.\n\n# Errors\n\nFleetbase 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 was omitted, a order failed, etc.). Codes in the `5xx` range indicate an error with Fleetbase's servers (these are rare).\n\nSome `4xx` errors that could be handled programmatically (e.g., route automation fails) include an error code that briefly explains the error reported.\n\n## Handling Errors\n\nOur Client libraries raise exceptions for many reasons, such as a route automation failed, invalid parameters, authentication errors, and network unavailability. We recommend writing code that gracefully handles all possible API exceptions.\n\nContact Support: \nName: Fleetbase Pte Ltd. \nEmail: [hello@fleetbase.io](https://mailto:hello@fleetbase.io)", + "version": "1.0.0", + "contact": {} + }, + "servers": [{ "url": "https://api.fleetbase.io/v1" }], + "paths": { + "/places": { + "get": { + "tags": ["Places"], + "summary": "Query Places", + "description": "Returns a list of your places. The places are returned sorted by creation date, with the most recent customers appearing first.", + "operationId": "queryPlaces", + "parameters": [ + { + "name": "query", + "in": "query", + "schema": { "type": "string", "example": "{{place_name}}" }, + "description": "This parameter allows you to filter the results by their name." + }, + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" }, + "description": "A cursor for use in pagination. A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10." + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "" }, + "description": "A cursor for use in pagination. A offset for the results, when the offset is supplied the results will start from the offset." + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" }, + "description": "A cursor used to sort results. Sort can be any property of the object, to sort descending sort must append the minus symbol. To sort by created date descending sort would be `-created_at` to sort in ascending order the sort would be `created_at`." + } + ], + "responses": { "200": { "description": "" } } + }, + "post": { + "tags": ["Places"], + "summary": "Create a Place", + "description": "When you create a place, you must specify a name and latitude and longitude coordinates.\n\nFleetbase will run a reverse geocode automatically on the provided coordinates to automatically complete the address when the optional fields are not provided.", + "operationId": "createAPlace", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "street1": { + "type": "string", + "example": "830 5th Ave, NY, NY" + } + } + }, + "examples": { + "Create a Place": { + "value": { "street1": "830 5th Ave, NY, NY" } + } + } + } + } + }, + "responses": { "200": { "description": "" } } + } + }, + "/places/{id}": { + "get": { + "tags": ["Places"], + "summary": "Retrieve a Place", + "description": "This endpoint allows you to retrieve a place object to view it's details.", + "operationId": "retrieveAPlace", + "responses": { "200": { "description": "" } } + }, + "put": { + "tags": ["Places"], + "summary": "Update a Place", + "description": "Updates the specified place by setting the values of the parameters passed. Any parameters not provided will be left unchanged. For example, if you pass the location parameter, that becomes the place's new location to be used for all spatial queries in the future. \n\nThis request accepts mostly the same arguments as the place creation call.", + "operationId": "updateAPlace", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "building": { + "type": "string", + "example": "Park Area" + }, + "city": { "type": "string", "example": "New York" }, + "country": { "type": "string", "example": "US" }, + "district": { "type": "string", "example": "Midtown" }, + "name": { + "type": "string", + "example": "Central Park Edit" + }, + "neighborhood": { + "type": "string", + "example": "Manhattan" + }, + "phone_country_code": { "type": "string", "example": "+1" }, + "phone_number": { + "type": "string", + "example": "212-310-6600" + }, + "postal_code": { "type": "string", "example": "10065" }, + "province": { "type": "string", "example": "New York" }, + "street1": { + "type": "string", + "example": "830 5th Ave a " + }, + "type": { "type": "string", "example": "Park" } + } + }, + "examples": { + "Update a Place": { + "value": { + "building": "Park Area", + "city": "New York", + "country": "US", + "district": "Midtown", + "name": "Central Park Edit", + "neighborhood": "Manhattan", + "phone_country_code": "+1", + "phone_number": "212-310-6600", + "postal_code": "10065", + "province": "New York", + "street1": "830 5th Ave a ", + "type": "Park" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Update a Place", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { "type": "string", "example": "keep-alive" } + }, + "Date": { + "schema": { + "type": "string", + "example": "Wed, 27 Dec 2023 07:43:57 GMT" + } + }, + "Server": { + "schema": { "type": "string", "example": "nginx" } + }, + "Transfer-Encoding": { + "schema": { "type": "string", "example": "chunked" } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string", + "example": "CENTRAL PARK EDITED - 830 5TH AVE, NEW YORK, 10065, UNITED STATES" + }, + "building": { + "type": "string", + "example": "Park Area" + }, + "city": { + "type": "string", + "example": "New York" + }, + "country": { "type": "string", "example": "US" }, + "created_at": { + "type": "string", + "example": "2023-12-27T07:25:36.000000Z" + }, + "district": { + "type": "string", + "example": "Midtown" + }, + "id": { + "type": "string", + "example": "place_n0voYdE" + }, + "location": { + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "example": -73.9712519 + }, + "example": [-73.9712519, 40.7676307] + }, + "type": { + "type": "string", + "example": "Point" + } + } + }, + "meta": { + "type": "array", + "items": {}, + "example": [] + }, + "name": { + "type": "string", + "example": "Central Park Edited" + }, + "neighborhood": { + "type": "string", + "example": "Manhattan" + }, + "owner": { "nullable": true, "example": null }, + "phone": { "nullable": true, "example": null }, + "postal_code": { + "type": "string", + "example": "10065" + }, + "province": { + "type": "string", + "example": "New York" + }, + "security_access_code": { "nullable": true, "example": null }, + "street1": { + "type": "string", + "example": "830 5th Ave" + }, + "street2": { "nullable": true, "example": null }, + "type": { "type": "string", "example": "Park" }, + "updated_at": { + "type": "string", + "example": "2023-12-27T07:43:57.000000Z" + } + } + }, + "examples": { + "Update a Place": { + "value": { + "address": "CENTRAL PARK EDITED - 830 5TH AVE, NEW YORK, 10065, UNITED STATES", + "building": "Park Area", + "city": "New York", + "country": "US", + "created_at": "2023-12-27T07:25:36.000000Z", + "district": "Midtown", + "id": "place_n0voYdE", + "location": { + "coordinates": [-73.9712519, 40.7676307], + "type": "Point" + }, + "meta": [], + "name": "Central Park Edited", + "neighborhood": "Manhattan", + "owner": null, + "phone": null, + "postal_code": "10065", + "province": "New York", + "security_access_code": null, + "street1": "830 5th Ave", + "street2": null, + "type": "Park", + "updated_at": "2023-12-27T07:43:57.000000Z" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Places"], + "summary": "Delete a Place", + "description": "Permanently deletes a place. It cannot be undone. ", + "operationId": "deleteAPlace", + "responses": { + "200": { + "description": "Delete a Place", + "headers": { + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { "type": "string", "example": "keep-alive" } + }, + "Date": { + "schema": { + "type": "string", + "example": "Wed, 27 Dec 2023 07:44:36 GMT" + } + }, + "Server": { + "schema": { "type": "string", "example": "nginx" } + }, + "Transfer-Encoding": { + "schema": { "type": "string", "example": "chunked" } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deleted": { "type": "boolean", "example": true }, + "id": { + "type": "string", + "example": "place_n0voYdE" + }, + "object": { + "type": "string", + "example": "place" + }, + "time": { + "type": "string", + "example": "2023-12-27T07:44:36.000000Z" + } + } + }, + "examples": { + "Delete a Place": { + "value": { + "deleted": true, + "id": "place_n0voYdE", + "object": "place", + "time": "2023-12-27T07:44:36.000000Z" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{place_id}}" }, + "description": "(Required) The id of the `Place`." + } + ] + }, + "/service-areas": { + "get": { + "tags": ["Service Areas"], + "summary": "Query Service Areas", + "description": "This endpoint allows you to retrieve a service area object to view it's details.", + "operationId": "queryServiceAreas", + "parameters": [ + { + "name": "name", + "in": "query", + "schema": { "type": "string", "example": "{{service_area_name}}" } + } + ], + "responses": { "200": { "description": "" } } + }, + "post": { + "tags": ["Service Areas"], + "summary": "Create a Service Area", + "description": "A service area is created by simply providing a city, province or country in which Fleetbase will reverse geocode into a service area.\n\nIf the service area cannot be reverse geocoded, Fleetbase will return an error.", + "operationId": "createAServiceArea", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "country": { "type": "string", "example": "SG" }, + "location": { + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "string", + "example": "1.2838" + }, + "example": ["1.2838", "103.8591"] + }, + "type": { + "type": "string", + "example": "Point" + } + } + }, + "name": { + "type": "string", + "example": "MBS Service Area" + }, + "radius": { "type": "string", "example": "30000" }, + "status": { "type": "string", "example": "active" }, + "type": { "type": "string", "example": "city" } + } + }, + "examples": { + "Create a Service Area": { + "value": { + "country": "SG", + "location": { + "coordinates": ["1.2838", "103.8591"], + "type": "Point" + }, + "name": "MBS Service Area", + "radius": "30000", + "status": "active", + "type": "city" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + } + }, + "/service-areas/{id}": { + "get": { + "tags": ["Service Areas"], + "summary": "Retrieve a Service Area", + "description": "This endpoint allows you to retrieve a service area object to view it's details.", + "operationId": "retrieveAServiceArea", + "responses": { + "200": { + "description": "OK / Retrieve a Service Area", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { "type": "string", "example": "true" } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string", + "example": "Content-Type, Authorization, Referer, User-Agent, Signature, Customer-Token, Access-Control-Request-Headers, Access-Control-Request-Method, Origin" + } + }, + "Access-Control-Allow-Methods": { + "schema": { "type": "string", "example": "GET, OPTIONS" } + }, + "Access-Control-Max-Age": { + "schema": { "type": "string", "example": "600" } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { "type": "string", "example": "keep-alive" } + }, + "Date": { + "schema": { + "type": "string", + "example": "Tue, 02 Jan 2024 03:10:47 GMT" + } + }, + "Invalid": { "schema": { "type": "string", "example": "1" } }, + "Server": { + "schema": { "type": "string", "example": "nginx" } + }, + "Set-Cookie": { + "schema": { + "type": "string", + "example": "fleetbase_session=BZTQN5le6WBpsdEIXN5x9dJuLqtxL3hHlFoV8WTH; expires=Tue, 30-Jan-2024 03:10:47 GMT; Max-Age=2419200; path=/; domain=.fleetbase.io; httponly; samesite=lax" + } + }, + "Transfer-Encoding": { + "schema": { "type": "string", "example": "chunked" } + }, + "X-Frame-Options": { + "schema": { "type": "string", "example": "DENY" } + }, + "X-RateLimit-Limit": { "schema": { "type": "string", "example": "60" } }, + "X-RateLimit-Remaining": { "schema": { "type": "string", "example": "55" } } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "location": { + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "example": 0 + }, + "example": [0, 0] + }, + "type": { + "type": "string", + "example": "Point" + } + } + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + } + }, + "Retrieve a Service Area": { + "value": { + "created_at": "2024-01-02T03:10:15.000000Z", + "id": "sa_mdL7P0a", + "location": { + "coordinates": [0, 0], + "type": "Point" + }, + "name": "Charlotte, NC", + "status": "active", + "type": "city", + "updated_at": "2024-01-02T03:10:15.000000Z" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Service Areas"], + "summary": "Update a Service Area", + "description": "You are only able to update the service area status", + "operationId": "updateAServiceArea", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { "type": "string", "example": "active" } + } + }, + "examples": { + "Update a Service Area": { "value": { "status": "active" } } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Service Areas"], + "summary": "Delete a Service Area", + "description": "Use this endpoint to delete a service area, deleting a service area will also delete all of the zones within the service area.", + "operationId": "deleteAServiceArea", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { "type": "object", "properties": {} }, + "examples": { "OK": { "value": {} } } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{service_area_id}}" }, + "description": "(Required) The id of the service area you want to delete." + } + ] + }, + "/zones": { + "get": { + "tags": ["Zones"], + "summary": "Query Zones", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "queryZones", + "parameters": [ + { + "name": "name", + "in": "query", + "schema": { "type": "string", "example": "{{zone_name}}" }, + "description": "The id of the zone you want to retrieve." + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "color": { + "type": "string", + "example": "" + }, + "coordinates": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "description": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "service_area": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "stroke_color": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "color": "", + "coordinates": "", + "created_at": "", + "description": "", + "id": "", + "name": "", + "service_area": "", + "status": "", + "stroke_color": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "post": { + "tags": ["Zones"], + "summary": "Create a Zone", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "createAZone", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "border": { + "type": "object", + "properties": { + "bbox": { + "type": "array", + "items": { + "type": "number", + "example": 103.867493 + }, + "example": [103.867493, 1.35085, 103.912125, 1.383113] + }, + "coordinates": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "number", + "example": 103.907661 + }, + "example": [103.907661, 1.362863] + }, + "example": [ + [103.907661, 1.362863], + [103.892555, 1.357714], + [103.891525, 1.353252], + [103.883629, 1.35085], + [103.874702, 1.351193], + [103.870583, 1.358744], + [103.867493, 1.368354], + [103.870926, 1.377621], + [103.875732, 1.38174], + [103.886032, 1.383113], + [103.900452, 1.383113], + [103.909721, 1.381397], + [103.912125, 1.374189], + [103.907661, 1.362863] + ] + }, + "example": [ + [ + [103.907661, 1.362863], + [103.892555, 1.357714], + [103.891525, 1.353252], + [103.883629, 1.35085], + [103.874702, 1.351193], + [103.870583, 1.358744], + [103.867493, 1.368354], + [103.870926, 1.377621], + [103.875732, 1.38174], + [103.886032, 1.383113], + [103.900452, 1.383113], + [103.909721, 1.381397], + [103.912125, 1.374189], + [103.907661, 1.362863] + ] + ] + }, + "type": { + "type": "string", + "example": "Polygon" + } + } + }, + "color": { "type": "string", "example": "#66e0ff" }, + "name": { + "type": "string", + "example": "Center of Singapore" + }, + "service_area": { + "type": "string", + "example": "{{service_area_id}}" + }, + "stroke_color": { "type": "string", "example": "#00bfff" } + } + }, + "examples": { + "Create a Zone": { + "value": { + "border": { + "bbox": [103.867493, 1.35085, 103.912125, 1.383113], + "coordinates": [ + [ + [103.907661, 1.362863], + [103.892555, 1.357714], + [103.891525, 1.353252], + [103.883629, 1.35085], + [103.874702, 1.351193], + [103.870583, 1.358744], + [103.867493, 1.368354], + [103.870926, 1.377621], + [103.875732, 1.38174], + [103.886032, 1.383113], + [103.900452, 1.383113], + [103.909721, 1.381397], + [103.912125, 1.374189], + [103.907661, 1.362863] + ] + ], + "type": "Polygon" + }, + "color": "#66e0ff", + "name": "Center of Singapore", + "service_area": "{{service_area_id}}", + "stroke_color": "#00bfff" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "color": { + "type": "string", + "example": "" + }, + "coordinates": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "description": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "service_area": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "stroke_color": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "color": "", + "coordinates": "", + "created_at": "", + "description": "", + "id": "", + "name": "", + "service_area": "", + "status": "", + "stroke_color": "", + "updated_at": "" + } + } + } + } + } + }, + "201": { + "description": "Create a Zone", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { "type": "string", "example": "true" } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string", + "example": "Content-Type, Authorization, Referer, User-Agent, Signature, Customer-Token, Access-Control-Request-Headers, Access-Control-Request-Method, Origin" + } + }, + "Access-Control-Allow-Methods": { + "schema": { "type": "string", "example": "GET, OPTIONS" } + }, + "Access-Control-Max-Age": { + "schema": { "type": "string", "example": "600" } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { "type": "string", "example": "keep-alive" } + }, + "Date": { + "schema": { + "type": "string", + "example": "Tue, 02 Jan 2024 05:54:57 GMT" + } + }, + "Invalid": { "schema": { "type": "string", "example": "1" } }, + "Server": { + "schema": { "type": "string", "example": "nginx" } + }, + "Set-Cookie": { + "schema": { + "type": "string", + "example": "fleetbase_session=BZTQN5le6WBpsdEIXN5x9dJuLqtxL3hHlFoV8WTH; expires=Tue, 30-Jan-2024 05:54:57 GMT; Max-Age=2419200; path=/; domain=.fleetbase.io; httponly; samesite=lax" + } + }, + "Transfer-Encoding": { + "schema": { "type": "string", "example": "chunked" } + }, + "X-Frame-Options": { + "schema": { "type": "string", "example": "DENY" } + }, + "X-RateLimit-Limit": { "schema": { "type": "string", "example": "60" } }, + "X-RateLimit-Remaining": { "schema": { "type": "string", "example": "58" } } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "color": { + "type": "string", + "example": "" + }, + "coordinates": { + "type": "array", + "items": {}, + "example": [] + }, + "created_at": { + "type": "string", + "example": "2024-01-02T05:54:57.000000Z" + }, + "description": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "zone_bm37E57" + }, + "name": { + "type": "string", + "example": "Center of Singapore" + }, + "service_area": { "nullable": true, "example": null }, + "status": { + "type": "string", + "example": "active" + }, + "stroke_color": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "2024-01-02T05:54:57.000000Z" + } + } + }, + "examples": { + "Create a Zone": { + "value": { + "color": "", + "coordinates": [], + "created_at": "2024-01-02T05:54:57.000000Z", + "description": "", + "id": "zone_bm37E57", + "name": "Center of Singapore", + "service_area": null, + "status": "active", + "stroke_color": "", + "updated_at": "2024-01-02T05:54:57.000000Z" + } + } + } + } + } + } + } + } + }, + "/zones/{id}": { + "get": { + "tags": ["Zones"], + "summary": "Retrieve a zone", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "retrieveAZone", + "responses": { + "200": { + "description": "Delete a Zone", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { "type": "string", "example": "true" } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string", + "example": "Content-Type, Authorization, Referer, User-Agent, Signature, Customer-Token, Access-Control-Request-Headers, Access-Control-Request-Method, Origin" + } + }, + "Access-Control-Allow-Methods": { + "schema": { "type": "string", "example": "GET, OPTIONS" } + }, + "Access-Control-Max-Age": { + "schema": { "type": "string", "example": "600" } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { "type": "string", "example": "keep-alive" } + }, + "Date": { + "schema": { + "type": "string", + "example": "Tue, 02 Jan 2024 06:08:57 GMT" + } + }, + "Invalid": { "schema": { "type": "string", "example": "1" } }, + "Server": { + "schema": { "type": "string", "example": "nginx" } + }, + "Set-Cookie": { + "schema": { + "type": "string", + "example": "fleetbase_session=BZTQN5le6WBpsdEIXN5x9dJuLqtxL3hHlFoV8WTH; expires=Tue, 30-Jan-2024 06:08:57 GMT; Max-Age=2419200; path=/; domain=.fleetbase.io; httponly; samesite=lax" + } + }, + "Transfer-Encoding": { + "schema": { "type": "string", "example": "chunked" } + }, + "X-Frame-Options": { + "schema": { "type": "string", "example": "DENY" } + }, + "X-RateLimit-Limit": { "schema": { "type": "string", "example": "60" } }, + "X-RateLimit-Remaining": { "schema": { "type": "string", "example": "58" } } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "color": { + "type": "string", + "example": "" + }, + "coordinates": { + "type": "array", + "items": {}, + "example": [] + }, + "created_at": { + "type": "string", + "example": "2024-01-02T05:54:57.000000Z" + }, + "description": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "zone_bm37E57" + }, + "name": { + "type": "string", + "example": "Center of Singapore" + }, + "service_area": { "nullable": true, "example": null }, + "status": { + "type": "string", + "example": "active" + }, + "stroke_color": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "2024-01-02T05:54:57.000000Z" + } + } + }, + "examples": { + "Delete a Zone": { + "value": { + "color": "", + "coordinates": [], + "created_at": "2024-01-02T05:54:57.000000Z", + "description": "", + "id": "zone_bm37E57", + "name": "Center of Singapore", + "service_area": null, + "status": "active", + "stroke_color": "", + "updated_at": "2024-01-02T05:54:57.000000Z" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Zones"], + "summary": "Update a Zone", + "description": "You can update all properties of the Zone.\n\n", + "operationId": "updateAZone", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "color": { "type": "string", "example": "#ff00000" } + } + }, + "examples": { + "Update a Zone": { "value": { "color": "#ff00000" } } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "color": { + "type": "string", + "example": "" + }, + "coordinates": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "description": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "service_area": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "stroke_color": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "color": "", + "coordinates": "", + "created_at": "", + "description": "", + "id": "", + "name": "", + "service_area": "", + "status": "", + "stroke_color": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Zones"], + "summary": "Delete a Zone", + "description": "Use this endpoint to delete a zone.", + "operationId": "deleteAZone", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deleted": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "deleted": "", + "id": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{zone_id}}" }, + "description": "(Required) The id of the zone you want to delete." + } + ] + }, + "/contacts": { + "get": { + "tags": ["Contacts"], + "summary": "Query Contacts", + "description": "Returns a list of your contacts. The contacts are returned sorted by creation date, with the most recent customers appearing first.", + "operationId": "queryContacts", + "parameters": [ + { + "name": "query", + "in": "query", + "schema": { "type": "string", "example": "{{contact_name}}" }, + "description": "This parameter allows you to filter the results by their name." + }, + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" }, + "description": "A cursor for use in pagination. A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10." + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "0" }, + "description": "A cursor for use in pagination. A offset for the results, when the offset is supplied the results will start from the offset." + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" }, + "description": "A cursor used to sort results. Sort can be any property of the object, to sort descending sort must append the minus symbol. To sort by created date descending sort would be `-created_at` to sort in ascending order the sort would be `created_at`." + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "title": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "email": "", + "id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "title": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "post": { + "tags": ["Contacts"], + "summary": "Create a Contact", + "description": "Create a new Contact.", + "operationId": "createAContact", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": "john@exampleco.com" + }, + "name": { "type": "string", "example": "John Doe" }, + "phone": { + "type": "string", + "example": "+1 563-920-4264" + }, + "title": { "type": "string", "example": "Mr" }, + "type": { "type": "string", "example": "customer" } + } + }, + "examples": { + "Create a Contact": { + "value": { + "email": "john@exampleco.com", + "name": "John Doe", + "phone": "+1 563-920-4264", + "title": "Mr", + "type": "customer" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "title": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "email": "", + "id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "title": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/contacts/{id}": { + "get": { + "tags": ["Contacts"], + "summary": "Retrieve a Contact", + "description": "Retrieve a Contact.", + "operationId": "retrieveAContact", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "title": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "email": "", + "id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "title": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Contacts"], + "summary": "Update a Contact", + "description": "Update a Contact", + "operationId": "updateAContact", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": "john@exampleco.com" + }, + "name": { "type": "string", "example": "John Doe" }, + "phone": { + "type": "string", + "example": "563-920-4264" + }, + "slug": { "type": "string", "example": "john-doe" }, + "title": { "type": "string", "example": "Mr" }, + "type": { + "type": "string", + "example": "technician" + } + } + }, + "examples": { + "Update a Contact": { + "value": { + "email": "john@exampleco.com", + "name": "John Doe", + "phone": "563-920-4264", + "slug": "john-doe", + "title": "Mr", + "type": "technician" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "title": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "email": "", + "id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "title": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Contacts"], + "summary": "Delete a Contact", + "description": "Delete a Contact.", + "operationId": "deleteAContact", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deleted": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "deleted": "", + "id": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{contact_id}}" } + } + ] + }, + "/vendors": { + "get": { + "tags": ["Vendors"], + "summary": "Query Vendors", + "description": "This endpoint allows you to retrieve a vendor object to view it's details.", + "operationId": "queryVendors", + "parameters": [ + { + "name": "id", + "in": "query", + "schema": { "type": "string", "example": "{{vendor_id}}" }, + "description": "The id of the vendor you want to retrieve." + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "internal_id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "address": "", + "created_at": "", + "email": "", + "id": "", + "internal_id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "post": { + "tags": ["Vendors"], + "summary": "Create a Vendor", + "description": "Create a vendor", + "operationId": "createAVendor", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": "abc@example.com" + }, + "internal_id": { "type": "string", "example": "ABC123" }, + "name": { + "type": "string", + "example": "ABC Corporation" + }, + "phone": { + "type": "string", + "example": "1234567890" + }, + "type": { "type": "string", "example": "Supplier" } + } + }, + "examples": { + "Create a Vendor": { + "value": { + "email": "abc@example.com", + "internal_id": "ABC123", + "name": "ABC Corporation", + "phone": "1234567890", + "type": "Supplier" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "internal_id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "address": "", + "created_at": "", + "email": "", + "id": "", + "internal_id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/vendors/{id}": { + "get": { + "tags": ["Vendors"], + "summary": "Retrieve a Vendor", + "description": "This endpoint allows you to retrieve a vendor object to view it's details.", + "operationId": "retrieveAVendor", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "internal_id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "address": "", + "created_at": "", + "email": "", + "id": "", + "internal_id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Vendors"], + "summary": "Update a Vendor", + "description": "You can update all properties of the Vendor.", + "operationId": "updateAVendor", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": "abc@example.com" + }, + "internal_id": { "type": "string", "example": "ABC123" }, + "name": { + "type": "string", + "example": "ABC Corporation" + }, + "phone": { + "type": "string", + "example": "1234567890" + }, + "type": { "type": "string", "example": "Supplier" } + } + }, + "examples": { + "Update a Vendor": { + "value": { + "email": "abc@example.com", + "internal_id": "ABC123", + "name": "ABC Corporation", + "phone": "1234567890", + "type": "Supplier" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "internal_id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "address": "", + "created_at": "", + "email": "", + "id": "", + "internal_id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Vendors"], + "summary": "Delete a Vendor", + "description": "Use this endpoint to delete a vendor.", + "operationId": "deleteAVendor", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "address": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "internal_id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "address": "", + "created_at": "", + "email": "", + "id": "", + "internal_id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{vendor_id}}" } + } + ] + }, + "/vehicles": { + "get": { + "tags": ["Vehicles"], + "summary": "Query Vehicles", + "description": "This endpoint allows you to query vehicles you have created, it also provides paginated results on all the vehicles in your Fleetbase.", + "operationId": "queryVehicles", + "parameters": [ + { + "name": "query", + "in": "query", + "schema": { "type": "string", "example": "{{vehicle_name}}" }, + "description": "This parameter allows you to filter the results by their name." + }, + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" }, + "description": "A cursor for use in pagination. A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10." + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "0" }, + "description": "A cursor for use in pagination. A offset for the results, when the offset is supplied the results will start from the offset." + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" }, + "description": "A cursor used to sort results. Sort can be any property of the object, to sort descending sort must append the minus symbol. To sort by created date descending sort would be `-created_at` to sort in ascending order the sort would be `created_at`." + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "driver": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "make": { + "type": "string", + "example": "" + }, + "model": { + "type": "string", + "example": "" + }, + "model_data": { + "type": "object", + "properties": { + "0_to_100_kph": { + "type": "string", + "example": "" + }, + "body": { + "type": "string", + "example": "" + }, + "co2": { + "type": "string", + "example": "" + }, + "doors": { + "type": "string", + "example": "" + }, + "drive": { + "type": "string", + "example": "" + }, + "engine_bore_mm": { + "type": "string", + "example": "" + }, + "engine_cc": { + "type": "string", + "example": "" + }, + "engine_compression": { + "type": "string", + "example": "" + }, + "engine_cyl": { + "type": "string", + "example": "" + }, + "engine_fuel": { + "type": "string", + "example": "" + }, + "engine_position": { + "type": "string", + "example": "" + }, + "engine_power_ps": { + "type": "string", + "example": "" + }, + "engine_power_rpm": { + "type": "string", + "example": "" + }, + "engine_stroke_mm": { + "type": "string", + "example": "" + }, + "engine_torque_nm": { + "type": "string", + "example": "" + }, + "engine_torque_rpm": { + "type": "string", + "example": "" + }, + "engine_valves_per_cyl": { + "type": "string", + "example": "" + }, + "fuel_cap_l": { + "type": "string", + "example": "" + }, + "length_mm": { + "type": "string", + "example": "" + }, + "lkm_city": { + "type": "string", + "example": "" + }, + "lkm_hwy": { + "type": "string", + "example": "" + }, + "lkm_mixed": { + "type": "string", + "example": "" + }, + "make_display": { + "type": "string", + "example": "" + }, + "seats": { + "type": "string", + "example": "" + }, + "sold_in_us": { + "type": "string", + "example": "" + }, + "top_speed_kph": { + "type": "string", + "example": "" + }, + "transmission_type": { + "type": "string", + "example": "" + }, + "weight_kg": { + "type": "string", + "example": "" + }, + "wheelbase_mm": { + "type": "string", + "example": "" + }, + "width_mm": { + "type": "string", + "example": "" + } + } + }, + "name": { + "type": "string", + "example": "" + }, + "photo_url": { + "type": "string", + "example": "" + }, + "plate_number": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "trim": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vin": { + "type": "string", + "example": "" + }, + "vin_data": { + "type": "object", + "properties": { + "body": { + "type": "string", + "example": "" + }, + "check_digit": { + "type": "string", + "example": "" + }, + "engine_displacement_ccm": { + "type": "string", + "example": "" + }, + "engine_model": { + "type": "string", + "example": "" + }, + "engine_power_kw": { + "type": "string", + "example": "" + }, + "fuel_type_primary": { + "type": "string", + "example": "" + }, + "make": { + "type": "string", + "example": "" + }, + "manufacturer": { + "type": "string", + "example": "" + }, + "manufacturer_address": { + "type": "string", + "example": "" + }, + "model": { + "type": "string", + "example": "" + }, + "model_year": { + "type": "string", + "example": "" + }, + "number_of_doors": { + "type": "string", + "example": "" + }, + "number_of_gears": { + "type": "string", + "example": "" + }, + "plant_city": { + "type": "string", + "example": "" + }, + "plant_country": { + "type": "string", + "example": "" + }, + "plant_state": { + "type": "string", + "example": "" + }, + "product_type": { + "type": "string", + "example": "" + }, + "production_stopped": { + "type": "string", + "example": "" + }, + "sequential_number": { + "type": "string", + "example": "" + }, + "series": { + "type": "string", + "example": "" + }, + "transmission": { + "type": "string", + "example": "" + }, + "trim": { + "type": "string", + "example": "" + } + } + }, + "year": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "driver": "", + "id": "", + "make": "", + "model": "", + "model_data": { + "0_to_100_kph": "", + "body": "", + "co2": "", + "doors": "", + "drive": "", + "engine_bore_mm": "", + "engine_cc": "", + "engine_compression": "", + "engine_cyl": "", + "engine_fuel": "", + "engine_position": "", + "engine_power_ps": "", + "engine_power_rpm": "", + "engine_stroke_mm": "", + "engine_torque_nm": "", + "engine_torque_rpm": "", + "engine_valves_per_cyl": "", + "fuel_cap_l": "", + "length_mm": "", + "lkm_city": "", + "lkm_hwy": "", + "lkm_mixed": "", + "make_display": "", + "seats": "", + "sold_in_us": "", + "top_speed_kph": "", + "transmission_type": "", + "weight_kg": "", + "wheelbase_mm": "", + "width_mm": "" + }, + "name": "", + "photo_url": "", + "plate_number": "", + "status": "", + "trim": "", + "type": "", + "updated_at": "", + "vin": "", + "vin_data": { + "body": "", + "check_digit": "", + "engine_displacement_ccm": "", + "engine_model": "", + "engine_power_kw": "", + "fuel_type_primary": "", + "make": "", + "manufacturer": "", + "manufacturer_address": "", + "model": "", + "model_year": "", + "number_of_doors": "", + "number_of_gears": "", + "plant_city": "", + "plant_country": "", + "plant_state": "", + "product_type": "", + "production_stopped": "", + "sequential_number": "", + "series": "", + "transmission": "", + "trim": "" + }, + "year": "" + } + } + } + } + } + } + } + }, + "post": { + "tags": ["Vehicles"], + "summary": "Create a Vehicle", + "description": "In order to create a vehicle you must provide the VIN number, Fleetbase will automatically decode the VIN and pull the information on the vehicle.", + "operationId": "createAVehicle", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "make": { "type": "string", "example": "Toyota" }, + "model": { "type": "string", "example": "Camry" }, + "plate_number": { "type": "string", "example": "ABC123" }, + "status": { + "type": "string", + "example": "maintenance" + }, + "trim": { "type": "string", "example": "SE" }, + "vin": { + "type": "string", + "example": "1GCGSBEA0G1111111" + }, + "year": { "type": "number", "example": 2023 } + } + }, + "examples": { + "Create a Vehicle": { + "value": { + "make": "Toyota", + "model": "Camry", + "plate_number": "ABC123", + "status": "maintenance", + "trim": "SE", + "vin": "1GCGSBEA0G1111111", + "year": 2023 + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "driver": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "make": { + "type": "string", + "example": "" + }, + "model": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "photo_url": { + "type": "string", + "example": "" + }, + "plate_number": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "trim": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vin": { + "type": "string", + "example": "" + }, + "year": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "Created": { + "value": { + "created_at": "", + "driver": "", + "id": "", + "make": "", + "model": "", + "name": "", + "photo_url": "", + "plate_number": "", + "status": "", + "trim": "", + "type": "", + "updated_at": "", + "vin": "", + "year": "" + } + } + } + } + } + } + } + } + }, + "/vehicles/{id}": { + "get": { + "tags": ["Vehicles"], + "summary": "Retrieve a Vehicle", + "description": "Retrieve details for a specific `Vehicle`.", + "operationId": "retrieveAVehicle", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "driver": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "make": { + "type": "string", + "example": "" + }, + "model": { + "type": "string", + "example": "" + }, + "model_data": { + "type": "object", + "properties": { + "0_to_100_kph": { + "type": "string", + "example": "" + }, + "body": { + "type": "string", + "example": "" + }, + "co2": { + "type": "string", + "example": "" + }, + "doors": { + "type": "string", + "example": "" + }, + "drive": { + "type": "string", + "example": "" + }, + "engine_bore_mm": { + "type": "string", + "example": "" + }, + "engine_cc": { + "type": "string", + "example": "" + }, + "engine_compression": { + "type": "string", + "example": "" + }, + "engine_cyl": { + "type": "string", + "example": "" + }, + "engine_fuel": { + "type": "string", + "example": "" + }, + "engine_position": { + "type": "string", + "example": "" + }, + "engine_power_ps": { + "type": "string", + "example": "" + }, + "engine_power_rpm": { + "type": "string", + "example": "" + }, + "engine_stroke_mm": { + "type": "string", + "example": "" + }, + "engine_torque_nm": { + "type": "string", + "example": "" + }, + "engine_torque_rpm": { + "type": "string", + "example": "" + }, + "engine_valves_per_cyl": { + "type": "string", + "example": "" + }, + "fuel_cap_l": { + "type": "string", + "example": "" + }, + "length_mm": { + "type": "string", + "example": "" + }, + "lkm_city": { + "type": "string", + "example": "" + }, + "lkm_hwy": { + "type": "string", + "example": "" + }, + "lkm_mixed": { + "type": "string", + "example": "" + }, + "make_display": { + "type": "string", + "example": "" + }, + "seats": { + "type": "string", + "example": "" + }, + "sold_in_us": { + "type": "string", + "example": "" + }, + "top_speed_kph": { + "type": "string", + "example": "" + }, + "transmission_type": { + "type": "string", + "example": "" + }, + "weight_kg": { + "type": "string", + "example": "" + }, + "wheelbase_mm": { + "type": "string", + "example": "" + }, + "width_mm": { + "type": "string", + "example": "" + } + } + }, + "name": { + "type": "string", + "example": "" + }, + "photo_url": { + "type": "string", + "example": "" + }, + "plate_number": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "trim": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vin": { + "type": "string", + "example": "" + }, + "vin_data": { + "type": "object", + "properties": { + "body": { + "type": "string", + "example": "" + }, + "check_digit": { + "type": "string", + "example": "" + }, + "engine_displacement_ccm": { + "type": "string", + "example": "" + }, + "engine_model": { + "type": "string", + "example": "" + }, + "engine_power_kw": { + "type": "string", + "example": "" + }, + "fuel_type_primary": { + "type": "string", + "example": "" + }, + "make": { + "type": "string", + "example": "" + }, + "manufacturer": { + "type": "string", + "example": "" + }, + "manufacturer_address": { + "type": "string", + "example": "" + }, + "model": { + "type": "string", + "example": "" + }, + "model_year": { + "type": "string", + "example": "" + }, + "number_of_doors": { + "type": "string", + "example": "" + }, + "number_of_gears": { + "type": "string", + "example": "" + }, + "plant_city": { + "type": "string", + "example": "" + }, + "plant_country": { + "type": "string", + "example": "" + }, + "plant_state": { + "type": "string", + "example": "" + }, + "product_type": { + "type": "string", + "example": "" + }, + "production_stopped": { + "type": "string", + "example": "" + }, + "sequential_number": { + "type": "string", + "example": "" + }, + "series": { + "type": "string", + "example": "" + }, + "transmission": { + "type": "string", + "example": "" + }, + "trim": { + "type": "string", + "example": "" + } + } + }, + "year": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "driver": "", + "id": "", + "make": "", + "model": "", + "model_data": { + "0_to_100_kph": "", + "body": "", + "co2": "", + "doors": "", + "drive": "", + "engine_bore_mm": "", + "engine_cc": "", + "engine_compression": "", + "engine_cyl": "", + "engine_fuel": "", + "engine_position": "", + "engine_power_ps": "", + "engine_power_rpm": "", + "engine_stroke_mm": "", + "engine_torque_nm": "", + "engine_torque_rpm": "", + "engine_valves_per_cyl": "", + "fuel_cap_l": "", + "length_mm": "", + "lkm_city": "", + "lkm_hwy": "", + "lkm_mixed": "", + "make_display": "", + "seats": "", + "sold_in_us": "", + "top_speed_kph": "", + "transmission_type": "", + "weight_kg": "", + "wheelbase_mm": "", + "width_mm": "" + }, + "name": "", + "photo_url": "", + "plate_number": "", + "status": "", + "trim": "", + "type": "", + "updated_at": "", + "vin": "", + "vin_data": { + "body": "", + "check_digit": "", + "engine_displacement_ccm": "", + "engine_model": "", + "engine_power_kw": "", + "fuel_type_primary": "", + "make": "", + "manufacturer": "", + "manufacturer_address": "", + "model": "", + "model_year": "", + "number_of_doors": "", + "number_of_gears": "", + "plant_city": "", + "plant_country": "", + "plant_state": "", + "product_type": "", + "production_stopped": "", + "sequential_number": "", + "series": "", + "transmission": "", + "trim": "" + }, + "year": "" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Vehicles"], + "summary": "Update a Vehicle", + "description": "You can update the driver assigned, plate number, and status of the `Vehicle`.\n\nVehicle's can only be assigned to one driver at a time, if a vehicle is re-assigned to another driver then the last driver will no longer be assigned to the vehicle.", + "operationId": "updateAVehicle", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "make": { "type": "string", "example": "Toyota" }, + "model": { "type": "string", "example": "Camry" }, + "plate_number": { "type": "string", "example": "ABC123" }, + "status": { + "type": "string", + "example": "maintenance" + }, + "trim": { "type": "string", "example": "SE" }, + "vin": { + "type": "string", + "example": "1GCGSBEA0G1111111" + }, + "year": { "type": "number", "example": 2023 } + } + }, + "examples": { + "Update a Vehicle": { + "value": { + "make": "Toyota", + "model": "Camry", + "plate_number": "ABC123", + "status": "maintenance", + "trim": "SE", + "vin": "1GCGSBEA0G1111111", + "year": 2023 + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "driver": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "make": { + "type": "string", + "example": "" + }, + "model": { + "type": "string", + "example": "" + }, + "model_data": { + "type": "object", + "properties": { + "0_to_100_kph": { + "type": "string", + "example": "" + }, + "body": { + "type": "string", + "example": "" + }, + "co2": { + "type": "string", + "example": "" + }, + "doors": { + "type": "string", + "example": "" + }, + "drive": { + "type": "string", + "example": "" + }, + "engine_bore_mm": { + "type": "string", + "example": "" + }, + "engine_cc": { + "type": "string", + "example": "" + }, + "engine_compression": { + "type": "string", + "example": "" + }, + "engine_cyl": { + "type": "string", + "example": "" + }, + "engine_fuel": { + "type": "string", + "example": "" + }, + "engine_position": { + "type": "string", + "example": "" + }, + "engine_power_ps": { + "type": "string", + "example": "" + }, + "engine_power_rpm": { + "type": "string", + "example": "" + }, + "engine_stroke_mm": { + "type": "string", + "example": "" + }, + "engine_torque_nm": { + "type": "string", + "example": "" + }, + "engine_torque_rpm": { + "type": "string", + "example": "" + }, + "engine_valves_per_cyl": { + "type": "string", + "example": "" + }, + "fuel_cap_l": { + "type": "string", + "example": "" + }, + "length_mm": { + "type": "string", + "example": "" + }, + "lkm_city": { + "type": "string", + "example": "" + }, + "lkm_hwy": { + "type": "string", + "example": "" + }, + "lkm_mixed": { + "type": "string", + "example": "" + }, + "make_display": { + "type": "string", + "example": "" + }, + "seats": { + "type": "string", + "example": "" + }, + "sold_in_us": { + "type": "string", + "example": "" + }, + "top_speed_kph": { + "type": "string", + "example": "" + }, + "transmission_type": { + "type": "string", + "example": "" + }, + "weight_kg": { + "type": "string", + "example": "" + }, + "wheelbase_mm": { + "type": "string", + "example": "" + }, + "width_mm": { + "type": "string", + "example": "" + } + } + }, + "name": { + "type": "string", + "example": "" + }, + "photo_url": { + "type": "string", + "example": "" + }, + "plate_number": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "trim": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vin": { + "type": "string", + "example": "" + }, + "vin_data": { + "type": "object", + "properties": { + "body": { + "type": "string", + "example": "" + }, + "check_digit": { + "type": "string", + "example": "" + }, + "engine_displacement_ccm": { + "type": "string", + "example": "" + }, + "engine_model": { + "type": "string", + "example": "" + }, + "engine_power_kw": { + "type": "string", + "example": "" + }, + "fuel_type_primary": { + "type": "string", + "example": "" + }, + "make": { + "type": "string", + "example": "" + }, + "manufacturer": { + "type": "string", + "example": "" + }, + "manufacturer_address": { + "type": "string", + "example": "" + }, + "model": { + "type": "string", + "example": "" + }, + "model_year": { + "type": "string", + "example": "" + }, + "number_of_doors": { + "type": "string", + "example": "" + }, + "number_of_gears": { + "type": "string", + "example": "" + }, + "plant_city": { + "type": "string", + "example": "" + }, + "plant_country": { + "type": "string", + "example": "" + }, + "plant_state": { + "type": "string", + "example": "" + }, + "product_type": { + "type": "string", + "example": "" + }, + "production_stopped": { + "type": "string", + "example": "" + }, + "sequential_number": { + "type": "string", + "example": "" + }, + "series": { + "type": "string", + "example": "" + }, + "transmission": { + "type": "string", + "example": "" + }, + "trim": { + "type": "string", + "example": "" + } + } + }, + "year": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "driver": "", + "id": "", + "make": "", + "model": "", + "model_data": { + "0_to_100_kph": "", + "body": "", + "co2": "", + "doors": "", + "drive": "", + "engine_bore_mm": "", + "engine_cc": "", + "engine_compression": "", + "engine_cyl": "", + "engine_fuel": "", + "engine_position": "", + "engine_power_ps": "", + "engine_power_rpm": "", + "engine_stroke_mm": "", + "engine_torque_nm": "", + "engine_torque_rpm": "", + "engine_valves_per_cyl": "", + "fuel_cap_l": "", + "length_mm": "", + "lkm_city": "", + "lkm_hwy": "", + "lkm_mixed": "", + "make_display": "", + "seats": "", + "sold_in_us": "", + "top_speed_kph": "", + "transmission_type": "", + "weight_kg": "", + "wheelbase_mm": "", + "width_mm": "" + }, + "name": "", + "photo_url": "", + "plate_number": "", + "status": "", + "trim": "", + "type": "", + "updated_at": "", + "vin": "", + "vin_data": { + "body": "", + "check_digit": "", + "engine_displacement_ccm": "", + "engine_model": "", + "engine_power_kw": "", + "fuel_type_primary": "", + "make": "", + "manufacturer": "", + "manufacturer_address": "", + "model": "", + "model_year": "", + "number_of_doors": "", + "number_of_gears": "", + "plant_city": "", + "plant_country": "", + "plant_state": "", + "product_type": "", + "production_stopped": "", + "sequential_number": "", + "series": "", + "transmission": "", + "trim": "" + }, + "year": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Vehicles"], + "summary": "Delete a Vehicle", + "description": "Permanently deletes a `Vehicle`. It cannot be undone.", + "operationId": "deleteAVehicle", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deleted": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "deleted": "", + "id": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{vehicle_id}}" }, + "description": "(Required) The id of the `Vehicle`." + } + ] + }, + "/drivers": { + "get": { + "tags": ["Drivers"], + "summary": "Query Drivers", + "description": "This endpoint allows you to retrieve a driver object to view it's details.", + "operationId": "queryDrivers", + "parameters": [ + { + "name": "id", + "in": "query", + "schema": { "type": "string", "example": "{{driver_id}}" }, + "description": "The id of the driver you want to retrieve." + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "altitude": { + "type": "string", + "example": "" + }, + "city": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "currency": { + "type": "string", + "example": "" + }, + "current_job": { + "type": "string", + "example": "" + }, + "drivers_license_number": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "heading": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "online": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "signup_token_used": { + "type": "string", + "example": "" + }, + "speed": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vehicle": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "altitude": "", + "city": "", + "country": "", + "created_at": "", + "currency": "", + "current_job": "", + "drivers_license_number": "", + "email": "", + "heading": "", + "id": "", + "latitude": "", + "longitude": "", + "online": "", + "phone_country_code": "", + "phone_number": "", + "signup_token_used": "", + "speed": "", + "status": "", + "updated_at": "", + "vehicle": "" + } + } + } + } + } + } + } + }, + "post": { + "tags": ["Drivers"], + "summary": "Create a Driver", + "description": "Create a driver", + "operationId": "createADriver", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "email": { + "type": "string", + "example": "{{$randomEmail}}" + }, + "name": { "type": "string", "example": "John Doe" }, + "phone": { + "type": "string", + "example": "{{$randomPhoneNumber}}" + } + } + }, + "examples": { + "Create a Driver": { + "value": { + "email": "{{$randomEmail}}", + "name": "John Doe", + "phone": "{{$randomPhoneNumber}}" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "altitude": { + "type": "string", + "example": "" + }, + "city": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "currency": { + "type": "string", + "example": "" + }, + "current_job": { + "type": "string", + "example": "" + }, + "drivers_license_number": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "heading": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "online": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "signup_token_used": { + "type": "string", + "example": "" + }, + "speed": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vehicle": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "altitude": "", + "city": "", + "country": "", + "created_at": "", + "currency": "", + "current_job": "", + "drivers_license_number": "", + "email": "", + "heading": "", + "id": "", + "latitude": "", + "longitude": "", + "online": "", + "phone_country_code": "", + "phone_number": "", + "signup_token_used": "", + "speed": "", + "status": "", + "updated_at": "", + "vehicle": "" + } + } + } + } + } + } + } + } + }, + "/drivers/{id}": { + "get": { + "tags": ["Drivers"], + "summary": "Retrieve a Driver", + "description": "This endpoint allows you to retrieve a driver object to view it's details.", + "operationId": "retrieveADriver", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "altitude": { + "type": "string", + "example": "" + }, + "city": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "currency": { + "type": "string", + "example": "" + }, + "current_job": { + "type": "string", + "example": "" + }, + "drivers_license_number": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "heading": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "online": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "signup_token_used": { + "type": "string", + "example": "" + }, + "speed": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vehicle": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "altitude": "", + "city": "", + "country": "", + "created_at": "", + "currency": "", + "current_job": "", + "drivers_license_number": "", + "email": "", + "heading": "", + "id": "", + "latitude": "", + "longitude": "", + "online": "", + "phone_country_code": "", + "phone_number": "", + "signup_token_used": "", + "speed": "", + "status": "", + "updated_at": "", + "vehicle": "" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Drivers"], + "summary": "Update a Driver", + "description": "You can update all properties of the Driver.", + "operationId": "updateADriver", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Update a Driver": { + "value": "{\n \"name\": \"John Doe\",\n \"email\": {{$randomEmail}},\n \"phone\": {{$randomPhoneNumber}}\n}\n" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "altitude": { + "type": "string", + "example": "" + }, + "city": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "currency": { + "type": "string", + "example": "" + }, + "current_job": { + "type": "string", + "example": "" + }, + "drivers_license_number": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "heading": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "online": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "signup_token_used": { + "type": "string", + "example": "" + }, + "speed": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vehicle": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "altitude": "", + "city": "", + "country": "", + "created_at": "", + "currency": "", + "current_job": "", + "drivers_license_number": "", + "email": "", + "heading": "", + "id": "", + "latitude": "", + "longitude": "", + "online": "", + "phone_country_code": "", + "phone_number": "", + "signup_token_used": "", + "speed": "", + "status": "", + "updated_at": "", + "vehicle": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Drivers"], + "summary": "Delete a Driver", + "description": "Use this endpoint to delete a driver.", + "operationId": "deleteADriver", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deleted": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "deleted": "", + "id": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{driver_id}}" }, + "description": "(Required) The id of the `Driver`." + } + ] + }, + "/orders": { + "get": { + "tags": ["Orders"], + "summary": "Query Orders", + "description": "List all orders.", + "operationId": "queryOrders", + "parameters": [ + { + "name": "query", + "in": "query", + "schema": { "type": "string", "example": "" } + }, + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" } + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "0" } + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" } + }, + { + "name": "status", + "in": "query", + "schema": { "type": "string", "example": "active" } + } + ], + "responses": { "200": { "description": "" } } + }, + "post": { + "tags": ["Orders"], + "summary": "Create an Order", + "description": "To create a new `Order` in Fleetbase, the `Order` requires a payload which describres each `Entity` in the order as well as the geolocational waypoints. The payload can be created previously or created by sending a `Payload` object embedded within the Order request.\n\nOrders can also be subcontracted to a facilitator which can be either a `Contact` or `Vendor`. Like facilitator, the Order can also be assigned a customer which can also be either a `Contact` or `Vendor`.\n\nTo schedule an order upon creation use the `scheduled_at` parameter to send a date and time to schedule the order.\n\nTo assign a driver to the order the send the id of the driver to assign using the `driver` parameter.", + "operationId": "createAnOrder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "meta": { + "type": "object", + "properties": { + "Warehouse": { + "type": "string", + "example": "WAREHOUSE-123" + } + } + }, + "notes": { + "type": "string", + "example": "Order notes" + }, + "payload": { + "type": "object", + "properties": { + "entities": { + "type": "array", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "example": "USD" + }, + "description": { + "type": "string", + "example": "65-inch high-definition smart TV with vibrant colors and a sleek design." + }, + "destination": { + "type": "number", + "example": 0 + }, + "name": { + "type": "string", + "example": "UltraHD 4K Smart TV" + }, + "price": { + "type": "number", + "example": 1200 + } + } + }, + "example": [ + { + "currency": "USD", + "description": "65-inch high-definition smart TV with vibrant colors and a sleek design.", + "destination": 0, + "name": "UltraHD 4K Smart TV", + "price": 1200 + }, + { + "currency": "USD", + "description": "Noise-cancelling, over-ear headphones with long-lasting battery life.", + "destination": 0, + "name": "Bluetooth Wireless Headphones", + "price": 250 + }, + { + "currency": "USD", + "description": "Water-resistant fitness watch with heart rate monitor and GPS tracking.", + "destination": 1, + "name": "Smart Fitness Watch", + "price": 199.99 + } + ] + }, + "waypoints": { + "type": "array", + "items": { + "type": "string", + "example": "Singapore 018971" + }, + "example": ["Singapore 018971", "321 Orchard Rd, Singapore"] + } + } + } + } + }, + "examples": { + "Create an Order": { + "value": { + "meta": { "Warehouse": "WAREHOUSE-123" }, + "notes": "Order notes", + "payload": { + "entities": [ + { + "currency": "USD", + "description": "65-inch high-definition smart TV with vibrant colors and a sleek design.", + "destination": 0, + "name": "UltraHD 4K Smart TV", + "price": 1200 + }, + { + "currency": "USD", + "description": "Noise-cancelling, over-ear headphones with long-lasting battery life.", + "destination": 0, + "name": "Bluetooth Wireless Headphones", + "price": 250 + }, + { + "currency": "USD", + "description": "Water-resistant fitness watch with heart rate monitor and GPS tracking.", + "destination": 1, + "name": "Smart Fitness Watch", + "price": 199.99 + } + ], + "waypoints": ["Singapore 018971", "321 Orchard Rd, Singapore"] + } + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "customer": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "title": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "driver": { + "type": "object", + "properties": { + "altitude": { + "type": "string", + "example": "" + }, + "city": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "currency": { + "type": "string", + "example": "" + }, + "current_job": { + "type": "string", + "example": "" + }, + "drivers_license_number": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "heading": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "online": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "signup_token_used": { + "type": "string", + "example": "" + }, + "speed": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "vehicle": { + "type": "string", + "example": "" + } + } + }, + "facilitator": { + "type": "object", + "properties": { + "address": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "email": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "internal_id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "phone_country_code": { + "type": "string", + "example": "" + }, + "phone_number": { + "type": "string", + "example": "" + }, + "slug": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "id": { + "type": "string", + "example": "" + }, + "meta": { "type": "object", "properties": {} }, + "notes": { + "type": "string", + "example": "" + }, + "payload": { + "type": "object", + "properties": { + "": { + "type": "string", + "example": "" + }, + "cod_amount": { + "type": "string", + "example": "" + }, + "cod_currency": { + "type": "string", + "example": "" + }, + "cod_payment_method": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "customer": { + "type": "string", + "example": "" + }, + "dropoff": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "id": { + "type": "string", + "example": "" + }, + "meta": { + "type": "object", + "properties": {} + }, + "pickup": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "return": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "purchase_rate": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "customer": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "order": { + "type": "string", + "example": "" + }, + "service_quote": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "scheduled_at": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "tracking_number": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "customer": { + "type": "string", + "example": "" + }, + "driver": { + "type": "string", + "example": "" + }, + "facilitator": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "meta": { + "type": "array", + "items": {}, + "example": [] + }, + "notes": { + "type": "string", + "example": "" + }, + "payload": { + "type": "string", + "example": "" + }, + "purchase_rate": { + "type": "string", + "example": "" + }, + "scheduled_at": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "tracking_number": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "Created": { + "value": { + "created_at": "", + "customer": { + "created_at": "", + "email": "", + "id": "", + "name": "", + "phone": "", + "slug": "", + "title": "", + "type": "", + "updated_at": "" + }, + "driver": { + "altitude": "", + "city": "", + "country": "", + "created_at": "", + "currency": "", + "current_job": "", + "drivers_license_number": "", + "email": "", + "heading": "", + "id": "", + "latitude": "", + "longitude": "", + "online": "", + "phone_country_code": "", + "phone_number": "", + "signup_token_used": "", + "speed": "", + "status": "", + "updated_at": "", + "vehicle": "" + }, + "facilitator": { + "address": "", + "created_at": "", + "email": "", + "id": "", + "internal_id": "", + "name": "", + "phone_country_code": "", + "phone_number": "", + "slug": "", + "type": "", + "updated_at": "" + }, + "id": "", + "meta": {}, + "notes": "", + "payload": { + "": "", + "cod_amount": "", + "cod_currency": "", + "cod_payment_method": "", + "created_at": "", + "customer": "", + "dropoff": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + }, + "id": "", + "meta": {}, + "pickup": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + }, + "return": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + }, + "type": "", + "updated_at": "" + }, + "purchase_rate": { + "created_at": "", + "customer": "", + "id": "", + "order": "", + "service_quote": "", + "status": "", + "updated_at": "" + }, + "scheduled_at": "", + "status": "", + "tracking_number": { + "created_at": "", + "customer": "", + "driver": "", + "facilitator": "", + "id": "", + "meta": [], + "notes": "", + "payload": "", + "purchase_rate": "", + "scheduled_at": "", + "status": "", + "tracking_number": "", + "type": "", + "updated_at": "" + }, + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/orders/{id}/schedule": { + "patch": { + "tags": ["Orders"], + "summary": "Schedule an Order", + "description": "Schedule an Order", + "operationId": "scheduleAnOrder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "date": { + "type": "string", + "example": "2024-02-11" + }, + "time": { "type": "string", "example": "8am" }, + "timezone": { + "type": "string", + "example": "Asia/Singapore" + } + } + }, + "examples": { + "Schedule an Order": { + "value": { + "date": "2024-02-11", + "time": "8am", + "timezone": "Asia/Singapore" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the order to schedule." + } + ] + }, + "/orders/{id}/dispatch": { + "patch": { + "tags": ["Orders"], + "summary": "Dispatch an Order", + "description": "Dispatches order to Driver.", + "operationId": "dispatchAnOrder", + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the order to dispatch." + } + ] + }, + "/orders/{id}/start": { + "post": { + "tags": ["Orders"], + "summary": "Start an Order", + "description": "Dispatches order to Driver.", + "operationId": "startAnOrder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "skip_dispatch": { "type": "boolean", "example": false } + } + }, + "examples": { + "Start an Order": { "value": { "skip_dispatch": false } } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the order to dispatch." + } + ] + }, + "/orders/{id}/update-activity": { + "post": { + "tags": ["Orders"], + "summary": "Update Order Activity", + "description": "Dispatches order to Driver.", + "operationId": "updateOrderActivity", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "skip_dispatch": { "type": "boolean", "example": false } + } + }, + "examples": { + "Update Order Activity": { "value": { "skip_dispatch": false } } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the order to dispatch." + } + ] + }, + "/orders/{id}/next-activity": { + "get": { + "tags": ["Orders"], + "summary": "Get Order Next Activity", + "description": "Dispatches order to Driver.", + "operationId": "getOrderNextActivity", + "requestBody": { + "content": { + "application/json": { + "examples": { "Get Order Next Activity": { "value": "" } } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the order to dispatch." + } + ] + }, + "/orders/{id}/set-destination/{waypoint-id}": { + "patch": { + "tags": ["Orders"], + "summary": "Set Order Destination", + "description": "Dispatches order to Driver.", + "operationId": "setOrderDestination", + "requestBody": { + "content": { + "application/json": { + "examples": { "Set Order Destination": { "value": "" } } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the order to dispatch." + }, + { + "name": "waypoint-id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{waypoint_id}}" } + } + ] + }, + "/orders/{id}/capture-signature/{subject-id}": { + "post": { + "tags": ["Orders"], + "summary": "Capture Signature for Order", + "description": "Dispatches order to Driver.", + "operationId": "captureSignatureForOrder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": {}, + "example": [] + }, + "signature": { "type": "string", "example": "" } + } + }, + "examples": { + "Capture Signature for Order": { "value": { "data": [], "signature": "" } } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the order to dispatch." + }, + { + "name": "subject-id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "" }, + "description": "(Optional) Subject for signature, which can be a place, waypoint, or entity" + } + ] + }, + "/orders/{id}/capture-qr/{subject-id}": { + "post": { + "tags": ["Orders"], + "summary": "Capture QR Code for Order", + "description": "Dispatches order to Driver.", + "operationId": "captureQrCodeForOrder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "code": { "type": "string", "example": "" }, + "data": { + "type": "array", + "items": {}, + "example": [] + }, + "raw_data": { + "type": "array", + "items": {}, + "example": [] + } + } + }, + "examples": { + "Capture QR Code for Order": { + "value": { "code": "", "data": [], "raw_data": [] } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the order to dispatch." + }, + { + "name": "subject-id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "" }, + "description": "(Optional) Subject for signature, which can be a place, waypoint, or entity" + } + ] + }, + "/orders/order_vMZPkPB": { + "get": { + "tags": ["Orders"], + "summary": "Retrieve an Order", + "description": "Retrieve an Order.", + "operationId": "retrieveAnOrder", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "customer": { + "type": "string", + "example": "" + }, + "driver": { + "type": "string", + "example": "" + }, + "facilitator": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "meta": { + "type": "array", + "items": {}, + "example": [] + }, + "notes": { + "type": "string", + "example": "" + }, + "payload": { + "type": "string", + "example": "" + }, + "purchase_rate": { + "type": "string", + "example": "" + }, + "scheduled_at": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "tracking_number": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "customer": "", + "driver": "", + "facilitator": "", + "id": "", + "meta": [], + "notes": "", + "payload": "", + "purchase_rate": "", + "scheduled_at": "", + "status": "", + "tracking_number": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/orders/{id}": { + "put": { + "tags": ["Orders"], + "summary": "Update an Order", + "description": "Update an Order.", + "operationId": "updateAnOrder", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "notes": { + "type": "string", + "example": "New order notes" + }, + "scheduled_at": { + "type": "string", + "example": "2024-02-11 05:03:02" + } + } + }, + "examples": { + "Update an Order": { + "value": { + "notes": "New order notes", + "scheduled_at": "2024-02-11 05:03:02" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "delete": { + "tags": ["Orders"], + "summary": "Cancel an Order.", + "description": "Cancel an Order.", + "operationId": "cancelAnOrder", + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{order_id}}" }, + "description": "(Required) The id of the `Order`." + } + ] + }, + "/fleets": { + "get": { + "tags": ["Fleets"], + "summary": "Query Fleets", + "description": "Returns a list of your fleets. The fleet are returned sorted by creation date, with the most recent customers appearing first.", + "operationId": "queryFleets", + "parameters": [ + { + "name": "query", + "in": "query", + "schema": { "type": "string", "example": "{{fleet_name}}" }, + "description": "This parameter allows you to filter the results by their name." + }, + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" }, + "description": "A cursor for use in pagination. A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10." + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "0" }, + "description": "A cursor for use in pagination. A offset for the results, when the offset is supplied the results will start from the offset." + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" }, + "description": "A cursor used to sort results. Sort can be any property of the object, to sort descending sort must append the minus symbol. To sort by created date descending sort would be `-created_at` to sort in ascending order the sort would be `created_at`." + }, + { + "name": "status", + "in": "query", + "schema": { "type": "string", "example": "active" }, + "description": "Filter for filtering results by status." + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "service_area": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "task": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "name": "", + "service_area": "", + "status": "", + "task": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "post": { + "tags": ["Fleets"], + "summary": "Create a Fleet", + "description": "Create a new fleet.", + "operationId": "createAFleet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { "type": "string", "example": "Haulers" }, + "status": { "type": "string", "example": "active" } + } + }, + "examples": { + "Create a Fleet": { + "value": { "name": "Haulers", "status": "active" } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "service_area": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "task": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "name": "", + "service_area": "", + "status": "", + "task": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/fleets/{id}": { + "get": { + "tags": ["Fleets"], + "summary": "Retrieve a Fleet", + "description": "Retrieves a fleet.", + "operationId": "retrieveAFleet", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "service_area": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "task": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "name": "", + "service_area": "", + "status": "", + "task": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Fleets"], + "summary": "Update a Fleet", + "description": "Updates a fleet.", + "operationId": "updateAFleet", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { "type": "string", "example": "Haulers" }, + "status": { "type": "string", "example": "active" } + } + }, + "examples": { + "Update a Fleet": { + "value": { "name": "Haulers", "status": "active" } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "service_area": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "task": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "name": "", + "service_area": "", + "status": "", + "task": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Fleets"], + "summary": "Delete a Fleet", + "description": "Deletes a fleet.", + "operationId": "deleteAFleet", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deleted": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "object": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "deleted": "", + "id": "", + "object": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{fleet_id}}" }, + "description": "(Required) The id of the `Fleet`." + } + ] + }, + "/payloads": { + "post": { + "tags": ["Payloads"], + "summary": "Create a Payload", + "description": "Create a Payload.", + "operationId": "createAPayload", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "food_delivery" + }, + "waypoints": { + "type": "array", + "items": { + "type": "string", + "example": "10 Bayfront Avenue, Singapore 018956" + }, + "example": [ + "10 Bayfront Avenue, Singapore 018956", + "18 Marina Gardens Drive, Singapore 018953", + "80 Mandai Lake Rd, Singapore 729826", + "1 Beach Road, Singapore 189673", + "Sentosa, Singapore" + ] + } + } + }, + "examples": { + "Create a Payload": { + "value": { + "type": "food_delivery", + "waypoints": [ + "10 Bayfront Avenue, Singapore 018956", + "18 Marina Gardens Drive, Singapore 018953", + "80 Mandai Lake Rd, Singapore 729826", + "1 Beach Road, Singapore 189673", + "Sentosa, Singapore" + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + }, + "201": { + "description": "Create a Payload", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { "type": "string", "example": "true" } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string", + "example": "Content-Type, Authorization, Referer, User-Agent, Signature, Customer-Token, Access-Control-Request-Headers, Access-Control-Request-Method, Origin" + } + }, + "Access-Control-Allow-Methods": { + "schema": { "type": "string", "example": "GET, OPTIONS" } + }, + "Access-Control-Max-Age": { + "schema": { "type": "string", "example": "600" } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { "type": "string", "example": "keep-alive" } + }, + "Date": { + "schema": { + "type": "string", + "example": "Wed, 27 Dec 2023 09:40:21 GMT" + } + }, + "Invalid": { "schema": { "type": "string", "example": "1" } }, + "Server": { + "schema": { "type": "string", "example": "nginx" } + }, + "Set-Cookie": { + "schema": { + "type": "string", + "example": "fleetbase_session=BZTQN5le6WBpsdEIXN5x9dJuLqtxL3hHlFoV8WTH; expires=Wed, 24-Jan-2024 09:40:21 GMT; Max-Age=2419200; path=/; domain=.fleetbase.io; httponly; samesite=lax" + } + }, + "Transfer-Encoding": { + "schema": { "type": "string", "example": "chunked" } + }, + "X-Frame-Options": { + "schema": { "type": "string", "example": "DENY" } + }, + "X-RateLimit-Limit": { "schema": { "type": "string", "example": "60" } }, + "X-RateLimit-Remaining": { "schema": { "type": "string", "example": "59" } } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "cod_amount": { "nullable": true, "example": null }, + "cod_currency": { "nullable": true, "example": null }, + "cod_payment_method": { "nullable": true, "example": null }, + "created_at": { + "type": "string", + "example": "2023-12-27T09:40:21.000000Z" + }, + "current_waypoint": { "nullable": true, "example": null }, + "dropoff": { "nullable": true, "example": null }, + "entities": { + "type": "array", + "items": {}, + "example": [] + }, + "id": { + "type": "string", + "example": "payload_oz5R9Z6" + }, + "meta": { + "type": "array", + "items": {}, + "example": [] + }, + "pickup": { "nullable": true, "example": null }, + "return": { "nullable": true, "example": null }, + "updated_at": { + "type": "string", + "example": "2023-12-27T09:40:21.000000Z" + }, + "waypoints": { + "type": "array", + "items": {}, + "example": [] + } + } + }, + "examples": { + "Create a Payload": { + "value": { + "cod_amount": null, + "cod_currency": null, + "cod_payment_method": null, + "created_at": "2023-12-27T09:40:21.000000Z", + "current_waypoint": null, + "dropoff": null, + "entities": [], + "id": "payload_oz5R9Z6", + "meta": [], + "pickup": null, + "return": null, + "updated_at": "2023-12-27T09:40:21.000000Z", + "waypoints": [] + } + } + } + } + } + } + } + } + }, + "/payloads/{id}": { + "get": { + "tags": ["Payloads"], + "summary": "Retrieve a Payload", + "description": "Retrieve a Payload.", + "operationId": "retrieveAPayload", + "responses": { "200": { "description": "" } } + }, + "put": { + "tags": ["Payloads"], + "summary": "Update a Payload", + "description": "Update a Payload.", + "operationId": "updateAPayload", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "entities": { + "type": "array", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "example": "USD" + }, + "description": { + "type": "string", + "example": "65-inch high-definition smart TV with vibrant colors and a sleek design." + }, + "name": { + "type": "string", + "example": "UltraHD 4K Smart TV" + }, + "price": { + "type": "number", + "example": 1200 + } + } + }, + "example": [ + { + "currency": "USD", + "description": "65-inch high-definition smart TV with vibrant colors and a sleek design.", + "name": "UltraHD 4K Smart TV", + "price": 1200 + }, + { + "currency": "USD", + "description": "Noise-cancelling, over-ear headphones with long-lasting battery life.", + "name": "Bluetooth Wireless Headphones", + "price": 250 + }, + { + "currency": "USD", + "description": "Water-resistant fitness watch with heart rate monitor and GPS tracking.", + "name": "Smart Fitness Watch", + "price": 199.99 + } + ] + } + } + }, + "examples": { + "Update a Payload": { + "value": { + "entities": [ + { + "currency": "USD", + "description": "65-inch high-definition smart TV with vibrant colors and a sleek design.", + "name": "UltraHD 4K Smart TV", + "price": 1200 + }, + { + "currency": "USD", + "description": "Noise-cancelling, over-ear headphones with long-lasting battery life.", + "name": "Bluetooth Wireless Headphones", + "price": 250 + }, + { + "currency": "USD", + "description": "Water-resistant fitness watch with heart rate monitor and GPS tracking.", + "name": "Smart Fitness Watch", + "price": 199.99 + } + ] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "delete": { + "tags": ["Payloads"], + "summary": "Delete a Payload", + "description": "Delete a Payload.", + "operationId": "deleteAPayload", + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{payload_id}}" }, + "description": "(Required) The id of the `Payload`." + } + ] + }, + "/entities": { + "get": { + "tags": ["Entities"], + "summary": "Query Entities", + "description": "List all entities.", + "operationId": "queryEntities", + "parameters": [ + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" } + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" } + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "0" } + }, + { + "name": "query", + "in": "query", + "schema": { "type": "string", "example": "test" }, + "description": "This parameter allows you to filter the results by their name." + }, + { + "name": "type", + "in": "query", + "schema": { "type": "string", "example": "parcel" }, + "description": "Filter entities by their type." + }, + { + "name": "payload", + "in": "query", + "schema": { "type": "string", "example": "{{payload_id}}" }, + "description": "Filter entites by payload they belong to." + } + ], + "responses": { "200": { "description": "" } } + }, + "post": { + "tags": ["Entities"], + "summary": "Create an Entity", + "description": "Create an Entity.", + "operationId": "createAnEntity", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "currency": { "type": "string", "example": "USD" }, + "customer": { + "type": "string", + "example": "ACustomer" + }, + "declared_value": { "type": "number", "example": 1500 }, + "description": { + "type": "string", + "example": "Sample description" + }, + "dimensions_unit": { "type": "string", "example": "mm" }, + "height": { "type": "number", "example": 8 }, + "internal_id": { + "type": "string", + "example": "ENTITY001" + }, + "length": { "type": "number", "example": 10 }, + "meta": { + "type": "object", + "properties": { + "warehouse_bin": { + "type": "string", + "example": "1" + }, + "warehouse_rack": { + "type": "string", + "example": "3" + }, + "warehouse_section": { + "type": "string", + "example": "4" + } + } + }, + "name": { + "type": "string", + "example": "SampleEntity" + }, + "payload": { + "type": "string", + "example": "{{payload_id}}" + }, + "price": { "type": "number", "example": 1200 }, + "sale_price": { "type": "number", "example": 900 }, + "sku": { "type": "string", "example": "SKU123" }, + "type": { "type": "string", "example": "parcel" }, + "weight": { "type": "number", "example": 2.5 }, + "weight_unit": { "type": "string", "example": "kg" }, + "width": { "type": "number", "example": 5 } + } + }, + "examples": { + "Create an Entity": { + "value": { + "currency": "USD", + "customer": "ACustomer", + "declared_value": 1500, + "description": "Sample description", + "dimensions_unit": "mm", + "height": 8, + "internal_id": "ENTITY001", + "length": 10, + "meta": { + "warehouse_bin": "1", + "warehouse_rack": "3", + "warehouse_section": "4" + }, + "name": "SampleEntity", + "payload": "{{payload_id}}", + "price": 1200, + "sale_price": 900, + "sku": "SKU123", + "type": "parcel", + "weight": 2.5, + "weight_unit": "kg", + "width": 5 + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { "type": "object", "properties": {} }, + "examples": { "OK": { "value": {} } } + } + } + } + } + } + }, + "/entities/{id}": { + "get": { + "tags": ["Entities"], + "summary": "Retrieve an Entity", + "description": "Retrieve an Entity.", + "operationId": "retrieveAnEntity", + "responses": { + "200": { + "description": "OK / Retrieve an Entity", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { "type": "string", "example": "true" } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string", + "example": "Content-Type, Authorization, Referer, User-Agent, Signature, Customer-Token, Access-Control-Request-Headers, Access-Control-Request-Method, Origin" + } + }, + "Access-Control-Allow-Methods": { + "schema": { "type": "string", "example": "GET, OPTIONS" } + }, + "Access-Control-Max-Age": { + "schema": { "type": "string", "example": "600" } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { "type": "string", "example": "keep-alive" } + }, + "Date": { + "schema": { + "type": "string", + "example": "Wed, 03 Jan 2024 05:56:16 GMT" + } + }, + "Invalid": { "schema": { "type": "string", "example": "1" } }, + "Server": { + "schema": { "type": "string", "example": "nginx" } + }, + "Set-Cookie": { + "schema": { + "type": "string", + "example": "fleetbase_session=BZTQN5le6WBpsdEIXN5x9dJuLqtxL3hHlFoV8WTH; expires=Wed, 31-Jan-2024 05:56:16 GMT; Max-Age=2419200; path=/; domain=.fleetbase.io; httponly; samesite=lax" + } + }, + "Transfer-Encoding": { + "schema": { "type": "string", "example": "chunked" } + }, + "X-Frame-Options": { + "schema": { "type": "string", "example": "DENY" } + }, + "X-RateLimit-Limit": { "schema": { "type": "string", "example": "60" } }, + "X-RateLimit-Remaining": { "schema": { "type": "string", "example": "59" } } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "currency": { + "type": "string", + "example": "" + }, + "customer": { + "type": "string", + "nullable": true, + "example": "" + }, + "declared_value": { + "example": "", + "anyOf": [ + { + "type": "string", + "example": "" + }, + { + "type": "number", + "example": 100 + } + ] + }, + "description": { + "type": "string", + "example": "" + }, + "destination": { "nullable": true, "example": null }, + "dimensions_unit": { + "type": "string", + "example": "" + }, + "height": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "internal_id": { + "type": "string", + "example": "" + }, + "length": { + "type": "string", + "example": "" + }, + "meta": { + "type": "array", + "items": {}, + "example": [] + }, + "name": { + "type": "string", + "example": "" + }, + "payload": { + "type": "string", + "example": "" + }, + "photo_url": { + "type": "string", + "example": "https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/parcels/medium.png" + }, + "price": { + "type": "string", + "example": "" + }, + "sale_price": { + "type": "string", + "nullable": true, + "example": "" + }, + "sku": { + "type": "string", + "example": "" + }, + "tracking_number": { + "example": "", + "anyOf": [ + { + "type": "string", + "example": "" + }, + { + "type": "object", + "properties": { + "barcode": { + "type": "string", + "example": "iVBORw0KGgoAAAANSUhEUgAAAXQAAACoAQMAAADKJofwAAAABlBMVEX///8AAABVwtN+AAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAidJREFUWIXtmLGttDAQhBcROHQH0IgltwURSNcHtMJVQAvOnFpyApLl/Wf9Ti951l/AYQcnw31AMpqdMVFb/109c579uqT45qANXzZ3juZEi83ajKz49js75oR/h8Y3vs4z3+BZ1g2Yg/BpZF9uVfhtUuA3MOC1DZMNHfbgTVga/zh+Zy98EVI8LYQHIRX9mIp+Zv9iR9oNk+W3jwfxYfChnlU8iZka/yxe9APZQHXgOcKmDlP0Ax7+kyr6XD587uBXaiMTOjeQ8K/GP4/nop8f28H84uPXr6q84UOtmuNh+hvzEZsPn2del7/6bPx386KfLPkHtuNFe4cV2yn6yXhbRZ8pa5XxqrffNK+EcOVy5/m0mRr/OH4X/SiJOm/xrlXCtheebW1+mRHJXFN/uh9/Az8sKpDKk42NfxwPq+HC4xL6kTdkaWFQIFf5MCNfCb+C144mxHI4m9rkqUofbPxX8xzvNGjTS39nxlMITqWUSSOr9ff4Fh7KLH1N+E0TLAvfGhv/PB4Yyn4s+sHvftlNYpKXE4BKf3fjjRmX4pmoS2Gh8cK3CBNwE7v72wcb/9X8kgovKTp0MCjiC/MOyVlhnIVaPh8vzESUNS/8RAjqg2xkPjb+kbxFtJbhdQsmMXvGXvpa7bzI9ChoJ423CO/DTyTdrUuNfx6feok9qXR22A5L7ZKzII86VulfCFeSr3AT/c4NsC+2r8Pul4oHInfjG1/nH7b+Acno2xQu9DztAAAAAElFTkSuQmCC" + }, + "created_at": { + "type": "string", + "example": "2024-01-03T05:56:04.000000Z" + }, + "id": { + "type": "string", + "example": "track_ddL4nJn" + }, + "qr_code": { + "type": "string", + "example": "iVBORw0KGgoAAAANSUhEUgAAAFcAAABXAQMAAABLBksvAAAABlBMVEX///8AAABVwtN+AAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAWxJREFUOI2F0zGOhDAMBVCPKOjgBuEikbgWNARp7gFXgQssV6BLi5QGJJS/dmBGm4HdpXqF5TjOh4Bd5btbS3j6wwVweCGdoGwrTVlkBw1gMRpfwROW/M4/aooN7S/ucToZylsXI3cS8wzqYdnHPG/zzHwucM7vJu2mG0tNMH/sfqDjezs04Zo9GcRu1TfGYTy/SJn0KS7bLDJP0m+7nMXzDzznTPRp7uBr26/iYrJLlbKXLLIs06Tcjc23aHM6+kfmRzEzV3YZJSAys7tY9iCrQDh3l/WO9mK5eg8b9pz6HJ0hRZGxSU1ntGrYe7FqdWe8rOp5qbQiTbF9vXOZekAy9tgxzlf7GtisN2JVpbwTb2xHkX1VOrDhG8mDm0jlNwZm9vHu3rDpw5INib0+M8ORu3fIavgvlpxNSxX5yHzPsW+CV11M/1hVWl78Ylnjy26cxdmneT+APe+4ck54OZHDvdi2a45/ga9s28jfC11spCPuMfEAAAAASUVORK5CYII=" + }, + "region": { + "type": "string", + "example": "SG" + }, + "status": { + "type": "string", + "example": "Entity Created" + }, + "status_code": { + "type": "string", + "example": "CREATED" + }, + "subject": { + "type": "string", + "example": "entity_va890n0" + }, + "tracking_number": { + "type": "string", + "example": "FLE7017498048SG" + }, + "type": { + "type": "string", + "example": "entity" + }, + "updated_at": { + "type": "string", + "example": "2024-01-03T05:56:04.000000Z" + } + } + } + ] + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + }, + "weight": { + "type": "string", + "example": "" + }, + "weight_unit": { + "type": "string", + "example": "" + }, + "width": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "currency": "", + "customer": "", + "declared_value": "", + "description": "", + "dimensions_unit": "", + "height": "", + "id": "", + "internal_id": "", + "length": "", + "meta": [], + "name": "", + "payload": "", + "price": "", + "sale_price": "", + "sku": "", + "tracking_number": "", + "type": "", + "updated_at": "", + "weight": "", + "weight_unit": "", + "width": "" + } + }, + "Retrieve an Entity": { + "value": { + "created_at": "2024-01-03T05:56:04.000000Z", + "currency": "USD", + "customer": null, + "declared_value": 100, + "description": "Sample description", + "destination": null, + "dimensions_unit": "mm", + "height": "8", + "id": "entity_va890n0", + "internal_id": "ENTITY001", + "length": "10", + "meta": [], + "name": "SampleEntity", + "photo_url": "https://s3.ap-southeast-1.amazonaws.com/flb-assets/static/parcels/medium.png", + "price": "120", + "sale_price": null, + "sku": "SKU123", + "tracking_number": { + "barcode": "iVBORw0KGgoAAAANSUhEUgAAAXQAAACoAQMAAADKJofwAAAABlBMVEX///8AAABVwtN+AAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAidJREFUWIXtmLGttDAQhBcROHQH0IgltwURSNcHtMJVQAvOnFpyApLl/Wf9Ti951l/AYQcnw31AMpqdMVFb/109c579uqT45qANXzZ3juZEi83ajKz49js75oR/h8Y3vs4z3+BZ1g2Yg/BpZF9uVfhtUuA3MOC1DZMNHfbgTVga/zh+Zy98EVI8LYQHIRX9mIp+Zv9iR9oNk+W3jwfxYfChnlU8iZka/yxe9APZQHXgOcKmDlP0Ax7+kyr6XD587uBXaiMTOjeQ8K/GP4/nop8f28H84uPXr6q84UOtmuNh+hvzEZsPn2del7/6bPx386KfLPkHtuNFe4cV2yn6yXhbRZ8pa5XxqrffNK+EcOVy5/m0mRr/OH4X/SiJOm/xrlXCtheebW1+mRHJXFN/uh9/Az8sKpDKk42NfxwPq+HC4xL6kTdkaWFQIFf5MCNfCb+C144mxHI4m9rkqUofbPxX8xzvNGjTS39nxlMITqWUSSOr9ff4Fh7KLH1N+E0TLAvfGhv/PB4Yyn4s+sHvftlNYpKXE4BKf3fjjRmX4pmoS2Gh8cK3CBNwE7v72wcb/9X8kgovKTp0MCjiC/MOyVlhnIVaPh8vzESUNS/8RAjqg2xkPjb+kbxFtJbhdQsmMXvGXvpa7bzI9ChoJ423CO/DTyTdrUuNfx6feok9qXR22A5L7ZKzII86VulfCFeSr3AT/c4NsC+2r8Pul4oHInfjG1/nH7b+Acno2xQu9DztAAAAAElFTkSuQmCC", + "created_at": "2024-01-03T05:56:04.000000Z", + "id": "track_ddL4nJn", + "qr_code": "iVBORw0KGgoAAAANSUhEUgAAAFcAAABXAQMAAABLBksvAAAABlBMVEX///8AAABVwtN+AAAAAXRSTlMAQObYZgAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAWxJREFUOI2F0zGOhDAMBVCPKOjgBuEikbgWNARp7gFXgQssV6BLi5QGJJS/dmBGm4HdpXqF5TjOh4Bd5btbS3j6wwVweCGdoGwrTVlkBw1gMRpfwROW/M4/aooN7S/ucToZylsXI3cS8wzqYdnHPG/zzHwucM7vJu2mG0tNMH/sfqDjezs04Zo9GcRu1TfGYTy/SJn0KS7bLDJP0m+7nMXzDzznTPRp7uBr26/iYrJLlbKXLLIs06Tcjc23aHM6+kfmRzEzV3YZJSAys7tY9iCrQDh3l/WO9mK5eg8b9pz6HJ0hRZGxSU1ntGrYe7FqdWe8rOp5qbQiTbF9vXOZekAy9tgxzlf7GtisN2JVpbwTb2xHkX1VOrDhG8mDm0jlNwZm9vHu3rDpw5INib0+M8ORu3fIavgvlpxNSxX5yHzPsW+CV11M/1hVWl78Ylnjy26cxdmneT+APe+4ck54OZHDvdi2a45/ga9s28jfC11spCPuMfEAAAAASUVORK5CYII=", + "region": "SG", + "status": "Entity Created", + "status_code": "CREATED", + "subject": "entity_va890n0", + "tracking_number": "FLE7017498048SG", + "type": "entity", + "updated_at": "2024-01-03T05:56:04.000000Z" + }, + "type": "parcel", + "updated_at": "2024-01-03T05:56:04.000000Z", + "weight": "2.5", + "weight_unit": "kg", + "width": "5" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Entities"], + "summary": "Update a Entity", + "description": "Update an Entity.", + "operationId": "updateAEntity", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "currency": { "type": "string", "example": "SGD" }, + "description": { + "type": "string", + "example": "New entity description" + }, + "destination": { "type": "string", "example": "" }, + "internal_id": { + "type": "string", + "example": "ENTITY001-1" + }, + "sku": { + "type": "string", + "example": "SKUABC123" + } + } + }, + "examples": { + "Update a Entity": { + "value": { + "currency": "SGD", + "description": "New entity description", + "destination": "", + "internal_id": "ENTITY001-1", + "sku": "SKUABC123" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { "type": "object", "properties": {} }, + "examples": { "OK": { "value": {} } } + } + } + } + } + }, + "delete": { + "tags": ["Entities"], + "summary": "Delete a Entity", + "description": "Delete an Entity.", + "operationId": "deleteAEntity", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "deleted": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "deleted": "", + "id": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{entity_id}}" }, + "description": "(Required) The id of the `Entity`." + } + ] + }, + "/service-rates": { + "get": { + "tags": ["Service Rates"], + "summary": "Query Service Rates", + "description": "List all service rates.", + "operationId": "queryServiceRates", + "parameters": [ + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" } + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" } + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "0" } + }, + { + "name": "query", + "in": "query", + "schema": { "type": "string", "example": "test" } + }, + { + "name": "service_type", + "in": "query", + "schema": { "type": "string", "example": "parcel" } + }, + { + "name": "currency", + "in": "query", + "schema": { "type": "string", "example": "USD" } + } + ], + "requestBody": { + "content": { + "application/json": { + "examples": { "Query Service Rates": { "value": "" } } + } + } + }, + "responses": { "200": { "description": "" } } + }, + "post": { + "tags": ["Service Rates"], + "summary": "Create a Service Rate", + "description": "Create a Service Rate.", + "operationId": "createAServiceRate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "base_fee": { "type": "number", "example": 10 }, + "cod_calculation_method": { + "type": "string", + "example": "percentage" + }, + "cod_flat_fee": { "type": "number", "example": 1 }, + "cod_percent": { "type": "number", "example": 0 }, + "currency": { "type": "string", "example": "USD" }, + "duration_terms": { "type": "string", "example": "Standard" }, + "estimated_days": { "type": "number", "example": 3 }, + "has_cod_fee": { "type": "boolean", "example": true }, + "has_peak_hours_fee": { "type": "boolean", "example": true }, + "peak_hours_calculation_method": { + "type": "string", + "example": "percentage" + }, + "peak_hours_end": { "type": "string", "example": "18:45" }, + "peak_hours_flat_fee": { "type": "number", "example": 3 }, + "peak_hours_percent": { "type": "number", "example": 0 }, + "peak_hours_start": { "type": "string", "example": "17:00" }, + "per_meter_flat_rate_fee": { "type": "number", "example": 25 }, + "per_meter_unit": { "type": "string", "example": "km" }, + "rate_calculation_method": { + "type": "string", + "example": "per_meter" + }, + "service_name": { + "type": "string", + "example": "Food Delivery" + }, + "service_type": { + "type": "string", + "example": "food_delivery" + } + } + }, + "examples": { + "Create a Service Rate": { + "value": { + "base_fee": 10, + "cod_calculation_method": "percentage", + "cod_flat_fee": 1, + "cod_percent": 0, + "currency": "USD", + "duration_terms": "Standard", + "estimated_days": 3, + "has_cod_fee": true, + "has_peak_hours_fee": true, + "peak_hours_calculation_method": "percentage", + "peak_hours_end": "18:45", + "peak_hours_flat_fee": 3, + "peak_hours_percent": 0, + "peak_hours_start": "17:00", + "per_meter_flat_rate_fee": 25, + "per_meter_unit": "km", + "rate_calculation_method": "per_meter", + "service_name": "Food Delivery", + "service_type": "food_delivery" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + } + }, + "/service-rates/{id}": { + "get": { + "tags": ["Service Rates"], + "summary": "Retrieve a Service Rate", + "description": "Retrieve a Service Rate.", + "operationId": "retrieveAServiceRate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "{{service_54k3175}}" + } + } + }, + "examples": { + "Retrieve a Service Rate": { "value": { "id": "{{service_54k3175}}" } } + } + } + } + }, + "responses": { "200": { "description": "" } } + }, + "put": { + "tags": ["Service Rates"], + "summary": "Update a Service Rate", + "description": "Update a Service Rate.", + "operationId": "updateAServiceRate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "base_fee": { "type": "number", "example": 12.66 }, + "currency": { "type": "string", "example": "SGD" }, + "estimated_days": { "type": "number", "example": 6 } + } + }, + "examples": { + "Update a Service Rate": { + "value": { + "base_fee": 12.66, + "currency": "SGD", + "estimated_days": 6 + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "delete": { + "tags": ["Service Rates"], + "summary": "Delete a Service Rate", + "description": "Delete a Service Rate.", + "operationId": "deleteAServiceRate", + "requestBody": { + "content": { + "application/json": { + "examples": { "Delete a Service Rate": { "value": "" } } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { "examples": { "OK": { "value": "" } } } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{service_rate_id}}" } + } + ] + }, + "/service-quotes": { + "get": { + "tags": ["Service Quotes"], + "summary": "Query Service Quotes", + "description": "This endpoint is used to get the ServiceRate quotes based on pickup point location and drop off point location, or payload.\n\nFor some quotes such as parcel based, the payload must be included for calculation of the payload cost.", + "operationId": "queryServiceQuotes", + "parameters": [ + { + "name": "payload", + "in": "query", + "schema": { "type": "string", "example": "{{payload_id}}" }, + "description": "The id of a Payload object, the payload type should match the service_type of the rates being retrieved. When the payload is supplied the other parameters are not required." + }, + { + "name": "service_type", + "in": "query", + "schema": { "type": "string", "example": "food_delivery" }, + "description": "The service_type to calculate the rates for. This required field is defined in all ServiceRate objects. Required when payload is not supplied." + }, + { + "name": "pickup", + "in": "query", + "schema": { + "type": "string", + "example": "10 Bayfront Avenue, Singapore 018956" + } + }, + { + "name": "dropoff", + "in": "query", + "schema": { + "type": "string", + "example": "18 Marina Gardens Drive, Singapore 018953" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "examples": { "Query Service Quotes": { "value": "" } } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "currency": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "request_id": { + "type": "string", + "example": "" + }, + "service_rate": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "example": [ + { + "amount": "", + "created_at": "", + "currency": "", + "id": "", + "request_id": "", + "service_rate": "", + "updated_at": "" + } + ] + }, + "examples": { + "OK": { + "value": [ + { + "amount": "", + "created_at": "", + "currency": "", + "id": "", + "request_id": "", + "service_rate": "", + "updated_at": "" + } + ] + } + } + } + } + } + } + } + }, + "/purchase-rates": { + "get": { + "tags": ["Purchase Rates"], + "summary": "Query Purchase Rates", + "description": "This endpoint allows you to query purchase-rates you have created, it also provides paginated results on all the purchase-rates in your Fleetbase.", + "operationId": "queryPurchaseRates", + "parameters": [ + { + "name": "customer", + "in": "query", + "schema": { "type": "string", "example": "" }, + "description": "The id of the customer the rate was purchased for." + }, + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" }, + "description": "A cursor for use in pagination. A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10." + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "0" }, + "description": "A cursor for use in pagination. A offset for the results, when the offset is supplied the results will start from the offset." + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" }, + "description": "You can order the results by any property of the Purchase Rate object." + } + ], + "responses": { "200": { "description": "" } } + }, + "post": { + "tags": ["Purchase Rates"], + "summary": "Create a Purchase Rate", + "description": "Only ServiceQuote objects generated using a Payload object may be used to create PurchaseRate objects.", + "operationId": "createAPurchaseRate", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "service_quote": { + "type": "string", + "example": "{{service_quote_id}}" + } + } + }, + "examples": { + "Create a Purchase Rate": { + "value": { "service_quote": "{{service_quote_id}}" } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "customer": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "order": { + "type": "string", + "example": "" + }, + "service_quote": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "customer": "", + "id": "", + "order": "", + "service_quote": "", + "status": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/purchase-rates/{id}": { + "get": { + "tags": ["Purchase Rates"], + "summary": "Retrieve a Purchase Rate", + "description": "This endpoint allows you to retrieve a purchase-rate object to view it's details.", + "operationId": "retrieveAPurchaseRate", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "customer": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "order": { + "type": "string", + "example": "" + }, + "service_quote": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "customer": "", + "id": "", + "order": "", + "service_quote": "", + "status": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{purchase_rate_id}}" }, + "description": "(Required) The id of the `PurchaseRate`." + } + ] + }, + "/tracking-numbers": { + "get": { + "tags": ["Tracking Numbers"], + "summary": "Query Tracking Numbers", + "description": "This endpoint allows you to query tracking-numbers you have created, it also provides paginated results on all the tracking-numbers in your Fleetbase.", + "operationId": "queryTrackingNumbers", + "parameters": [ + { + "name": "query", + "in": "query", + "schema": { "type": "string", "example": "SG" }, + "description": "This parameter allows you to filter the results by their name." + }, + { + "name": "status", + "in": "query", + "schema": { "type": "string", "example": "created" }, + "description": "Filter the tracking-numbers by their status." + }, + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" }, + "description": "A cursor for use in pagination. A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 10." + }, + { + "name": "offset", + "in": "query", + "schema": { "type": "string", "example": "0" }, + "description": "A cursor for use in pagination. A offset for the results, when the offset is supplied the results will start from the offset." + }, + { + "name": "sort", + "in": "query", + "schema": { "type": "string", "example": "created_at" }, + "description": "You can order the results by any property of the Tracking Number object." + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "post": { + "tags": ["Tracking Numbers"], + "summary": "Create a Tracking Number", + "description": "This endpoint allows you to retrieve a tracking-number object to view it's details.\n", + "operationId": "createATrackingNumber", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "owner": { + "type": "string", + "example": "{{order_id}}" + }, + "region": { "type": "string", "example": "SG" } + } + }, + "examples": { + "Create a Tracking Number": { + "value": { "owner": "{{order_id}}", "region": "SG" } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/tracking-numbers/{id}": { + "get": { + "tags": ["Tracking Numbers"], + "summary": "Retrieve a Tracking Number", + "description": "This endpoint allows you to retrieve a tracking-number object to view it's details.\n", + "operationId": "retrieveATrackingNumber", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Tracking Numbers"], + "summary": "Delete a Tracking Number", + "description": "This endpoint allows you to retrieve a tracking-number object to view it's details.\n", + "operationId": "deleteATrackingNumber", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Delete a Tracking Number": { + "value": "{\n \"name\": \"1\",\n \"region\": \"US\", \n \"owner\": {{contact_id}}\n}" + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "created_at": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "latitude": { + "type": "string", + "example": "" + }, + "longitude": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "type": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "created_at": "", + "id": "", + "latitude": "", + "longitude": "", + "name": "", + "status": "", + "type": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{tracking_number_id}}" } + } + ] + }, + "/tracking-statuses": { + "get": { + "tags": ["Tracking Statuses"], + "summary": "Query Tracking Statuses", + "description": "List all Tracking Statuses", + "operationId": "queryTrackingStatuses", + "parameters": [ + { + "name": "limit", + "in": "query", + "schema": { "type": "string", "example": "25" } + }, + { + "name": "tracking_number", + "in": "query", + "schema": { "type": "string", "example": "{{tracking_number_id}}" } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "header-0": { + "schema": { "type": "string", "example": "" } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "city": { + "type": "string", + "example": "" + }, + "code": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "details": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "location": { + "type": "string", + "example": "" + }, + "postal_code": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "tracking_number": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "city": "", + "code": "", + "country": "", + "details": "", + "id": "", + "location": "", + "postal_code": "", + "status": "", + "tracking_number": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "post": { + "tags": ["Tracking Statuses"], + "summary": "Create a Tracking Status", + "description": "Create a new Tracking Status.", + "operationId": "createATrackingStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "city": { + "type": "string", + "example": "Singapore" + }, + "code": { + "type": "string", + "example": "delivery-en-route" + }, + "details": { + "type": "string", + "example": "Our driver has picked up your order and is on the way to your address!" + }, + "location": { + "type": "array", + "items": { "type": "number", "example": 1.3521 }, + "example": [1.3521, 103.8198] + }, + "status": { + "type": "string", + "example": "Delivery is en-route" + }, + "tracking_number": { + "type": "string", + "example": "{{tracking_number_id}}" + } + } + }, + "examples": { + "Create a Tracking Status": { + "value": { + "city": "Singapore", + "code": "delivery-en-route", + "details": "Our driver has picked up your order and is on the way to your address!", + "location": [1.3521, 103.8198], + "status": "Delivery is en-route", + "tracking_number": "{{tracking_number_id}}" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "city": { + "type": "string", + "example": "" + }, + "code": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "details": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "location": { + "type": "string", + "example": "" + }, + "postal_code": { + "type": "string", + "example": "" + }, + "province": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "tracking_number": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "city": "", + "code": "", + "country": "", + "created_at": "", + "details": "", + "id": "", + "location": "", + "postal_code": "", + "province": "", + "status": "", + "tracking_number": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/tracking-statuses/{id}": { + "get": { + "tags": ["Tracking Statuses"], + "summary": "Retrieve a Tracking Status", + "description": "Retrieve a Tracking Status.", + "operationId": "retrieveATrackingStatus", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "city": { + "type": "string", + "example": "" + }, + "code": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "details": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "postal_code": { + "type": "string", + "example": "" + }, + "province": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "tracking_number": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "city": "", + "code": "", + "country": "", + "created_at": "", + "details": "", + "id": "", + "postal_code": "", + "province": "", + "status": "", + "tracking_number": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "put": { + "tags": ["Tracking Statuses"], + "summary": "Update a Tracking Status", + "description": "Create a new Tracking Status.", + "operationId": "updateATrackingStatus", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "country": { "type": "string", "example": "SG" } + } + }, + "examples": { + "Update a Tracking Status": { "value": { "country": "SG" } } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "city": { + "type": "string", + "example": "" + }, + "code": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "details": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "location": { + "type": "string", + "example": "" + }, + "postal_code": { + "type": "string", + "example": "" + }, + "province": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "tracking_number": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "city": "", + "code": "", + "country": "", + "created_at": "", + "details": "", + "id": "", + "location": "", + "postal_code": "", + "province": "", + "status": "", + "tracking_number": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "delete": { + "tags": ["Tracking Statuses"], + "summary": "Delete a Tracking Status", + "description": "Delete a Tracking Status.", + "operationId": "deleteATrackingStatus", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "city": { + "type": "string", + "example": "" + }, + "code": { + "type": "string", + "example": "" + }, + "country": { + "type": "string", + "example": "" + }, + "created_at": { + "type": "string", + "example": "" + }, + "details": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "location": { + "type": "string", + "example": "" + }, + "postal_code": { + "type": "string", + "example": "" + }, + "province": { + "type": "string", + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "tracking_number": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "OK": { + "value": { + "city": "", + "code": "", + "country": "", + "created_at": "", + "details": "", + "id": "", + "location": "", + "postal_code": "", + "province": "", + "status": "", + "tracking_number": "", + "updated_at": "" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { "type": "string", "example": "{{tracking_status_id}}" }, + "description": "(Required) The Tracking Status id." + } + ] + } + }, + "components": { + "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer" } } + }, + "security": [{ "bearerAuth": [] }], + "tags": [ + { + "name": "Places", + "description": "Place represents a location, places are typically addresses, but can also be objects or landmarks as long as the `Place` has coordinates." + }, + { "name": "Service Areas" }, + { + "name": "Zones", + "description": "Zone represents a boundry within a Service Area to limit your fleet operataations to a specific area.\n\nThe Zone boundy can also be visually styled and represented to stand out in your service area views." + }, + { "name": "Contacts" }, + { "name": "Vendors" }, + { "name": "Vehicles" }, + { "name": "Drivers" }, + { "name": "Orders" }, + { "name": "Fleets" }, + { "name": "Payloads" }, + { "name": "Entities" }, + { "name": "Service Rates" }, + { "name": "Service Quotes" }, + { "name": "Purchase Rates" }, + { "name": "Tracking Numbers" }, + { "name": "Tracking Statuses" } + ] +} diff --git a/static/openapi/storefront-api-latest.json b/static/openapi/storefront-api-latest.json new file mode 100644 index 0000000..4a023a8 --- /dev/null +++ b/static/openapi/storefront-api-latest.json @@ -0,0 +1,1221 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "Fleetbase Storefront API", + "version": "1.0.0", + "contact": {} + }, + "servers": [ + { + "url": "https://api.fleetbase.io/storefront/v1" + } + ], + "paths": { + "/carts/{id}/{product_id}": { + "post": { + "tags": ["Cart"], + "summary": "Add Item to Cart", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "addItemToCart", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "addons": { + "type": "array", + "items": {}, + "example": [] + }, + "quantity": { + "type": "number", + "example": 1 + }, + "scheduled_at": { + "type": "string", + "example": "scheduled_at_value_here" + }, + "store_location": { + "type": "string", + "example": "store_location_value_here" + }, + "variants": { + "type": "array", + "items": {}, + "example": [] + } + } + }, + "examples": { + "Add Item to Cart": { + "value": { + "addons": [], + "quantity": 1, + "scheduled_at": "scheduled_at_value_here", + "store_location": "store_location_value_here", + "variants": [] + } + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "" + } + }, + { + "name": "product_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "" + } + } + ] + }, + "/carts/{id}": { + "get": { + "tags": ["Cart"], + "summary": "Retrieve a Cart", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "retrieveACart", + "responses": { + "200": { + "description": "" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "{{cart_id}}" + }, + "description": "(Required) The id of the zone you want to delete." + } + ] + }, + "/carts/{id}/{line_item_id}": { + "put": { + "tags": ["Cart"], + "summary": "Update item in Cart", + "description": "You can update all properties of the Zone.\n\n", + "operationId": "updateItemInCart", + "responses": { + "200": { + "description": "" + } + } + }, + "delete": { + "tags": ["Cart"], + "summary": "Remove item from cart", + "description": "Use this endpoint to delete a zone.", + "operationId": "removeItemFromCart", + "responses": { + "200": { + "description": "" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "" + } + }, + { + "name": "line_item_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "" + } + } + ] + }, + "/carts/{id}/empty": { + "put": { + "tags": ["Cart"], + "summary": "Empty cart", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "emptyCart", + "responses": { + "200": { + "description": "" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "" + } + } + ] + }, + "/products": { + "get": { + "tags": ["Products"], + "summary": "Query Products", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "queryProducts", + "parameters": [ + { + "name": "offset", + "in": "query", + "schema": { + "type": "string", + "example": "25" + } + } + ], + "responses": { + "200": { + "description": "" + } + } + } + }, + "/products/{id}": { + "get": { + "tags": ["Products"], + "summary": "Retrieve a Product", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "retrieveAProduct", + "responses": { + "200": { + "description": "" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "{{product_id}}" + } + } + ] + }, + "/categories": { + "get": { + "tags": ["Category"], + "summary": "List categories", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "listCategories", + "responses": { + "200": { + "description": "" + } + } + } + }, + "/customers/login": { + "post": { + "tags": ["Customer"], + "summary": "Authenticate a Customer ❗", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "authenticateACustomer", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Authenticate a Customer ❗": { + "value": "{\n \"identity\": {{customer_indetity}},\n \"password\": {{customer_password}}\n}" + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + } + }, + "/customers/login-with-sms": { + "post": { + "tags": ["Customer"], + "summary": "Authenticate a Customer via SMS", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "authenticateACustomerViaSms", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Authenticate a Customer via SMS": { + "value": "{\n \"phone\": {{customer_phone}}\n}" + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + } + }, + "/customers/verify-code": { + "post": { + "tags": ["Customer"], + "summary": "Verify a SMS code", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "verifyASmsCode", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Verify a SMS code": { + "value": "{\n \"identity\": {{customer_identity}},\n \"code\": \"\"\n}" + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + } + }, + "/customers/request-creation-code": { + "post": { + "tags": ["Customer"], + "summary": "Setups a verification request to create a new storefront customer. ?", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "setupsAVerificationRequestToCreateANewStorefrontCustomer", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Setups a verification request to create a new storefront customer. ?": { + "value": "{\n \"identity\": {{customer_identity}},\n \"mode\": \"phone\" // phone or email\n}" + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + } + }, + "/customers/register-device": { + "post": { + "tags": ["Customer"], + "summary": "Register customer device", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "registerCustomerDevice", + "parameters": [ + { + "name": "customer-token", + "in": "header", + "schema": { + "type": "string", + "example": "{{customer_token}}" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "examples": { + "Register customer device": { + "value": "" + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + } + }, + "/customers": { + "get": { + "tags": ["Customer"], + "summary": "Query customers", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "queryCustomers", + "responses": { + "200": { + "description": "" + } + } + }, + "post": { + "tags": ["Customer"], + "summary": "Create a Customer", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "createACustomer", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Create a Customer": { + "value": "{\n \"name\": \"John Doe\",\n \"type\": \"Support\",\n \"identity\": \"\",\n \"code\": \"\",\n \"title\": \"Issue with Product XYZ\",\n \"email\": {{customer_email}},\n \"phone\": {{customer_phone}},\n \"meta\": {}\n}" + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + } + }, + "/customers/{id}": { + "put": { + "tags": ["Customer"], + "summary": "Update a Customer", + "description": "There is two primary ways to create a zone. The first method you can supply the boundary coordinates for the zone. The second method is you cann supply center coordinates and a radius in meters, and Fleetbase will automatically create a zone around the center coordinates.", + "operationId": "updateACustomer", + "requestBody": { + "content": { + "application/json": { + "examples": { + "Update a Customer": { + "value": "{\n \"name\": \"John Doe\",\n \"type\": \"Support\",\n \"identity\": \"\",\n \"title\": \"Issue with Product XYZ\",\n \"email\": {{customer_email}},\n \"phone\": {{customer_phone}},\n \"meta\": {}\n}" + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "" + } + } + ] + }, + "/customers/places": { + "get": { + "tags": ["Customer"], + "summary": "List a customer saved places", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "listACustomerSavedPlaces", + "responses": { + "200": { + "description": "" + } + } + } + }, + "/customers/orders": { + "get": { + "tags": ["Customer"], + "summary": "List a customer orders", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "listACustomerOrders", + "responses": { + "200": { + "description": "" + } + } + } + }, + "/stores": { + "get": { + "tags": ["Store"], + "summary": "Search Store", + "description": "Search Store", + "operationId": "searchStore", + "parameters": [ + { + "name": "query", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "store", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + } + } + } + }, + "/about": { + "get": { + "tags": ["Store"], + "summary": "About Store", + "description": "About Store", + "operationId": "aboutStore", + "responses": { + "200": { + "description": "" + } + } + } + }, + "/gateways": { + "get": { + "tags": ["Store"], + "summary": "Payment gateways for the current store", + "description": "Payment gateways for the current store", + "operationId": "paymentGatewaysForTheCurrentStore", + "parameters": [ + { + "name": "limit", + "in": "query", + "schema": { + "type": "string", + "example": "25" + } + }, + { + "name": "offset", + "in": "query", + "schema": { + "type": "string", + "example": "0 " + } + } + ], + "responses": { + "200": { + "description": "" + } + } + } + }, + "/gateways/{id}": { + "get": { + "tags": ["Store"], + "summary": "Specific payment gateway given the id", + "description": "Specific payment gateway given the id", + "operationId": "specificPaymentGatewayGivenTheId", + "responses": { + "200": { + "description": "" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "" + } + } + ] + }, + "/store-locations": { + "get": { + "tags": ["Store Locations"], + "summary": "Query Store Locations", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "queryStoreLocations", + "responses": { + "200": { + "description": "OK / Delete a Zone", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "type": "string", + "example": "true" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string", + "example": "Content-Type, Authorization, Referer, User-Agent, Signature, Customer-Token, Access-Control-Request-Headers, Access-Control-Request-Method, Origin" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string", + "example": "GET, OPTIONS" + } + }, + "Access-Control-Max-Age": { + "schema": { + "type": "string", + "example": "600" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { + "type": "string", + "example": "keep-alive" + } + }, + "Date": { + "schema": { + "type": "string", + "example": "Tue, 02 Jan 2024 06:08:57 GMT" + } + }, + "Invalid": { + "schema": { + "type": "string", + "example": "1" + } + }, + "Server": { + "schema": { + "type": "string", + "example": "nginx" + } + }, + "Set-Cookie": { + "schema": { + "type": "string", + "example": "fleetbase_session=BZTQN5le6WBpsdEIXN5x9dJuLqtxL3hHlFoV8WTH; expires=Tue, 30-Jan-2024 06:08:57 GMT; Max-Age=2419200; path=/; domain=.fleetbase.io; httponly; samesite=lax" + } + }, + "Transfer-Encoding": { + "schema": { + "type": "string", + "example": "chunked" + } + }, + "X-Frame-Options": { + "schema": { + "type": "string", + "example": "DENY" + } + }, + "X-RateLimit-Limit": { + "schema": { + "type": "string", + "example": "60" + } + }, + "X-RateLimit-Remaining": { + "schema": { + "type": "string", + "example": "58" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "color": { + "type": "string", + "example": "" + }, + "coordinates": { + "example": "", + "anyOf": [ + { + "type": "string", + "example": "" + }, + { + "type": "array", + "items": {}, + "example": [] + } + ] + }, + "created_at": { + "type": "string", + "example": "" + }, + "description": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "" + }, + "name": { + "type": "string", + "example": "" + }, + "service_area": { + "type": "string", + "nullable": true, + "example": "" + }, + "status": { + "type": "string", + "example": "" + }, + "stroke_color": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "" + } + } + }, + "examples": { + "Delete a Zone": { + "value": { + "color": "", + "coordinates": [], + "created_at": "2024-01-02T05:54:57.000000Z", + "description": "", + "id": "zone_bm37E57", + "name": "Center of Singapore", + "service_area": null, + "status": "active", + "stroke_color": "", + "updated_at": "2024-01-02T05:54:57.000000Z" + } + }, + "OK": { + "value": { + "color": "", + "coordinates": "", + "created_at": "", + "description": "", + "id": "", + "name": "", + "service_area": "", + "status": "", + "stroke_color": "", + "updated_at": "" + } + } + } + } + } + } + } + } + }, + "/service-quotes/from-cart": { + "get": { + "tags": ["Delivery Service Quote"], + "summary": "Retrieve a Delivery Service Quote ❗", + "description": "This endpoint allows you to retrieve a zone object to view it's details.", + "operationId": "retrieveADeliveryServiceQuote", + "parameters": [ + { + "name": "origin", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "destination", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "cart", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Delete a Zone", + "headers": { + "Access-Control-Allow-Credentials": { + "schema": { + "type": "string", + "example": "true" + } + }, + "Access-Control-Allow-Headers": { + "schema": { + "type": "string", + "example": "Content-Type, Authorization, Referer, User-Agent, Signature, Customer-Token, Access-Control-Request-Headers, Access-Control-Request-Method, Origin" + } + }, + "Access-Control-Allow-Methods": { + "schema": { + "type": "string", + "example": "GET, OPTIONS" + } + }, + "Access-Control-Max-Age": { + "schema": { + "type": "string", + "example": "600" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "Connection": { + "schema": { + "type": "string", + "example": "keep-alive" + } + }, + "Date": { + "schema": { + "type": "string", + "example": "Tue, 02 Jan 2024 06:08:57 GMT" + } + }, + "Invalid": { + "schema": { + "type": "string", + "example": "1" + } + }, + "Server": { + "schema": { + "type": "string", + "example": "nginx" + } + }, + "Set-Cookie": { + "schema": { + "type": "string", + "example": "fleetbase_session=BZTQN5le6WBpsdEIXN5x9dJuLqtxL3hHlFoV8WTH; expires=Tue, 30-Jan-2024 06:08:57 GMT; Max-Age=2419200; path=/; domain=.fleetbase.io; httponly; samesite=lax" + } + }, + "Transfer-Encoding": { + "schema": { + "type": "string", + "example": "chunked" + } + }, + "X-Frame-Options": { + "schema": { + "type": "string", + "example": "DENY" + } + }, + "X-RateLimit-Limit": { + "schema": { + "type": "string", + "example": "60" + } + }, + "X-RateLimit-Remaining": { + "schema": { + "type": "string", + "example": "58" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "color": { + "type": "string", + "example": "" + }, + "coordinates": { + "type": "array", + "items": {}, + "example": [] + }, + "created_at": { + "type": "string", + "example": "2024-01-02T05:54:57.000000Z" + }, + "description": { + "type": "string", + "example": "" + }, + "id": { + "type": "string", + "example": "zone_bm37E57" + }, + "name": { + "type": "string", + "example": "Center of Singapore" + }, + "service_area": { + "nullable": true, + "example": null + }, + "status": { + "type": "string", + "example": "active" + }, + "stroke_color": { + "type": "string", + "example": "" + }, + "updated_at": { + "type": "string", + "example": "2024-01-02T05:54:57.000000Z" + } + } + }, + "examples": { + "Delete a Zone": { + "value": { + "color": "", + "coordinates": [], + "created_at": "2024-01-02T05:54:57.000000Z", + "description": "", + "id": "zone_bm37E57", + "name": "Center of Singapore", + "service_area": null, + "status": "active", + "stroke_color": "", + "updated_at": "2024-01-02T05:54:57.000000Z" + } + } + } + } + } + } + } + } + }, + "/checkouts/before": { + "get": { + "tags": ["Checkout"], + "summary": "Before ❗", + "description": "Before ❗", + "operationId": "before", + "parameters": [ + { + "name": "gateway", + "in": "query", + "schema": { + "type": "string", + "example": "gateway_value_here" + } + }, + { + "name": "customer", + "in": "query", + "schema": { + "type": "string", + "example": "customer_value_here" + } + }, + { + "name": "cart", + "in": "query", + "schema": { + "type": "string", + "example": "cart_value_here" + } + }, + { + "name": "service_quote", + "in": "query", + "schema": { + "type": "string", + "example": "serviceQuote_value_here" + } + }, + { + "name": "cash", + "in": "query", + "schema": { + "type": "string", + "example": "true/false" + } + }, + { + "name": "pickup", + "in": "query", + "schema": { + "type": "string", + "example": "true/false" + } + }, + { + "name": "tip", + "in": "query", + "schema": { + "type": "string", + "example": "false" + } + }, + { + "name": "delivery_tip", + "in": "query", + "schema": { + "type": "string", + "example": "false\n" + } + } + ], + "responses": { + "200": { + "description": "" + } + } + } + }, + "/checkouts/capture": { + "get": { + "tags": ["Checkout"], + "summary": "Capture checkout as order ❗", + "description": "Capture checkout as order ❗", + "operationId": "captureCheckoutAsOrder", + "parameters": [ + { + "name": "token", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "" + } + } + } + }, + "/reviews": { + "get": { + "tags": ["Reviews"], + "summary": "Query Reviews ❗", + "description": "Query Reviews ❗", + "operationId": "queryReviews", + "parameters": [ + { + "name": "limit", + "in": "query", + "schema": { + "type": "string", + "example": "25" + } + }, + { + "name": "offset", + "in": "query", + "schema": { + "type": "string", + "example": "0" + } + }, + { + "name": "sort", + "in": "query", + "schema": { + "type": "string", + "example": "created_at" + } + } + ], + "responses": { + "200": { + "description": "" + } + } + }, + "post": { + "tags": ["Reviews"], + "summary": "Create a review", + "description": "Create a review", + "operationId": "createAReview", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "content": { + "type": "string", + "example": "" + }, + "rating": { + "type": "number", + "example": 5 + } + } + }, + "examples": { + "Create a review": { + "value": { + "content": "", + "rating": 5 + } + } + } + } + } + }, + "responses": { + "200": { + "description": "" + } + } + } + }, + "/reviews/count": { + "get": { + "tags": ["Reviews"], + "summary": "Counts the number of ratings for a store", + "description": "Counts the number of ratings for a store", + "operationId": "countsTheNumberOfRatingsForAStore", + "responses": { + "200": { + "description": "" + } + } + } + }, + "/reviews/{id}": { + "get": { + "tags": ["Reviews"], + "summary": "Retrieve a Store review", + "description": "Retrieve a Store review", + "operationId": "retrieveAStoreReview", + "responses": { + "200": { + "description": "" + } + } + }, + "delete": { + "tags": ["Reviews"], + "summary": "Delete a Review", + "description": "Delete a Review", + "operationId": "deleteAReview", + "responses": { + "200": { + "description": "" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "example": "" + } + } + ] + } + }, + "components": { + "securitySchemes": { + "apiKey": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + }, + "security": [ + { + "apiKey": [] + } + ], + "tags": [ + { + "name": "Cart" + }, + { + "name": "Products" + }, + { + "name": "Category" + }, + { + "name": "Customer" + }, + { + "name": "Store" + }, + { + "name": "Store Locations" + }, + { + "name": "Delivery Service Quote" + }, + { + "name": "Checkout" + }, + { + "name": "Reviews" + } + ] +}