expedite


Nameexpedite JSON
Version 0.1.0 PyPI version JSON
download
home_pagehttps://github.com/gridhead/expedite
SummarySimple encrypted file transfer service for humans
upload_time2024-11-12 17:28:28
maintainerAkashdeep Dhar
docs_urlNone
authorAkashdeep Dhar
requires_python<3.14,>=3.10
licenseGPL-3.0-or-later
keywords websockets file transfer delivering collecting
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Expedite

Simple encrypted file transfer service for humans

## Introduction

Expedite is a simple encrypted file transfer service that allows for people to 
share synchronously assets among each other without having to rely on third 
party file sharing services (and constantly worrying about how their data might
be used) or feeling the need of having publicly visible IP addresses (and
constantly worrying about script kiddies attacking your computer).

Expedite Server can be deployed on a virtual private server having an IP 
address that is discoverable by the Expedite Client users to broker file 
contents. The transfers facilitated using WebSockets are end-to-end encrypted 
with the use of 128-bit Advanced Encryption Standard and the server is 
restricted to logging only unidentifiable activities to the volatile memory.

Expedite is currently in BETA phase and if you like to direction the project is
heading towards, kindly consider helping me out by starring the project 
repository, filing issue tickets for software errors or feature requests, 
contributing to the codebase of the project or sponsoring me to help maintain 
the servers and to help me keep working on more FOSS projects like these.

## Offerings

You can either deploy your own Expedite Server to broker file contents from 
your group of Expedite Client users or you can use the following publicly
available servers setup by me instead. Picking the server that is closer to 
your group of users can help with improving performance and reliability of the
transfer. Please open up a pull request if you wish to list your server here.

- **Mumbai, MH**  
  `wss://expedite-mumb.gridhead.net` or `wss://expedite-mumb.gridhead.net:443`  
  [**Grade A - Qualys**](https://www.ssllabs.com/ssltest/analyze.html?d=expedite-mumb.gridhead.net)  
  [**Grade A - TestSSL**](https://github.com/gridhead/expedite/blob/main/data/test-mumb-12112024.txt)  
  ![](https://raw.githubusercontent.com/gridhead/expedite/main/data/cert-mumb-12112024.png)

- **Atlanta, GA**  
  `wss://expedite-atla.gridhead.net` or `wss://expedite-atla.gridhead.net:443`  
  [**Grade A - Qualys**](https://www.ssllabs.com/ssltest/analyze.html?d=expedite-atla.gridhead.net)  
  [**Grade A - TestSSL**](https://github.com/gridhead/expedite/blob/main/data/test-atla-12112024.txt)  
  ![](https://raw.githubusercontent.com/gridhead/expedite/main/data/cert-atla-12112024.png)

## Illustration

### Client

#### Bridge - Info

![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-info-stat.png)

#### Bridge - Delivering - Static

![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-send-stat.png)

#### Bridge - Collecting - Static

![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-recv-stat.png)

#### Bridge - Delivering - Progress

![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-send-prog.gif)

#### Bridge - Collecting - Progress

![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-recv-prog.gif)

#### Prompt - Help

```shell
(venv) $ ed-prompt --help
```

```
Usage: ed-prompt [OPTIONS] COMMAND [ARGS]...

  Configure the service particulars before starting it

Options:
  -h, --host TEXT           Set the address for the service endpoint
                            [required]
  -t, --time INTEGER RANGE  Set the expiry period for participants  [default:
                            150; 5<=x<=300]
  -e, --endo TEXT           Set the identity of the opposing client
  --version                 Show the version and exit.
  --help                    Show this message and exit.

Commands:
  recv  Collect file through an encrypted transfer
  send  Deliver file through an encrypted transfer
```

#### Prompt - Delivering - Help

```shell
(venv) $ ed-prompt send --help
```

```
Usage: ed-prompt send [OPTIONS]

  Deliver file through an encrypted transfer

Options:
  -p, --pswd TEXT           Set the password for delivering encryption
                            [default: CD87C56C]
  -f, --file PATH           Set the filepath for delivering to network
                            [required]
  -s, --size INTEGER RANGE  Set the unit size for file chunking (in B)
                            [default: 65536; 1024<=x<=524288]
  --help                    Show this message and exit.
```

#### Prompt - Collecting - Help

```shell
(venv) $ ed-prompt recv --help
```

```
Usage: ed-prompt recv [OPTIONS]

  Collect file through an encrypted transfer

Options:
  -p, --pswd TEXT  Set the password for collecting encryption  [required]
  --help           Show this message and exit.
```

#### Prompt - Delivering - Static

```shell
(venv) $ ed-prompt --host wss://expedite-mumb.gridhead.net --time 150 --endo 2E8EC1AC send --pswd PASSWORDINCOMING --size 65536 --file dist/ed-bridge
```

```
[2024-11-12 17:09:02] Expedite Client v0.1.0
[2024-11-12 17:09:02] Addr. wss://expedite-mumb.gridhead.net
[2024-11-12 17:09:02] Pass. PASSWORDINCOMING
[2024-11-12 17:09:02] Plan. DELIVERING
[2024-11-12 17:09:02] Wait. 150 seconds
[2024-11-12 17:09:02] Please wait for 2E8EC1AC to begin interaction.
[2024-11-12 17:09:02] Attempting to connect to the network.
[2024-11-12 17:09:02] Successfully connected to the network.
[2024-11-12 17:09:02] You are now identified as 14CF663D in the network.
[2024-11-12 17:09:02] Attempting pairing with 2E8EC1AC.
[2024-11-12 17:09:02] Starting transmission.
[2024-11-12 17:09:02] Generating cryptography sign.
[2024-11-12 17:09:02] Collecting delivering summon from 2E8EC1AC.
[2024-11-12 17:09:02] Delivering contents for 'ed-bridge' (78.32MB) to 2E8EC1AC.
[2024-11-12 17:09:19] Delivering contents digest for confirmation.
[2024-11-12 17:09:20] Contents integrity verified (Mean 4.36MB/s).
[2024-11-12 17:09:20] Delivering done after 18.12 seconds.
[2024-11-12 17:09:20] Exiting.
```

#### Prompt - Collecting - Static

```shell
(venv) $ ed-prompt --host wss://expedite-mumb.gridhead.net --time 150 --endo 1AAE5935 recv --pswd PASSWORDINCOMING
```

```
[2024-11-12 17:15:10] Expedite Client v0.1.0
[2024-11-12 17:15:10] Addr. wss://expedite-mumb.gridhead.net
[2024-11-12 17:15:10] Pass. PASSWORDINCOMING
[2024-11-12 17:15:10] Plan. COLLECTING
[2024-11-12 17:15:10] Wait. 150 seconds
[2024-11-12 17:15:10] Please wait for 1AAE5935 to begin interaction.
[2024-11-12 17:15:10] Attempting to connect to the network.
[2024-11-12 17:15:10] Successfully connected to the network.
[2024-11-12 17:15:10] You are now identified as 96B33383 in the network.
[2024-11-12 17:15:10] Attempting pairing with 1AAE5935.
[2024-11-12 17:15:10] Starting transmission.
[2024-11-12 17:15:10] Generating cryptography sign.
[2024-11-12 17:15:10] Delivering collection summon to 1AAE5935.
[2024-11-12 17:15:10] Collecting contents for 'ed-bridge' (78.32MB) from 1AAE5935.
[2024-11-12 17:15:32] Collecting contents digest for confirmation.
[2024-11-12 17:15:32] Contents integrity verified (Mean 3.52MB/s).
[2024-11-12 17:15:32] Collecting done after 22.57 seconds.
[2024-11-12 17:15:32] Exiting.
```

#### Prompt - Delivering - Progress

![](https://raw.githubusercontent.com/gridhead/expedite/main/data/prompt-send-prog.gif)

#### Prompt - Collecting - Progress

![](https://raw.githubusercontent.com/gridhead/expedite/main/data/prompt-recv-prog.gif)

### Server

#### Help

```shell
(venv) $ ed-server --help
```

```
Usage: ed-server [OPTIONS]

  Configure the service particulars before starting it

Options:
  -a, --addr TEXT           Set the interface for the service endpoint
                            [default: 127.0.0.1]
  -p, --port INTEGER RANGE  Set the port value for the service endpoint
                            [default: 8080; 64<=x<=65535]
  --version                 Show the version and exit.
  --help                    Show this message and exit.
```

#### Broker

```shell
(venv) $ ed-server --addr 0.0.0.0 --port 8181
```

```
[2024-11-12 17:46:46] Expedite Server v0.1.0
[2024-11-12 17:46:46] Addr. 0.0.0.0
[2024-11-12 17:46:46] Port. 8181
[2024-11-12 17:46:46] server listening on 0.0.0.0:8181
[2024-11-12 17:48:30] connection open
[2024-11-12 17:48:30] 97939184 joined with the intention of collecting.
[2024-11-12 17:48:30] 97939184 is looking for ACE751B4 for 150 seconds.
[2024-11-12 17:48:51] connection open
[2024-11-12 17:48:51] DEA38DDF joined with the intention of delivering.
[2024-11-12 17:48:51] DEA38DDF is waiting for client for 150 seconds.
[2024-11-12 17:48:52] 97939184 left.
[2024-11-12 17:48:52] connection closed
[2024-11-12 17:49:00] connection open
[2024-11-12 17:49:00] 69988F01 joined with the intention of collecting.
[2024-11-12 17:49:00] 69988F01 is looking for DEA38DDF for 150 seconds.
[2024-11-12 17:49:00] 69988F01 and DEA38DDF are positively paired.
[2024-11-12 17:49:00] 69988F01 is attempting to fetch file contents from DEA38DDF.
[2024-11-12 17:49:03] DEA38DDF is delivering digest to 69988F01.
[2024-11-12 17:49:03] 69988F01 is delivering confirmation to DEA38DDF.
[2024-11-12 17:49:03] DEA38DDF left.
[2024-11-12 17:49:03] 69988F01 left.
[2024-11-12 17:49:03] connection closed
[2024-11-12 17:49:03] connection closed
[2024-11-12 17:49:11] connection open
[2024-11-12 17:49:11] 64595E02 joined with the intention of delivering.
[2024-11-12 17:49:11] 64595E02 is waiting for client for 150 seconds.
[2024-11-12 17:49:27] connection open
[2024-11-12 17:49:27] ABBBF4B1 joined with the intention of delivering.
[2024-11-12 17:49:27] ABBBF4B1 is looking for 64595E02 for 150 seconds.
[2024-11-12 17:49:27] ABBBF4B1 and 64595E02 are negatively paired.
[2024-11-12 17:49:27] ABBBF4B1 left.
[2024-11-12 17:49:27] connection closed
[2024-11-12 17:49:27] 64595E02 left.
[2024-11-12 17:49:27] connection closed
[2024-11-12 17:49:41] connection open
[2024-11-12 17:49:41] 58FEEF9C joined with the intention of delivering.
[2024-11-12 17:49:41] 58FEEF9C is looking for 64595E02 for 5 seconds.
[2024-11-12 17:49:46] 58FEEF9C has achieved expiry.
[2024-11-12 17:49:46] 58FEEF9C left.
[2024-11-12 17:49:46] connection closed
[2024-11-12 17:50:03] connection open
[2024-11-12 17:50:03] 58B8F046 joined with the intention of collecting.
[2024-11-12 17:50:03] 58B8F046 is looking for DEA38DDF for 5 seconds.
[2024-11-12 17:50:08] 58B8F046 has achieved expiry.
[2024-11-12 17:50:08] 58B8F046 left.
[2024-11-12 17:50:08] connection closed
...
```

## Installation

### For development

1.  Ensure that the required tools and dependencies are installed.
    ```
    $ sudo dnf install python3 python3-virtualenv python3-pip git poetry
    ```
2.  Fork the repository and clone the project to your local storage.
    ```
    $ git clone git@github.com:$(whoami)/expedite.git
    ```
3.  Make the project cloning location the present working directory.
    ```
    $ cd expedite
    ```
4.  Create a virtual environment for installing project dependencies.
    ```
    $ virtualenv venv
    ```
5.  Activate the newly created virtual environment before proceeding.
    ```
    $ source venv/bin/activate
    ```
6.  Install the project codebase alongside the dependencies.
    ```
    (venv) $ poetry install
    ```

### For consumption

#### From PyPI

1.  Ensure that the required tools and dependencies are installed.
    ```
    $ sudo dnf install python3 python3-virtualenv python3-pip
    ```
2.  Create a virtual environment for installing project dependencies.
    ```
    $ virtualenv venv
    ```
3.  Activate the newly created virtual environment before proceeding.
    ```
    $ source venv/bin/activate
    ```
4.  Install the project codebase from Python Package Index.
    ```
    (venv) $ pip3 install expedite
    ```

#### From GitHub

##### Nightly

1.  Visit the **GitHub Actions** page of the project repository.
    ```
    https://github.com/gridhead/expedite/actions
    ```
2.  To get automated builds for **GNU/Linux distributions**, visit the following page.
    ```
    https://github.com/gridhead/expedite/actions/workflows/gnul.yml
    ```
3.  To get automated builds for **Microsoft Windows**, visit the following page.
    ```
    https://github.com/gridhead/expedite/actions/workflows/mswn.yml
    ```
4.  Please request for the builds if they are unavailable in the recent workflow runs.
    ```
    https://github.com/gridhead/expedite/issues
    ```

##### Stable

1.  Visit the **GitHub Releases** page of the project repository.
    ```
    https://github.com/gridhead/expedite/releases
    ```
2.  Please file for bug reports and feature requests based on the stable releases.
    ```
    https://github.com/gridhead/expedite/issues
    ```

## Execution

### Server

1.  Ensure that the previously created virtual environment is activated.
    ```
    $ source venv/bin/activate
    ```
2.  Execute the following command to view the help topics of the project.
    ```
    (venv) $ ed-server --help
    ```
    ```
    Usage: ed-server [OPTIONS]

    Options:
      -a, --addr TEXT           Set the interface for the service endpoint
                                [default: 127.0.0.1]
      -p, --port INTEGER RANGE  Set the port value for the service endpoint
                                [default: 8080; 64<=x<=65535]
      --version                 Show the version and exit.
      --help                    Show this message and exit.
    ```
3.  Start the broker service using the following command.
    ```
    (venv) $ ed-server --addr 0.0.0.0 --p 9090
    ```
    1. The broker service will run on IPv4 addressing (i.e. `0.0.0.0`) and on a specific port (i.e. `9090`).
    3. The broker service can be stopped by sending a keyboard interrupt (i.e. `Ctrl` + `C`) when done.
4.  Note the IP address or the hostname for use by client connections.
    ```
    ip a
    ```

### Client

1.  Ensure that the previously created virtual environment is activated.
    ```
    $ source venv/bin/activate
    ```
2.  Execute the following command to view the help topics of the project.
    ```
    (venv) $ ed-server --help
    ```
    ```
    Usage: ed-client [OPTIONS] COMMAND [ARGS]...

    Options:
      -h, --host TEXT           Set the address for the service endpoint
                                [required]
      -t, --time INTEGER RANGE  Set the expiry period for participants  [default:
                                15; 5<=x<=30]
      -e, --endo TEXT           Set the identity of the opposing client
      --version                 Show the version and exit.
      --help                    Show this message and exit.

    Commands:
      recv  Collect file through an encrypted transfer
      send  Deliver file through an encrypted transfer
    ```

#### Delivering

1.  Execute the following command to view the help topics of the `SEND` subcommand.
    ```
    (venv) $ ed-client send --help
    ```
    ```
    Usage: ed-client send [OPTIONS]

      Deliver file through an encrypted transfer

    Options:
      -p, --pswd TEXT           Set the password for delivering encryption
                                [default: 123972B4]
      -f, --file PATH           Set the filepath for delivering to network
                                [required]
      -s, --size INTEGER RANGE  Set the unit size for file chunking (in B)
                                [default: 262144; 1024<=x<=524288]
      --help                    Show this message and exit.
    ```
2.  If the delivering client is joining the network **before** the collecting client, execute the following command.
    ```
    (venv) $ ed-client --host ws://localhost:9090 --time 30 send --file /path/to/file.extn --pswd expedite --size 131072
    ```
    ```
    [2024-07-06 11:52:10] Expedite Client v0.1.0
    [2024-07-06 11:52:10] Addr. ws://localhost:9090
    [2024-07-06 11:52:10] Pass. expedite
    [2024-07-06 11:52:10] Plan. DELIVERING
    [2024-07-06 11:52:10] Wait. 30 seconds
    [2024-07-06 11:52:10] Please share your acquired identity to begin interaction.
    [2024-07-06 11:52:10] Attempting to connect to the network.
    [2024-07-06 11:52:10] Successfully connected to the network.
    [2024-07-06 11:52:10] You are now identified as 01276D06 in the network.
    ```
    1. The delivering client is attempting to connect to the broker service deployed at `ws://localhost:9090`.
    2. The delivering client has an inactivity timeout for `30 seconds` beyond which it will automatically disconnect.
    3. The delivering client has acquired the identity `01276D06` which can be used by the collecting client for discovery.
    4. The delivering client is attempting to share the file named `file.extn` from the location `/path/to/file.extn`.
    5. The delivering client is using the password `expedite` to encrypt the file contents with 128-bit AES encryption.
    6. The delivering client is going to process chunks of size `131072 byte` or `128KiB` at a time for delivering.
    7. The user of the delivering client must share their identity `01276D06` and password to start delivering process.
    8. The delivering client will disconnect from the network if the collecting client opens the program in the wrong mode.
3.  If the delivering client is joining the network **after** the collecting client, execute the following command.
    ```
    (venv) $ ed-client --host ws://localhost:9090 --time 30 --endo DEADCAFE send --file /path/to/file.extn --pswd expedite --size 131072
    ```
    ```
    [2024-07-06 12:02:09] Expedite Client v0.1.0
    [2024-07-06 12:02:09] Addr. ws://localhost:9090
    [2024-07-06 12:02:09] Pass. expedite
    [2024-07-06 12:02:09] Plan. DELIVERING
    [2024-07-06 12:02:09] Wait. 30 seconds
    [2024-07-06 12:02:09] Please wait for DEADCAFE to begin interaction.
    [2024-07-06 12:02:09] Attempting to connect to the network.
    [2024-07-06 12:02:09] Successfully connected to the network.
    [2024-07-06 12:02:09] You are now identified as BA40BB0F in the network.
    ```
    1. The delivering client is attempting to connect to the broker service deployed at `ws://localhost:9090`.
    2. The delivering client has an inactivity timeout for `30 seconds` beyond which it will automatically disconnect.
    3. The delivering client has acquired the identity `BA40BB0F` which can be used by the collecting client for discovery.
    4. The delivering client is attempting to share the file named `file.extn` from the location `/path/to/file.extn`.
    5. The delivering client is using the password `expedite` to encrypt the file contents with 128-bit AES encryption.
    6. The delivering client is going to process chunks of size `131072 byte` or `128KiB` at a time for delivering.
    7. The user of the delivering client expects the collecting client with the identity `DEADCAFE` to start interaction.
    8. The delivering client will disconnect from the network if the collecting client opens the program in the wrong mode.
4.  If the average latency from the delivering client to the broker service is **below 100ms**, consider **increasing the chunking size** to **improve the stability** of the delivering process.
5.  If the average latency from the delivering client to the broker service is **above 100ms**, consider **decreasing the chunking size** to **improve the performance** of the delivering process.
6.  Let the delivering process complete or if needed, abort an ongoing delivering process by sending a keyboard interrupt (i.e. `Ctrl` + `C`).

#### Collecting

1.  Execute the following command to view the help topics of the `RECV` subcommand.
    ```
    Usage: ed-client recv [OPTIONS]

      Collect file through an encrypted transfer

    Options:
      -p, --pswd TEXT  Set the password for collecting encryption  [required]
      --help           Show this message and exit.
    ```
2.  If the collecting client is joining the network **before** the delivering client, execute the following command.
    ```
    (venv) $ ed-client --host ws://localhost:8080 --time 30 recv --pswd expedite
    ```
    ```
    [2024-07-06 12:57:43] Expedite Client v0.1.0
    [2024-07-06 12:57:43] Addr. ws://localhost:8080
    [2024-07-06 12:57:43] Pass. expedite
    [2024-07-06 12:57:43] Plan. COLLECTING
    [2024-07-06 12:57:43] Wait. 30 seconds
    [2024-07-06 12:57:43] Please share your acquired identity to begin interaction.
    [2024-07-06 12:57:43] Attempting to connect to the network.
    [2024-07-06 12:57:43] Successfully connected to the network.
    [2024-07-06 12:57:43] You are now identified as 13755346 in the network.
    ```
    1. The collecting client is attempting to connect to the broker service deployed at `ws://localhost:9090`.
    2. The collecting client has an inactivity timeout for `30 seconds` beyond which it will automatically disconnect.
    3. The collecting client has acquired the identity `13755346` which can be used by the delivering client for discovery.
    4. The collecting client is using the password `expedite` to decrypt the file contents with 128-bit AES encryption.
    5. The user of the collecting client must share their identity `13755346` and password to start collecting process.
    6. The collecting client will disconnect from the network if the delivering client opens the program in the wrong mode.
3.  If the collecting client is joining the network **after** the delivering client, execute the following command.
    ```
    (venv) $ ed-client --host ws://localhost:8080 --time 30 --endo DEADCAFE recv --pswd expedite
    ```
    ```
    [2024-07-06 12:55:30] Expedite Client v0.1.0
    [2024-07-06 12:55:30] Addr. ws://localhost:8080
    [2024-07-06 12:55:30] Pass. expedite
    [2024-07-06 12:55:30] Plan. COLLECTING
    [2024-07-06 12:55:30] Wait. 30 seconds
    [2024-07-06 12:55:30] Please wait for DEADCAFE to begin interaction.
    [2024-07-06 12:55:30] Attempting to connect to the network.
    [2024-07-06 12:55:30] Successfully connected to the network.
    [2024-07-06 12:55:30] You are now identified as 13AA7DB2 in the network.
    ```
    1. The collecting client is attempting to connect to the broker service deployed at `ws://localhost:9090`.
    2. The collecting client has an inactivity timeout for `30 seconds` beyond which it will automatically disconnect.
    3. The collecting client has acquired the identity `13AA7DB2` which can be used by the delivering client for discovery.
    4. The collecting client is using the password `expedite` to decrypt the file contents with 128-bit AES encryption.
    5. The user of the collecting client must share their identity `13AA7DB2` and password to start collecting process.
    6. The collecting client will disconnect from the network if the delivering client opens the program in the wrong mode.
4.  Let the collecting process complete or if needed, abort an ongoing collecting process by sending a keyboard interrupt (i.e. `Ctrl` + `C`).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/gridhead/expedite",
    "name": "expedite",
    "maintainer": "Akashdeep Dhar",
    "docs_url": null,
    "requires_python": "<3.14,>=3.10",
    "maintainer_email": "akashdeep.dhar@gmail.com",
    "keywords": "websockets, file, transfer, delivering, collecting",
    "author": "Akashdeep Dhar",
    "author_email": "akashdeep.dhar@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/b2/dc/30122a5be523dafe7aac10e555a551bdc2afb362b36daa7a26d884d89acc/expedite-0.1.0.tar.gz",
    "platform": null,
    "description": "# Expedite\n\nSimple encrypted file transfer service for humans\n\n## Introduction\n\nExpedite is a simple encrypted file transfer service that allows for people to \nshare synchronously assets among each other without having to rely on third \nparty file sharing services (and constantly worrying about how their data might\nbe used) or feeling the need of having publicly visible IP addresses (and\nconstantly worrying about script kiddies attacking your computer).\n\nExpedite Server can be deployed on a virtual private server having an IP \naddress that is discoverable by the Expedite Client users to broker file \ncontents. The transfers facilitated using WebSockets are end-to-end encrypted \nwith the use of 128-bit Advanced Encryption Standard and the server is \nrestricted to logging only unidentifiable activities to the volatile memory.\n\nExpedite is currently in BETA phase and if you like to direction the project is\nheading towards, kindly consider helping me out by starring the project \nrepository, filing issue tickets for software errors or feature requests, \ncontributing to the codebase of the project or sponsoring me to help maintain \nthe servers and to help me keep working on more FOSS projects like these.\n\n## Offerings\n\nYou can either deploy your own Expedite Server to broker file contents from \nyour group of Expedite Client users or you can use the following publicly\navailable servers setup by me instead. Picking the server that is closer to \nyour group of users can help with improving performance and reliability of the\ntransfer. Please open up a pull request if you wish to list your server here.\n\n- **Mumbai, MH**  \n  `wss://expedite-mumb.gridhead.net` or `wss://expedite-mumb.gridhead.net:443`  \n  [**Grade A - Qualys**](https://www.ssllabs.com/ssltest/analyze.html?d=expedite-mumb.gridhead.net)  \n  [**Grade A - TestSSL**](https://github.com/gridhead/expedite/blob/main/data/test-mumb-12112024.txt)  \n  ![](https://raw.githubusercontent.com/gridhead/expedite/main/data/cert-mumb-12112024.png)\n\n- **Atlanta, GA**  \n  `wss://expedite-atla.gridhead.net` or `wss://expedite-atla.gridhead.net:443`  \n  [**Grade A - Qualys**](https://www.ssllabs.com/ssltest/analyze.html?d=expedite-atla.gridhead.net)  \n  [**Grade A - TestSSL**](https://github.com/gridhead/expedite/blob/main/data/test-atla-12112024.txt)  \n  ![](https://raw.githubusercontent.com/gridhead/expedite/main/data/cert-atla-12112024.png)\n\n## Illustration\n\n### Client\n\n#### Bridge - Info\n\n![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-info-stat.png)\n\n#### Bridge - Delivering - Static\n\n![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-send-stat.png)\n\n#### Bridge - Collecting - Static\n\n![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-recv-stat.png)\n\n#### Bridge - Delivering - Progress\n\n![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-send-prog.gif)\n\n#### Bridge - Collecting - Progress\n\n![](https://raw.githubusercontent.com/gridhead/expedite/main/data/bridge-recv-prog.gif)\n\n#### Prompt - Help\n\n```shell\n(venv) $ ed-prompt --help\n```\n\n```\nUsage: ed-prompt [OPTIONS] COMMAND [ARGS]...\n\n  Configure the service particulars before starting it\n\nOptions:\n  -h, --host TEXT           Set the address for the service endpoint\n                            [required]\n  -t, --time INTEGER RANGE  Set the expiry period for participants  [default:\n                            150; 5<=x<=300]\n  -e, --endo TEXT           Set the identity of the opposing client\n  --version                 Show the version and exit.\n  --help                    Show this message and exit.\n\nCommands:\n  recv  Collect file through an encrypted transfer\n  send  Deliver file through an encrypted transfer\n```\n\n#### Prompt - Delivering - Help\n\n```shell\n(venv) $ ed-prompt send --help\n```\n\n```\nUsage: ed-prompt send [OPTIONS]\n\n  Deliver file through an encrypted transfer\n\nOptions:\n  -p, --pswd TEXT           Set the password for delivering encryption\n                            [default: CD87C56C]\n  -f, --file PATH           Set the filepath for delivering to network\n                            [required]\n  -s, --size INTEGER RANGE  Set the unit size for file chunking (in B)\n                            [default: 65536; 1024<=x<=524288]\n  --help                    Show this message and exit.\n```\n\n#### Prompt - Collecting - Help\n\n```shell\n(venv) $ ed-prompt recv --help\n```\n\n```\nUsage: ed-prompt recv [OPTIONS]\n\n  Collect file through an encrypted transfer\n\nOptions:\n  -p, --pswd TEXT  Set the password for collecting encryption  [required]\n  --help           Show this message and exit.\n```\n\n#### Prompt - Delivering - Static\n\n```shell\n(venv) $ ed-prompt --host wss://expedite-mumb.gridhead.net --time 150 --endo 2E8EC1AC send --pswd PASSWORDINCOMING --size 65536 --file dist/ed-bridge\n```\n\n```\n[2024-11-12 17:09:02] Expedite Client v0.1.0\n[2024-11-12 17:09:02] Addr. wss://expedite-mumb.gridhead.net\n[2024-11-12 17:09:02] Pass. PASSWORDINCOMING\n[2024-11-12 17:09:02] Plan. DELIVERING\n[2024-11-12 17:09:02] Wait. 150 seconds\n[2024-11-12 17:09:02] Please wait for 2E8EC1AC to begin interaction.\n[2024-11-12 17:09:02] Attempting to connect to the network.\n[2024-11-12 17:09:02] Successfully connected to the network.\n[2024-11-12 17:09:02] You are now identified as 14CF663D in the network.\n[2024-11-12 17:09:02] Attempting pairing with 2E8EC1AC.\n[2024-11-12 17:09:02] Starting transmission.\n[2024-11-12 17:09:02] Generating cryptography sign.\n[2024-11-12 17:09:02] Collecting delivering summon from 2E8EC1AC.\n[2024-11-12 17:09:02] Delivering contents for 'ed-bridge' (78.32MB) to 2E8EC1AC.\n[2024-11-12 17:09:19] Delivering contents digest for confirmation.\n[2024-11-12 17:09:20] Contents integrity verified (Mean 4.36MB/s).\n[2024-11-12 17:09:20] Delivering done after 18.12 seconds.\n[2024-11-12 17:09:20] Exiting.\n```\n\n#### Prompt - Collecting - Static\n\n```shell\n(venv) $ ed-prompt --host wss://expedite-mumb.gridhead.net --time 150 --endo 1AAE5935 recv --pswd PASSWORDINCOMING\n```\n\n```\n[2024-11-12 17:15:10] Expedite Client v0.1.0\n[2024-11-12 17:15:10] Addr. wss://expedite-mumb.gridhead.net\n[2024-11-12 17:15:10] Pass. PASSWORDINCOMING\n[2024-11-12 17:15:10] Plan. COLLECTING\n[2024-11-12 17:15:10] Wait. 150 seconds\n[2024-11-12 17:15:10] Please wait for 1AAE5935 to begin interaction.\n[2024-11-12 17:15:10] Attempting to connect to the network.\n[2024-11-12 17:15:10] Successfully connected to the network.\n[2024-11-12 17:15:10] You are now identified as 96B33383 in the network.\n[2024-11-12 17:15:10] Attempting pairing with 1AAE5935.\n[2024-11-12 17:15:10] Starting transmission.\n[2024-11-12 17:15:10] Generating cryptography sign.\n[2024-11-12 17:15:10] Delivering collection summon to 1AAE5935.\n[2024-11-12 17:15:10] Collecting contents for 'ed-bridge' (78.32MB) from 1AAE5935.\n[2024-11-12 17:15:32] Collecting contents digest for confirmation.\n[2024-11-12 17:15:32] Contents integrity verified (Mean 3.52MB/s).\n[2024-11-12 17:15:32] Collecting done after 22.57 seconds.\n[2024-11-12 17:15:32] Exiting.\n```\n\n#### Prompt - Delivering - Progress\n\n![](https://raw.githubusercontent.com/gridhead/expedite/main/data/prompt-send-prog.gif)\n\n#### Prompt - Collecting - Progress\n\n![](https://raw.githubusercontent.com/gridhead/expedite/main/data/prompt-recv-prog.gif)\n\n### Server\n\n#### Help\n\n```shell\n(venv) $ ed-server --help\n```\n\n```\nUsage: ed-server [OPTIONS]\n\n  Configure the service particulars before starting it\n\nOptions:\n  -a, --addr TEXT           Set the interface for the service endpoint\n                            [default: 127.0.0.1]\n  -p, --port INTEGER RANGE  Set the port value for the service endpoint\n                            [default: 8080; 64<=x<=65535]\n  --version                 Show the version and exit.\n  --help                    Show this message and exit.\n```\n\n#### Broker\n\n```shell\n(venv) $ ed-server --addr 0.0.0.0 --port 8181\n```\n\n```\n[2024-11-12 17:46:46] Expedite Server v0.1.0\n[2024-11-12 17:46:46] Addr. 0.0.0.0\n[2024-11-12 17:46:46] Port. 8181\n[2024-11-12 17:46:46] server listening on 0.0.0.0:8181\n[2024-11-12 17:48:30] connection open\n[2024-11-12 17:48:30] 97939184 joined with the intention of collecting.\n[2024-11-12 17:48:30] 97939184 is looking for ACE751B4 for 150 seconds.\n[2024-11-12 17:48:51] connection open\n[2024-11-12 17:48:51] DEA38DDF joined with the intention of delivering.\n[2024-11-12 17:48:51] DEA38DDF is waiting for client for 150 seconds.\n[2024-11-12 17:48:52] 97939184 left.\n[2024-11-12 17:48:52] connection closed\n[2024-11-12 17:49:00] connection open\n[2024-11-12 17:49:00] 69988F01 joined with the intention of collecting.\n[2024-11-12 17:49:00] 69988F01 is looking for DEA38DDF for 150 seconds.\n[2024-11-12 17:49:00] 69988F01 and DEA38DDF are positively paired.\n[2024-11-12 17:49:00] 69988F01 is attempting to fetch file contents from DEA38DDF.\n[2024-11-12 17:49:03] DEA38DDF is delivering digest to 69988F01.\n[2024-11-12 17:49:03] 69988F01 is delivering confirmation to DEA38DDF.\n[2024-11-12 17:49:03] DEA38DDF left.\n[2024-11-12 17:49:03] 69988F01 left.\n[2024-11-12 17:49:03] connection closed\n[2024-11-12 17:49:03] connection closed\n[2024-11-12 17:49:11] connection open\n[2024-11-12 17:49:11] 64595E02 joined with the intention of delivering.\n[2024-11-12 17:49:11] 64595E02 is waiting for client for 150 seconds.\n[2024-11-12 17:49:27] connection open\n[2024-11-12 17:49:27] ABBBF4B1 joined with the intention of delivering.\n[2024-11-12 17:49:27] ABBBF4B1 is looking for 64595E02 for 150 seconds.\n[2024-11-12 17:49:27] ABBBF4B1 and 64595E02 are negatively paired.\n[2024-11-12 17:49:27] ABBBF4B1 left.\n[2024-11-12 17:49:27] connection closed\n[2024-11-12 17:49:27] 64595E02 left.\n[2024-11-12 17:49:27] connection closed\n[2024-11-12 17:49:41] connection open\n[2024-11-12 17:49:41] 58FEEF9C joined with the intention of delivering.\n[2024-11-12 17:49:41] 58FEEF9C is looking for 64595E02 for 5 seconds.\n[2024-11-12 17:49:46] 58FEEF9C has achieved expiry.\n[2024-11-12 17:49:46] 58FEEF9C left.\n[2024-11-12 17:49:46] connection closed\n[2024-11-12 17:50:03] connection open\n[2024-11-12 17:50:03] 58B8F046 joined with the intention of collecting.\n[2024-11-12 17:50:03] 58B8F046 is looking for DEA38DDF for 5 seconds.\n[2024-11-12 17:50:08] 58B8F046 has achieved expiry.\n[2024-11-12 17:50:08] 58B8F046 left.\n[2024-11-12 17:50:08] connection closed\n...\n```\n\n## Installation\n\n### For development\n\n1.  Ensure that the required tools and dependencies are installed.\n    ```\n    $ sudo dnf install python3 python3-virtualenv python3-pip git poetry\n    ```\n2.  Fork the repository and clone the project to your local storage.\n    ```\n    $ git clone git@github.com:$(whoami)/expedite.git\n    ```\n3.  Make the project cloning location the present working directory.\n    ```\n    $ cd expedite\n    ```\n4.  Create a virtual environment for installing project dependencies.\n    ```\n    $ virtualenv venv\n    ```\n5.  Activate the newly created virtual environment before proceeding.\n    ```\n    $ source venv/bin/activate\n    ```\n6.  Install the project codebase alongside the dependencies.\n    ```\n    (venv) $ poetry install\n    ```\n\n### For consumption\n\n#### From PyPI\n\n1.  Ensure that the required tools and dependencies are installed.\n    ```\n    $ sudo dnf install python3 python3-virtualenv python3-pip\n    ```\n2.  Create a virtual environment for installing project dependencies.\n    ```\n    $ virtualenv venv\n    ```\n3.  Activate the newly created virtual environment before proceeding.\n    ```\n    $ source venv/bin/activate\n    ```\n4.  Install the project codebase from Python Package Index.\n    ```\n    (venv) $ pip3 install expedite\n    ```\n\n#### From GitHub\n\n##### Nightly\n\n1.  Visit the **GitHub Actions** page of the project repository.\n    ```\n    https://github.com/gridhead/expedite/actions\n    ```\n2.  To get automated builds for **GNU/Linux distributions**, visit the following page.\n    ```\n    https://github.com/gridhead/expedite/actions/workflows/gnul.yml\n    ```\n3.  To get automated builds for **Microsoft Windows**, visit the following page.\n    ```\n    https://github.com/gridhead/expedite/actions/workflows/mswn.yml\n    ```\n4.  Please request for the builds if they are unavailable in the recent workflow runs.\n    ```\n    https://github.com/gridhead/expedite/issues\n    ```\n\n##### Stable\n\n1.  Visit the **GitHub Releases** page of the project repository.\n    ```\n    https://github.com/gridhead/expedite/releases\n    ```\n2.  Please file for bug reports and feature requests based on the stable releases.\n    ```\n    https://github.com/gridhead/expedite/issues\n    ```\n\n## Execution\n\n### Server\n\n1.  Ensure that the previously created virtual environment is activated.\n    ```\n    $ source venv/bin/activate\n    ```\n2.  Execute the following command to view the help topics of the project.\n    ```\n    (venv) $ ed-server --help\n    ```\n    ```\n    Usage: ed-server [OPTIONS]\n\n    Options:\n      -a, --addr TEXT           Set the interface for the service endpoint\n                                [default: 127.0.0.1]\n      -p, --port INTEGER RANGE  Set the port value for the service endpoint\n                                [default: 8080; 64<=x<=65535]\n      --version                 Show the version and exit.\n      --help                    Show this message and exit.\n    ```\n3.  Start the broker service using the following command.\n    ```\n    (venv) $ ed-server --addr 0.0.0.0 --p 9090\n    ```\n    1. The broker service will run on IPv4 addressing (i.e. `0.0.0.0`) and on a specific port (i.e. `9090`).\n    3. The broker service can be stopped by sending a keyboard interrupt (i.e. `Ctrl` + `C`) when done.\n4.  Note the IP address or the hostname for use by client connections.\n    ```\n    ip a\n    ```\n\n### Client\n\n1.  Ensure that the previously created virtual environment is activated.\n    ```\n    $ source venv/bin/activate\n    ```\n2.  Execute the following command to view the help topics of the project.\n    ```\n    (venv) $ ed-server --help\n    ```\n    ```\n    Usage: ed-client [OPTIONS] COMMAND [ARGS]...\n\n    Options:\n      -h, --host TEXT           Set the address for the service endpoint\n                                [required]\n      -t, --time INTEGER RANGE  Set the expiry period for participants  [default:\n                                15; 5<=x<=30]\n      -e, --endo TEXT           Set the identity of the opposing client\n      --version                 Show the version and exit.\n      --help                    Show this message and exit.\n\n    Commands:\n      recv  Collect file through an encrypted transfer\n      send  Deliver file through an encrypted transfer\n    ```\n\n#### Delivering\n\n1.  Execute the following command to view the help topics of the `SEND` subcommand.\n    ```\n    (venv) $ ed-client send --help\n    ```\n    ```\n    Usage: ed-client send [OPTIONS]\n\n      Deliver file through an encrypted transfer\n\n    Options:\n      -p, --pswd TEXT           Set the password for delivering encryption\n                                [default: 123972B4]\n      -f, --file PATH           Set the filepath for delivering to network\n                                [required]\n      -s, --size INTEGER RANGE  Set the unit size for file chunking (in B)\n                                [default: 262144; 1024<=x<=524288]\n      --help                    Show this message and exit.\n    ```\n2.  If the delivering client is joining the network **before** the collecting client, execute the following command.\n    ```\n    (venv) $ ed-client --host ws://localhost:9090 --time 30 send --file /path/to/file.extn --pswd expedite --size 131072\n    ```\n    ```\n    [2024-07-06 11:52:10] Expedite Client v0.1.0\n    [2024-07-06 11:52:10] Addr. ws://localhost:9090\n    [2024-07-06 11:52:10] Pass. expedite\n    [2024-07-06 11:52:10] Plan. DELIVERING\n    [2024-07-06 11:52:10] Wait. 30 seconds\n    [2024-07-06 11:52:10] Please share your acquired identity to begin interaction.\n    [2024-07-06 11:52:10] Attempting to connect to the network.\n    [2024-07-06 11:52:10] Successfully connected to the network.\n    [2024-07-06 11:52:10] You are now identified as 01276D06 in the network.\n    ```\n    1. The delivering client is attempting to connect to the broker service deployed at `ws://localhost:9090`.\n    2. The delivering client has an inactivity timeout for `30 seconds` beyond which it will automatically disconnect.\n    3. The delivering client has acquired the identity `01276D06` which can be used by the collecting client for discovery.\n    4. The delivering client is attempting to share the file named `file.extn` from the location `/path/to/file.extn`.\n    5. The delivering client is using the password `expedite` to encrypt the file contents with 128-bit AES encryption.\n    6. The delivering client is going to process chunks of size `131072 byte` or `128KiB` at a time for delivering.\n    7. The user of the delivering client must share their identity `01276D06` and password to start delivering process.\n    8. The delivering client will disconnect from the network if the collecting client opens the program in the wrong mode.\n3.  If the delivering client is joining the network **after** the collecting client, execute the following command.\n    ```\n    (venv) $ ed-client --host ws://localhost:9090 --time 30 --endo DEADCAFE send --file /path/to/file.extn --pswd expedite --size 131072\n    ```\n    ```\n    [2024-07-06 12:02:09] Expedite Client v0.1.0\n    [2024-07-06 12:02:09] Addr. ws://localhost:9090\n    [2024-07-06 12:02:09] Pass. expedite\n    [2024-07-06 12:02:09] Plan. DELIVERING\n    [2024-07-06 12:02:09] Wait. 30 seconds\n    [2024-07-06 12:02:09] Please wait for DEADCAFE to begin interaction.\n    [2024-07-06 12:02:09] Attempting to connect to the network.\n    [2024-07-06 12:02:09] Successfully connected to the network.\n    [2024-07-06 12:02:09] You are now identified as BA40BB0F in the network.\n    ```\n    1. The delivering client is attempting to connect to the broker service deployed at `ws://localhost:9090`.\n    2. The delivering client has an inactivity timeout for `30 seconds` beyond which it will automatically disconnect.\n    3. The delivering client has acquired the identity `BA40BB0F` which can be used by the collecting client for discovery.\n    4. The delivering client is attempting to share the file named `file.extn` from the location `/path/to/file.extn`.\n    5. The delivering client is using the password `expedite` to encrypt the file contents with 128-bit AES encryption.\n    6. The delivering client is going to process chunks of size `131072 byte` or `128KiB` at a time for delivering.\n    7. The user of the delivering client expects the collecting client with the identity `DEADCAFE` to start interaction.\n    8. The delivering client will disconnect from the network if the collecting client opens the program in the wrong mode.\n4.  If the average latency from the delivering client to the broker service is **below 100ms**, consider **increasing the chunking size** to **improve the stability** of the delivering process.\n5.  If the average latency from the delivering client to the broker service is **above 100ms**, consider **decreasing the chunking size** to **improve the performance** of the delivering process.\n6.  Let the delivering process complete or if needed, abort an ongoing delivering process by sending a keyboard interrupt (i.e. `Ctrl` + `C`).\n\n#### Collecting\n\n1.  Execute the following command to view the help topics of the `RECV` subcommand.\n    ```\n    Usage: ed-client recv [OPTIONS]\n\n      Collect file through an encrypted transfer\n\n    Options:\n      -p, --pswd TEXT  Set the password for collecting encryption  [required]\n      --help           Show this message and exit.\n    ```\n2.  If the collecting client is joining the network **before** the delivering client, execute the following command.\n    ```\n    (venv) $ ed-client --host ws://localhost:8080 --time 30 recv --pswd expedite\n    ```\n    ```\n    [2024-07-06 12:57:43] Expedite Client v0.1.0\n    [2024-07-06 12:57:43] Addr. ws://localhost:8080\n    [2024-07-06 12:57:43] Pass. expedite\n    [2024-07-06 12:57:43] Plan. COLLECTING\n    [2024-07-06 12:57:43] Wait. 30 seconds\n    [2024-07-06 12:57:43] Please share your acquired identity to begin interaction.\n    [2024-07-06 12:57:43] Attempting to connect to the network.\n    [2024-07-06 12:57:43] Successfully connected to the network.\n    [2024-07-06 12:57:43] You are now identified as 13755346 in the network.\n    ```\n    1. The collecting client is attempting to connect to the broker service deployed at `ws://localhost:9090`.\n    2. The collecting client has an inactivity timeout for `30 seconds` beyond which it will automatically disconnect.\n    3. The collecting client has acquired the identity `13755346` which can be used by the delivering client for discovery.\n    4. The collecting client is using the password `expedite` to decrypt the file contents with 128-bit AES encryption.\n    5. The user of the collecting client must share their identity `13755346` and password to start collecting process.\n    6. The collecting client will disconnect from the network if the delivering client opens the program in the wrong mode.\n3.  If the collecting client is joining the network **after** the delivering client, execute the following command.\n    ```\n    (venv) $ ed-client --host ws://localhost:8080 --time 30 --endo DEADCAFE recv --pswd expedite\n    ```\n    ```\n    [2024-07-06 12:55:30] Expedite Client v0.1.0\n    [2024-07-06 12:55:30] Addr. ws://localhost:8080\n    [2024-07-06 12:55:30] Pass. expedite\n    [2024-07-06 12:55:30] Plan. COLLECTING\n    [2024-07-06 12:55:30] Wait. 30 seconds\n    [2024-07-06 12:55:30] Please wait for DEADCAFE to begin interaction.\n    [2024-07-06 12:55:30] Attempting to connect to the network.\n    [2024-07-06 12:55:30] Successfully connected to the network.\n    [2024-07-06 12:55:30] You are now identified as 13AA7DB2 in the network.\n    ```\n    1. The collecting client is attempting to connect to the broker service deployed at `ws://localhost:9090`.\n    2. The collecting client has an inactivity timeout for `30 seconds` beyond which it will automatically disconnect.\n    3. The collecting client has acquired the identity `13AA7DB2` which can be used by the delivering client for discovery.\n    4. The collecting client is using the password `expedite` to decrypt the file contents with 128-bit AES encryption.\n    5. The user of the collecting client must share their identity `13AA7DB2` and password to start collecting process.\n    6. The collecting client will disconnect from the network if the delivering client opens the program in the wrong mode.\n4.  Let the collecting process complete or if needed, abort an ongoing collecting process by sending a keyboard interrupt (i.e. `Ctrl` + `C`).\n",
    "bugtrack_url": null,
    "license": "GPL-3.0-or-later",
    "summary": "Simple encrypted file transfer service for humans",
    "version": "0.1.0",
    "project_urls": {
        "Documentation": "https://github.com/gridhead/expedite/blob/main/README.md",
        "Homepage": "https://github.com/gridhead/expedite",
        "Repository": "https://github.com/gridhead/expedite"
    },
    "split_keywords": [
        "websockets",
        " file",
        " transfer",
        " delivering",
        " collecting"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "21dde7e7875ae1640a2b67c2f39e89b8c99be54c5bfd027fb0c81807b8c01350",
                "md5": "d0c60af524b88aae3cb7cb05c4e49552",
                "sha256": "c47d4f09287a0e57890143a1efd86252a968616f922cd21ff5559146b8323e56"
            },
            "downloads": -1,
            "filename": "expedite-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d0c60af524b88aae3cb7cb05c4e49552",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.14,>=3.10",
            "size": 568730,
            "upload_time": "2024-11-12T17:28:24",
            "upload_time_iso_8601": "2024-11-12T17:28:24.846071Z",
            "url": "https://files.pythonhosted.org/packages/21/dd/e7e7875ae1640a2b67c2f39e89b8c99be54c5bfd027fb0c81807b8c01350/expedite-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b2dc30122a5be523dafe7aac10e555a551bdc2afb362b36daa7a26d884d89acc",
                "md5": "f77adace1880638de439dca2b2c5f4c2",
                "sha256": "df90be5f057e963d7fd2fda9b438734407336b46d322b6386c0188cc3f418e79"
            },
            "downloads": -1,
            "filename": "expedite-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "f77adace1880638de439dca2b2c5f4c2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.14,>=3.10",
            "size": 523126,
            "upload_time": "2024-11-12T17:28:28",
            "upload_time_iso_8601": "2024-11-12T17:28:28.248297Z",
            "url": "https://files.pythonhosted.org/packages/b2/dc/30122a5be523dafe7aac10e555a551bdc2afb362b36daa7a26d884d89acc/expedite-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-12 17:28:28",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "gridhead",
    "github_project": "expedite",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "expedite"
}
        
Elapsed time: 0.29019s