├── .gitignore ├── .well-known ├── logo.png ├── ai-plugin.json └── openapi.yaml ├── .well-known-dev ├── logo.png ├── ai-plugin.json └── openapi.yaml ├── .env.template ├── src ├── handlers │ ├── transaction-handlers │ │ ├── index.ts │ │ ├── createWriteNFTMetadata │ │ │ └── index.ts │ │ ├── createCloseNFTMetadata │ │ │ └── index.ts │ │ ├── createTranferSol │ │ │ └── index.ts │ │ ├── createBuyNFT │ │ │ └── index.ts │ │ └── createTransferToken │ │ │ └── index.ts │ ├── getTransaction │ │ └── index.ts │ ├── getBalance │ │ └── index.ts │ ├── solana-pay │ │ ├── redirectToLinkPreview │ │ │ └── index.ts │ │ ├── tx-request-server │ │ │ └── index.ts │ │ ├── qrcodeLinkPreview │ │ │ └── index.ts │ │ └── createQrCode │ │ │ └── index.ts │ ├── getSignaturesForAddress │ │ └── index.ts │ ├── getTokenAccounts │ │ └── index.ts │ ├── getAssetsByOwner │ │ └── index.ts │ ├── getListedCollectionNFTs │ │ └── index.ts │ ├── getCollectionsByFloorPrice │ │ └── index.ts │ └── getAccountInfo │ │ └── index.ts ├── constants.ts ├── on-chain-metadata │ └── index.ts └── index.ts ├── langchain_examples ├── README.md └── python │ └── main.py ├── pyproject.toml ├── scripts └── send.ts ├── package.json ├── README.md ├── LICENSE └── poetry.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules/ 3 | yarn* 4 | tmp* 5 | -------------------------------------------------------------------------------- /.well-known/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngundotra/solana-gpt-plugin/HEAD/.well-known/logo.png -------------------------------------------------------------------------------- /.well-known-dev/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ngundotra/solana-gpt-plugin/HEAD/.well-known-dev/logo.png -------------------------------------------------------------------------------- /.env.template: -------------------------------------------------------------------------------- 1 | HELIUS_API_KEY=your-api-key 2 | HYPERSPACE_API_KEY=your-api-key 3 | ON_CHAIN_METADATA_PROGRAM=7KeydSrrr1vLiWCKrvNghTmRC5tjktXL1X9HVuRn7W65 4 | DEV=true -------------------------------------------------------------------------------- /src/handlers/transaction-handlers/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "express"; 2 | export type TransactionHandler = ( 3 | req: Request 4 | ) => Promise<{ transaction: string }>; 5 | -------------------------------------------------------------------------------- /src/handlers/getTransaction/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { CONNECTION } from "../../constants"; 3 | 4 | export async function getTransaction(req: Request, res: Response) { 5 | const signature = req.body.signature; 6 | const transaction = await CONNECTION.getTransaction(signature, { 7 | maxSupportedTransactionVersion: 2, 8 | }); 9 | res.status(200).send(JSON.stringify(transaction)); 10 | } 11 | -------------------------------------------------------------------------------- /src/handlers/getBalance/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { PublicKey, LAMPORTS_PER_SOL } from "@solana/web3.js"; 3 | import { CONNECTION } from "../../constants"; 4 | 5 | export async function getBalance(req: Request, res: Response) { 6 | const { address } = req.body; 7 | const balance = await CONNECTION.getBalance(new PublicKey(address)); 8 | res.status(200).send({ sol: balance / LAMPORTS_PER_SOL }); 9 | } 10 | -------------------------------------------------------------------------------- /langchain_examples/README.md: -------------------------------------------------------------------------------- 1 | # Langchain Usage 2 | 3 | Langchain has support for using ChatGPTs in their Agent via their `tool` interface. 4 | 5 | We have provided examples below 6 | 7 | ### Python Example 8 | 9 | To run the python example, you will have to have an OpenAI key (you do not need GPT-4 access to run this example). 10 | 11 | ```bash 12 | poetry install 13 | cd langchain_examples 14 | OPENAI_API_KEY=sk-xxxxxxx DEV=true python python/main.py 15 | ``` -------------------------------------------------------------------------------- /src/handlers/transaction-handlers/createWriteNFTMetadata/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "express"; 2 | import { CONNECTION } from "../../../constants"; 3 | import { createWriteNFTMetadataTx } from "../../../on-chain-metadata"; 4 | 5 | export async function createWriteNFTMetadata(req: Request) { 6 | const { image } = req.query; 7 | const { account: owner } = req.body; 8 | return await createWriteNFTMetadataTx(CONNECTION, owner as string, { 9 | image, 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "solana-gpt-plugin" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["ngundotra "] 6 | license = "Apache-2.0" 7 | readme = "README.md" 8 | packages = [{include = "solana_gpt_plugin"}] 9 | 10 | [tool.poetry.dependencies] 11 | python = "^3.9" 12 | langchain = "^0.0.136" 13 | requests = "^2.28.2" 14 | openai = "^0.27.4" 15 | 16 | 17 | [build-system] 18 | requires = ["poetry-core"] 19 | build-backend = "poetry.core.masonry.api" 20 | -------------------------------------------------------------------------------- /src/handlers/transaction-handlers/createCloseNFTMetadata/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "express"; 2 | 3 | import { createCloseNFTMetadataTx } from "../../../on-chain-metadata"; 4 | import { CONNECTION } from "../../../constants"; 5 | 6 | export async function createCloseNFTMetadata(req: Request) { 7 | const { account } = req.query; 8 | const { account: owner } = req.body; 9 | return await createCloseNFTMetadataTx( 10 | CONNECTION, 11 | owner as string, 12 | account as string 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /src/handlers/solana-pay/redirectToLinkPreview/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { encode } from "querystring"; 3 | 4 | import { SELF_URL, TransactionEndpoints } from "../../../constants"; 5 | 6 | export function makeRedirectToLinkPreview(methodName: TransactionEndpoints) { 7 | return async (req: Request, res: Response) => { 8 | let encoded = encode(Object(req.body)); 9 | res.status(200).send({ 10 | linkToSign: `${SELF_URL}/page/${methodName}?${encoded}`, 11 | }); 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /src/handlers/solana-pay/tx-request-server/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { 3 | SOLANA_PAY_LABEL, 4 | TX_HANDLERS, 5 | TransactionEndpoints, 6 | } from "../../../constants"; 7 | 8 | export async function respondToSolanaPayGet(req: Request, res: Response) { 9 | res.status(200).json({ 10 | label: SOLANA_PAY_LABEL, 11 | icon: "https://solanapay.com/src/img/branding/Solanapay.com/downloads/gradient.svg", 12 | }); 13 | } 14 | 15 | export function makeRespondToSolanaPayPost(methodName: TransactionEndpoints) { 16 | return async (req: Request, res: Response) => { 17 | console.log("Tx requested: ", methodName, req.query); 18 | 19 | let result = await TX_HANDLERS[methodName](req); 20 | res.status(200).json(result); 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /src/handlers/getSignaturesForAddress/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { PublicKey } from "@solana/web3.js"; 3 | import { CONNECTION } from "../../constants"; 4 | 5 | export async function getSignaturesForAddress(req: Request, res: Response) { 6 | const accountAddress = new PublicKey(req.body.address); 7 | const signatures = await CONNECTION.getSignaturesForAddress(accountAddress, { 8 | limit: 11, 9 | before: req.body.beforeSignature ?? null, 10 | until: req.body.untilSignature ?? null, 11 | }); 12 | res.status(200).send({ 13 | hasMore: signatures.length === 11, 14 | nextPage: 15 | signatures.length === 11 16 | ? { beforeSignature: signatures[10].signature } 17 | : null, 18 | signatures: JSON.stringify(signatures), 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /.well-known-dev/ai-plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "schema_version": "v1", 3 | "name_for_model": "solana", 4 | "name_for_human": "Solana RPC Plugin", 5 | "description_for_model": "Plugin for querying the Solana blockchain to find answers to questions and retrieve relevant information. Use it whenever a user asks something that might be related to their Solana account.", 6 | "description_for_human": "Read modified Solana blockchain data (different from a Solana RPC).", 7 | "auth": { 8 | "type": "none" 9 | }, 10 | "api": { 11 | "type": "openapi", 12 | "url": "http://localhost:3333/.well-known/openapi.yaml", 13 | "has_user_authentication": false 14 | }, 15 | "logo_url": "http://localhost:3333/.well-known/logo.png", 16 | "contact_email": "noah.gundotra@solana.com", 17 | "legal_info_url": "http://example.com/legal-info" 18 | } -------------------------------------------------------------------------------- /.well-known/ai-plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "schema_version": "v1", 3 | "name_for_model": "solana", 4 | "name_for_human": "Solana RPC Plugin", 5 | "description_for_model": "Plugin for querying the Solana blockchain to find answers to questions and retrieve relevant information. Use it whenever a user asks something that might be related to their Solana account.", 6 | "description_for_human": "Read modified Solana blockchain data (different from a Solana RPC).", 7 | "auth": { 8 | "type": "none" 9 | }, 10 | "api": { 11 | "type": "openapi", 12 | "url": "https://solana-gpt-plugin.onrender.com/.well-known/openapi.yaml", 13 | "has_user_authentication": false 14 | }, 15 | "logo_url": "https://solana-gpt-plugin.onrender.com/.well-known/logo.png", 16 | "contact_email": "noah.gundotra@solana.com", 17 | "legal_info_url": "http://example.com/legal-info" 18 | } -------------------------------------------------------------------------------- /src/handlers/getTokenAccounts/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { PublicKey } from "@solana/web3.js"; 3 | import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; 4 | import { CONNECTION } from "../../constants"; 5 | 6 | type TokenInfo = { 7 | mint: string; 8 | amount: string; 9 | }; 10 | 11 | export async function getTokenAccounts(req: Request, res: Response) { 12 | let result = await CONNECTION.getParsedTokenAccountsByOwner( 13 | new PublicKey(req.body.address), 14 | { programId: TOKEN_PROGRAM_ID }, 15 | "confirmed" 16 | ); 17 | const tokenInfos: Omit[] = []; 18 | for (const accountInfo of result.value) { 19 | const info = accountInfo.account.data.parsed.info; 20 | if (info.tokenAmount.uiAmount !== 0) { 21 | tokenInfos.push({ 22 | mint: info.mint.toString(), 23 | amount: info.tokenAmount.uiAmountString, 24 | }); 25 | } 26 | } 27 | res.status(200).json(tokenInfos); 28 | } 29 | -------------------------------------------------------------------------------- /src/handlers/transaction-handlers/createTranferSol/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "express"; 2 | import { 3 | PublicKey, 4 | Transaction, 5 | SystemProgram, 6 | LAMPORTS_PER_SOL, 7 | } from "@solana/web3.js"; 8 | import { BN } from "@coral-xyz/anchor"; 9 | import { CONNECTION } from "../../../constants"; 10 | 11 | export async function createTransferSol(req: Request) { 12 | const { destination, amount } = req.query; 13 | const { account: sender } = req.body; 14 | 15 | const tx = new Transaction(); 16 | tx.add( 17 | SystemProgram.transfer({ 18 | fromPubkey: new PublicKey(sender), 19 | toPubkey: new PublicKey(destination as string), 20 | lamports: Math.floor(parseFloat(amount as string) * LAMPORTS_PER_SOL), 21 | }) 22 | ); 23 | tx.feePayer = new PublicKey(sender); 24 | tx.recentBlockhash = (await CONNECTION.getLatestBlockhash()).blockhash; 25 | 26 | return { 27 | transaction: tx 28 | .serialize({ requireAllSignatures: false }) 29 | .toString("base64"), 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /src/handlers/transaction-handlers/createBuyNFT/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "express"; 2 | 3 | import { base64 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; 4 | 5 | import { HYPERSPACE_CLIENT } from "../../../constants"; 6 | 7 | async function hyperspaceCreateBuyTx( 8 | buyer: string, 9 | token: string, 10 | price: number 11 | ) { 12 | let transactionData = await HYPERSPACE_CLIENT.createBuyTx({ 13 | buyerAddress: buyer, 14 | tokenAddress: token, 15 | price: price, 16 | // Take no fee on making tx for ChatGPT users 17 | buyerBroker: "", 18 | buyerBrokerBasisPoints: 0, 19 | }); 20 | console.log("Transaction Data", transactionData); 21 | const txBytes = base64.encode( 22 | Buffer.from(transactionData.createBuyTx.stdBuffer!) 23 | ); 24 | console.log("Transaction bytes:", txBytes); 25 | 26 | return { 27 | transaction: txBytes, 28 | }; 29 | } 30 | 31 | export async function createBuyNFT(req: Request) { 32 | const { token, price } = req.query; 33 | const { account: buyer } = req.body; 34 | return await hyperspaceCreateBuyTx( 35 | buyer as string, 36 | token as string, 37 | Number.parseFloat(price as string) 38 | ); 39 | } 40 | -------------------------------------------------------------------------------- /src/handlers/getAssetsByOwner/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { PublicKey } from "@solana/web3.js"; 3 | import { HELIUS_URL } from "../../constants"; 4 | import axios from "axios"; 5 | 6 | /** 7 | * Returns the data from the Metaplex Read API 8 | * @param address 9 | * @param page (optional) page number 10 | * @param limit (optional) set to 5 to prevent overflowing GPT context window 11 | * @returns 12 | */ 13 | const _getAssetsByOwner = async ( 14 | address: string, 15 | page: number = 1, 16 | limit: number = 5 17 | ) => { 18 | const sortBy = { 19 | sortBy: "created", 20 | sortDirection: "asc", 21 | }; 22 | const before = ""; 23 | const after = ""; 24 | const { data } = await axios.post(HELIUS_URL, { 25 | jsonrpc: "2.0", 26 | id: "my-id", 27 | method: "getAssetsByOwner", 28 | params: [address, sortBy, limit, page, before, after], 29 | }); 30 | return data.result; 31 | }; 32 | 33 | export async function getAssetsByOwner(req: Request, res: Response) { 34 | const accountAddress = new PublicKey(req.body.address); 35 | const assets = await _getAssetsByOwner(accountAddress.toString()); 36 | res.status(200).send({ message: JSON.stringify(assets) }); 37 | } 38 | -------------------------------------------------------------------------------- /src/handlers/solana-pay/qrcodeLinkPreview/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { encode } from "querystring"; 3 | 4 | import { 5 | SELF_URL, 6 | TX_DESCRIPTIONS, 7 | TransactionEndpoints, 8 | } from "../../../constants"; 9 | 10 | function createOpenGraphMetaPage( 11 | methodName: string, 12 | encoded: string, 13 | description: string 14 | ): string { 15 | let qrCodeUri = new URL(`${SELF_URL}/qr/${methodName}?${encoded}`); 16 | return ` 17 | 18 | 19 | 20 | 21 | `; 22 | } 23 | 24 | export function makeQrcodeLinkPreview(methodName: TransactionEndpoints) { 25 | return async (req: Request, res: Response) => { 26 | console.log("OpenGraph metapage requested:", methodName, req.query); 27 | 28 | let description = TX_DESCRIPTIONS[methodName]; 29 | res 30 | .status(200) 31 | .send( 32 | createOpenGraphMetaPage( 33 | methodName, 34 | encode(Object(req.query)), 35 | description 36 | ) 37 | ); 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /src/handlers/transaction-handlers/createTransferToken/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "express"; 2 | import { PublicKey, Transaction } from "@solana/web3.js"; 3 | import { 4 | createTransferInstruction, 5 | getAssociatedTokenAddressSync, 6 | } from "@solana/spl-token"; 7 | import { CONNECTION } from "../../../constants"; 8 | 9 | export async function createTransferToken(req: Request) { 10 | const { mint, destination, amount } = req.query; 11 | const { account: sender } = req.body; 12 | 13 | const sourceToken = getAssociatedTokenAddressSync( 14 | new PublicKey(mint as string), 15 | new PublicKey(sender) 16 | ); 17 | const destinationToken = getAssociatedTokenAddressSync( 18 | new PublicKey(mint as string), 19 | new PublicKey(destination as string) 20 | ); 21 | 22 | const tx = new Transaction(); 23 | tx.add( 24 | createTransferInstruction( 25 | sourceToken, 26 | destinationToken, 27 | sender, 28 | Number(amount as string) 29 | ) 30 | ); 31 | tx.feePayer = new PublicKey(sender); 32 | tx.recentBlockhash = (await CONNECTION.getLatestBlockhash()).blockhash; 33 | 34 | return { 35 | transaction: tx 36 | .serialize({ requireAllSignatures: false }) 37 | .toString("base64"), 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /langchain_examples/python/main.py: -------------------------------------------------------------------------------- 1 | from langchain.chat_models import ChatOpenAI 2 | from langchain.agents import load_tools, initialize_agent 3 | from langchain.agents import AgentType 4 | from langchain.tools import AIPluginTool 5 | 6 | 7 | if __name__ == '__main__': 8 | # Setup environment variables 9 | import os 10 | DEV_ENV = os.environ['DEV'] == 'true' 11 | URL = "http://localhost:3333" if DEV_ENV else "https://solana-gpt-plugin.onrender.com" 12 | 13 | llm = ChatOpenAI(temperature=0) 14 | 15 | # AI Agent does best when it only has one available tool 16 | # to engage with URLs 17 | tools = load_tools(["requests_post"]) 18 | 19 | # AIPluginTool only fetches and returns the openapi.yaml linked to in /.well-known/ai-plugin.json 20 | # This may need some more work to avoid blowing up LLM context window 21 | tool = AIPluginTool.from_plugin_url(URL + "/.well-known/ai-plugin.json") 22 | tools += [tool] 23 | 24 | # Setup an agent to answer the question without further human feedback 25 | agent_chain = initialize_agent( 26 | tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) 27 | 28 | # Ask the question, and the agent loop 29 | agent_chain.run( 30 | "How many lamports does 8fbqVvpK3Dj7fdP2c8JJhtD7Zy3n9qtwAeGfbkgPu625 have?") 31 | -------------------------------------------------------------------------------- /scripts/send.ts: -------------------------------------------------------------------------------- 1 | import { Connection, Transaction, Keypair, Signer } from "@solana/web3.js"; 2 | import { readFileSync } from "fs"; 3 | 4 | const connection = new Connection("https://api.mainnet-beta.solana.com"); 5 | async function simulate(base64Transaction: string, signers: Signer[]) { 6 | const transaction = Transaction.from( 7 | Buffer.from(base64Transaction, "base64") 8 | ); 9 | return await connection.simulateTransaction(transaction, signers); 10 | } 11 | 12 | function parse(): { 13 | keypair: Keypair; 14 | base64Transaction: string; 15 | } { 16 | let args = process.argv.slice(2); 17 | if (args.length !== 4 || args[0] !== "--tx" || args[2] !== "--keypair") { 18 | console.error( 19 | "Usage: ts-node scripts/send.ts --tx --keypair " 20 | ); 21 | process.exit(1); 22 | } 23 | 24 | const base64Transaction = args[1]; 25 | const keypairPath = args[3]; 26 | 27 | const keypair = Keypair.fromSecretKey( 28 | new Uint8Array(JSON.parse(readFileSync(keypairPath, "utf-8"))) 29 | ); 30 | return { keypair, base64Transaction }; 31 | } 32 | 33 | async function main() { 34 | let { keypair, base64Transaction } = parse(); 35 | let simulationResult = await simulate(base64Transaction, [keypair]); 36 | console.log(simulationResult); 37 | } 38 | 39 | main(); 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "solana-gpt-plugin", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "repository": "https://github.com/ngundotra/solana-gpt-plugin.git", 6 | "author": "ngundotra ", 7 | "license": "Apache-2.0", 8 | "private": false, 9 | "dependencies": { 10 | "@coral-xyz/anchor": "^0.27.0", 11 | "@metaplex-foundation/mpl-bubblegum": "^0.6.2", 12 | "@metaplex-foundation/mpl-token-metadata": "^2.10.0", 13 | "@solana/pay": "^0.2.5", 14 | "@solana/spl-account-compression": "^0.1.7", 15 | "@solana/spl-token": "^0.3.7", 16 | "@solana/web3.js": "^1.75.0", 17 | "@types/node": "^18.15.11", 18 | "axios": "^1.3.5", 19 | "body-parser": "^1.20.2", 20 | "cors": "^2.8.5", 21 | "cross-fetch": "^3.1.5", 22 | "dotenv": "^16.0.3", 23 | "express": "^4.18.2", 24 | "hyperspace-client-js": "^1.4.15", 25 | "node-fetch": "^3.3.1", 26 | "qrcode": "^1.5.1", 27 | "sharp": "^0.32.0", 28 | "typescript": "^5.0.4" 29 | }, 30 | "devDependencies": { 31 | "@types/axios": "^0.14.0", 32 | "@types/cors": "^2.8.13", 33 | "@types/express": "^4.17.17", 34 | "@types/qrcode": "^1.5.0", 35 | "@types/sharp": "^0.31.1", 36 | "ts-node": "^10.9.1" 37 | }, 38 | "engines": { 39 | "node": ">=16.0.0" 40 | }, 41 | "scripts": { 42 | "start": "ts-node src/index.ts", 43 | "dev": "DEV=true ts-node src/index.ts" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/handlers/solana-pay/createQrCode/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { encode } from "querystring"; 3 | 4 | import { encodeURL } from "@solana/pay"; 5 | import * as qrcode from "qrcode"; 6 | import sharp from "sharp"; 7 | 8 | import { 9 | SELF_URL, 10 | SOLANA_PAY_LABEL, 11 | TX_DESCRIPTIONS, 12 | TransactionEndpoints, 13 | } from "../../../constants"; 14 | 15 | async function createQRCodePng( 16 | methodName: string, 17 | encoded: string 18 | ): Promise { 19 | let uri = new URL(`${SELF_URL}/sign/${methodName}?${encoded}`); 20 | let solanaPayUrl = encodeURL({ 21 | link: uri, 22 | label: SOLANA_PAY_LABEL, 23 | }); 24 | console.log("Solana pay url", solanaPayUrl.toString()); 25 | 26 | let dataUrl = await qrcode.toDataURL(solanaPayUrl.toString()); 27 | const base64Data = dataUrl.replace(/^data:image\/png;base64,/, ""); 28 | const imageBuffer = Buffer.from(base64Data, "base64"); 29 | return await sharp(imageBuffer) 30 | .extend({ 31 | extendWith: "background", 32 | background: "#ffffff", 33 | left: 110, 34 | right: 110, 35 | }) 36 | .toBuffer(); 37 | } 38 | 39 | export function makeCreateQrCode(methodName: TransactionEndpoints) { 40 | return async (req: Request, res: Response) => { 41 | console.log("QR code requested:", methodName, req.query); 42 | 43 | let buffer = await createQRCodePng(methodName, encode(Object(req.query))); 44 | res.status(200).send(buffer); 45 | }; 46 | } 47 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import { Connection } from "@solana/web3.js"; 3 | import { HyperspaceClient } from "hyperspace-client-js"; 4 | import { createBuyNFT } from "./handlers/transaction-handlers/createBuyNFT"; 5 | import { TransactionHandler } from "./handlers/transaction-handlers"; 6 | import { createWriteNFTMetadata } from "./handlers/transaction-handlers/createWriteNFTMetadata"; 7 | import { createCloseNFTMetadata } from "./handlers/transaction-handlers/createCloseNFTMetadata"; 8 | import { createTransferToken } from "./handlers/transaction-handlers/createTransferToken"; 9 | import { createTransferSol } from "./handlers/transaction-handlers/createTranferSol"; 10 | 11 | export const APP = express(); 12 | export const PORT = process.env.PORT || 3333; 13 | 14 | export const SOLANA_RPC_URL = "https://api.mainnet-beta.solana.com"; 15 | export const CONNECTION = new Connection(SOLANA_RPC_URL); 16 | 17 | // Internal Solana Pay constants 18 | export const SOLANA_PAY_LABEL = "Solana GPT Plugin"; 19 | export const TRANSACTION_ENDPOINTS = [ 20 | "createBuyNFT", 21 | "createWriteNFTMetadata", 22 | "createCloseNFTMetadata", 23 | ]; 24 | export type TransactionEndpoints = (typeof TRANSACTION_ENDPOINTS)[number]; 25 | export const TX_DESCRIPTIONS: Record = { 26 | createBuyNFT: "Sign to Buy NFT", 27 | createWriteNFTMetadata: "Sign to Write NFT Metadata", 28 | createCloseNFTMetadata: "Sign to Close NFT Metadata", 29 | createTransferToken: "Sign to Transfer Token", 30 | createTransferSol: "Sign to Transfer Sol", 31 | }; 32 | export const TX_HANDLERS: Record = { 33 | createBuyNFT: createBuyNFT, 34 | createWriteNFTMetadata: createWriteNFTMetadata, 35 | createCloseNFTMetadata: createCloseNFTMetadata, 36 | createTransferToken: createTransferToken, 37 | createTransferSol: createTransferSol, 38 | }; 39 | 40 | // Inferred Constants 41 | export let HELIUS_URL: string; 42 | export let SELF_URL: string; 43 | export let HYPERSPACE_CLIENT: HyperspaceClient; 44 | 45 | export default function index() { 46 | HELIUS_URL = `https://rpc.helius.xyz/?api-key=${process.env.HELIUS_API_KEY}`; 47 | if (process.env.DEV === "true") { 48 | SELF_URL = `http://localhost:${PORT}`; 49 | } else { 50 | SELF_URL = "https://solana-gpt-plugin.onrender.com"; 51 | } 52 | 53 | HYPERSPACE_CLIENT = new HyperspaceClient( 54 | process.env.HYPERSPACE_API_KEY as string 55 | ); 56 | } 57 | -------------------------------------------------------------------------------- /src/handlers/getListedCollectionNFTs/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { HYPERSPACE_CLIENT } from "../../constants"; 3 | 4 | type NFTListing = { 5 | price: number; 6 | image: string; 7 | token: string; 8 | }; 9 | 10 | type ListedNFTResponse = { 11 | listings: NFTListing[]; 12 | hasMore: boolean; 13 | }; 14 | 15 | async function hyperspaceGetListedCollectionNFTs( 16 | projectId: string, 17 | pageSize: number = 5, 18 | priceOrder: string = "DESC" 19 | ): Promise { 20 | let listedNFTs: NFTListing[] = []; 21 | let hasMore = true; 22 | let pageNumber = 1; 23 | while (listedNFTs.length < pageSize && hasMore) { 24 | let results = await HYPERSPACE_CLIENT.getMarketplaceSnapshot({ 25 | condition: { 26 | projects: [{ project_id: projectId }], 27 | onlyListings: true, 28 | }, 29 | orderBy: { 30 | field_name: "lowest_listing_price", 31 | sort_order: priceOrder as any, 32 | }, 33 | paginationInfo: { 34 | page_number: pageNumber, 35 | }, 36 | }); 37 | 38 | let snaps = results.getMarketPlaceSnapshots.market_place_snapshots!; 39 | let orderedListings = snaps.sort( 40 | (a, b) => a.lowest_listing_mpa!.price! - b.lowest_listing_mpa!.price! 41 | ); 42 | 43 | pageNumber += 1; 44 | let crucialInfo: NFTListing[] = orderedListings 45 | .filter( 46 | (arr) => 47 | // We filter out Magic Eden's marketplace because they 48 | // require an API key to make purchases programmatically 49 | arr.lowest_listing_mpa?.marketplace_program_id !== 50 | "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K" 51 | ) 52 | .map((arr) => { 53 | return { 54 | price: arr.lowest_listing_mpa!.price!, 55 | token: arr.token_address, 56 | image: arr.meta_data_img ?? "", 57 | marketplace: arr.lowest_listing_mpa!.marketplace_program_id!, 58 | }; 59 | }); 60 | listedNFTs = listedNFTs.concat(crucialInfo); 61 | hasMore = results.getMarketPlaceSnapshots.pagination_info.has_next_page; 62 | } 63 | 64 | return { 65 | listings: listedNFTs.slice(0, pageSize), 66 | hasMore, 67 | }; 68 | } 69 | 70 | export async function getListedCollectionNFTs(req: Request, res: Response) { 71 | const { projectId, pageSize, priceOrder } = req.body; 72 | const result = await hyperspaceGetListedCollectionNFTs( 73 | projectId, 74 | pageSize, 75 | priceOrder 76 | ); 77 | res.status(200).send(JSON.stringify(result)); 78 | } 79 | -------------------------------------------------------------------------------- /src/handlers/getCollectionsByFloorPrice/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes"; 3 | import { HYPERSPACE_CLIENT } from "../../constants"; 4 | 5 | type CollectionStats = { 6 | id: string; 7 | desc: string; 8 | img: string; 9 | website: string; 10 | floor_price: number; 11 | }; 12 | 13 | /** 14 | * Provides a feed of NFT collections that the user can afford. 15 | */ 16 | async function hyperspaceGetCollectionsByFloorPrice( 17 | maxFloorPrice: number | undefined, 18 | minFloorPrice: number | undefined, 19 | pageSize: number = 5, 20 | orderBy: string = "DESC", 21 | humanReadableSlugs: boolean = false 22 | ) { 23 | let pageNumber = 1; 24 | let results: CollectionStats[] = []; 25 | let hasMore = true; 26 | while (results.length < pageSize && hasMore) { 27 | let projects = await HYPERSPACE_CLIENT.getProjects({ 28 | condition: { 29 | floorPriceFilter: { 30 | min: minFloorPrice ?? null, 31 | max: maxFloorPrice ?? null, 32 | }, 33 | }, 34 | orderBy: { 35 | field_name: "floor_price", 36 | sort_order: orderBy as any, 37 | }, 38 | paginationInfo: { 39 | page_size: 512, 40 | page_number: pageNumber, 41 | }, 42 | }); 43 | 44 | let stats: CollectionStats[] = 45 | projects.getProjectStats.project_stats 46 | ?.filter((project) => { 47 | return ( 48 | (project.volume_7day ?? 0 > 0) && (project.floor_price ?? 0 > 0) 49 | ); 50 | }) 51 | .map((project) => { 52 | return { 53 | id: project.project_id, 54 | desc: project.project?.display_name ?? "", 55 | img: project.project?.img_url ?? "", 56 | website: project.project?.website ?? "", 57 | floor_price: project.floor_price ?? 0, 58 | }; 59 | }) ?? []; 60 | 61 | if (humanReadableSlugs) { 62 | stats = stats?.filter((stat) => { 63 | try { 64 | bs58.decode(stat.id!); 65 | return false; 66 | } catch (err) { 67 | return true; 68 | } 69 | }); 70 | } 71 | pageNumber += 1; 72 | console.log("\tFetching collection info... ", stats.length, pageNumber); 73 | results = results.concat(stats!); 74 | hasMore = projects.getProjectStats.pagination_info.has_next_page; 75 | } 76 | 77 | return { 78 | projects: results.slice(0, pageSize), 79 | hasMore: hasMore, 80 | }; 81 | } 82 | 83 | export async function getCollectionsByFloorPrice(req: Request, res: Response) { 84 | const { maxFloorPrice, minFloorPrice, orderBy, pageSize, humanReadable } = 85 | req.body; 86 | const result = await hyperspaceGetCollectionsByFloorPrice( 87 | maxFloorPrice, 88 | minFloorPrice, 89 | pageSize, 90 | orderBy, 91 | humanReadable 92 | ); 93 | res.status(200).send(JSON.stringify(result)); 94 | } 95 | -------------------------------------------------------------------------------- /src/handlers/getAccountInfo/index.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from "express"; 2 | import { PublicKey, Connection, Keypair } from "@solana/web3.js"; 3 | import { 4 | Program, 5 | AnchorProvider, 6 | BorshAccountsCoder, 7 | BN, 8 | } from "@coral-xyz/anchor"; 9 | import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet"; 10 | 11 | import { CONNECTION } from "../../constants"; 12 | 13 | /** 14 | * Replace Anchor data (BNs, PublicKeys) with stringified data 15 | * @param obj 16 | * @returns 17 | */ 18 | function stringifyAnchorObject(obj: any): any { 19 | if (obj instanceof BN) { 20 | return obj.toString(); 21 | } else if (obj instanceof PublicKey) { 22 | return obj.toString(); 23 | } 24 | 25 | if (typeof obj === "object" && obj !== null) { 26 | return Object.keys(obj).reduce((acc: Record, key: string) => { 27 | acc[key] = stringifyAnchorObject(obj[key]); 28 | return acc; 29 | }, {}); 30 | } 31 | 32 | return obj; 33 | } 34 | 35 | /** 36 | * Returns accountInfo or extends it with deserialized account data if the account is a program account of an Anchor program 37 | * @param accountAddress 38 | * @returns 39 | */ 40 | async function getParsedAccountInfo( 41 | connection: Connection, 42 | accountAddress: PublicKey 43 | ): Promise { 44 | // TODO: copy the explorer code here that manually deserializes a bunch of stuff, like Mango & Pyth 45 | 46 | const accountInfo = await connection.getAccountInfo(accountAddress); 47 | // If acccount is not a program, check for Anchor IDL 48 | if (accountInfo?.owner && !accountInfo.executable) { 49 | try { 50 | const program = await Program.at( 51 | accountInfo.owner, 52 | new AnchorProvider(connection, new NodeWallet(Keypair.generate()), { 53 | commitment: "confirmed", 54 | }) 55 | ); 56 | 57 | // Search through Anchor IDL for the account type 58 | const rawData = accountInfo.data; 59 | const coder = new BorshAccountsCoder(program.idl); 60 | const accountDefTmp = program.idl.accounts?.find((accountType: any) => 61 | (rawData as Buffer) 62 | .slice(0, 8) 63 | .equals(BorshAccountsCoder.accountDiscriminator(accountType.name)) 64 | ); 65 | 66 | // If we found the Anchor IDL type, decode the account state 67 | if (accountDefTmp) { 68 | const accountDef = accountDefTmp; 69 | 70 | // Decode the anchor data & stringify the data 71 | const decodedAccountData = stringifyAnchorObject( 72 | coder.decode(accountDef.name, rawData) 73 | ); 74 | 75 | // Inspect the anchor data for fun 🤪 76 | console.log(decodedAccountData); 77 | 78 | let payload = { 79 | ...accountInfo, 80 | extended: JSON.stringify(decodedAccountData), 81 | }; 82 | return payload; 83 | } 84 | } catch (err) { 85 | console.log(err); 86 | } 87 | } 88 | return accountInfo || {}; 89 | } 90 | 91 | export async function getAccountInfo(req: Request, res: Response) { 92 | const accountAddress = new PublicKey(req.body.address); 93 | const accountInfo = await getParsedAccountInfo(CONNECTION, accountAddress); 94 | res.status(200).send({ message: JSON.stringify(accountInfo) }); 95 | } 96 | -------------------------------------------------------------------------------- /src/on-chain-metadata/index.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@coral-xyz/anchor"; 2 | import { Connection } from "@solana/web3.js"; 3 | 4 | type SolanaPayTx = { 5 | transaction: string; 6 | message?: string; 7 | }; 8 | 9 | /** 10 | * Need this to fake a wallet with only a publicKey for the anchor provider 11 | */ 12 | class FakeWallet { 13 | publicKey: anchor.web3.PublicKey; 14 | constructor(publicKey: anchor.web3.PublicKey) { 15 | this.publicKey = publicKey; 16 | } 17 | 18 | async signTransaction< 19 | T extends anchor.web3.Transaction | anchor.web3.VersionedTransaction 20 | >(tx: T): Promise { 21 | return tx; 22 | } 23 | 24 | async signAllTransactions< 25 | T extends anchor.web3.Transaction | anchor.web3.VersionedTransaction 26 | >(txs: T[]): Promise { 27 | return txs; 28 | } 29 | } 30 | 31 | export async function createWriteNFTMetadataTx( 32 | connection: Connection, 33 | owner: string, 34 | metadata: Object 35 | ): Promise { 36 | const program = await anchor.Program.at( 37 | process.env.ON_CHAIN_METADATA_PROGRAM as string, 38 | new anchor.AnchorProvider( 39 | connection, 40 | new FakeWallet(new anchor.web3.PublicKey(owner)), 41 | {} 42 | ) 43 | ); 44 | 45 | let metadataBytes = JSON.stringify(metadata); 46 | console.log(metadataBytes.length); 47 | if (metadataBytes.length > 500) { 48 | throw new Error("Metadata too large: " + metadataBytes.length); 49 | } 50 | 51 | const metadataKp = anchor.web3.Keypair.generate(); 52 | 53 | // Create metadata 54 | let initIx = await program.methods 55 | .initialize(new anchor.BN(metadataBytes.length)) 56 | .accounts({ 57 | owner, 58 | metadata: metadataKp.publicKey, 59 | }) 60 | .signers([metadataKp]) 61 | .instruction(); 62 | 63 | // Write metadata 64 | let writeIx = await program.methods 65 | .write(new anchor.BN(0), Buffer.from(metadataBytes)) 66 | .accounts({ 67 | metadata: metadataKp.publicKey, 68 | owner, 69 | }) 70 | .instruction(); 71 | 72 | // Validate metadata 73 | let validateIx = await program.methods 74 | .validate() 75 | .accounts({ metadata: metadataKp.publicKey }) 76 | .instruction(); 77 | 78 | let tx = new anchor.web3.Transaction(); 79 | tx = tx.add(initIx).add(writeIx).add(validateIx); 80 | tx.recentBlockhash = (await connection.getRecentBlockhash()).blockhash; 81 | tx.feePayer = new anchor.web3.PublicKey(owner); 82 | tx.partialSign(metadataKp); 83 | 84 | return { 85 | transaction: tx 86 | .serialize({ requireAllSignatures: false }) 87 | .toString("base64"), 88 | }; 89 | } 90 | 91 | export async function createCloseNFTMetadataTx( 92 | connection: Connection, 93 | owner: string, 94 | account: string 95 | ): Promise { 96 | const program = await anchor.Program.at( 97 | process.env.ON_CHAIN_METADATA_PROGRAM as string, 98 | new anchor.AnchorProvider( 99 | connection, 100 | new FakeWallet(new anchor.web3.PublicKey(owner)), 101 | {} 102 | ) 103 | ); 104 | let tx = await program.methods 105 | .close() 106 | .accounts({ 107 | metadata: account, 108 | recipient: owner, 109 | owner, 110 | }) 111 | .transaction(); 112 | 113 | tx.recentBlockhash = (await connection.getRecentBlockhash()).blockhash; 114 | tx.feePayer = new anchor.web3.PublicKey(owner); 115 | 116 | return { 117 | transaction: tx 118 | .serialize({ requireAllSignatures: false }) 119 | .toString("base64"), 120 | }; 121 | } 122 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import express, { Request, Response } from "express"; 2 | import bodyParser from "body-parser"; 3 | import cors from "cors"; 4 | 5 | import * as dotenv from "dotenv"; 6 | dotenv.config(); 7 | 8 | import { getTransaction } from "./handlers/getTransaction"; 9 | 10 | import configConstants, { APP, PORT, TX_DESCRIPTIONS } from "./constants"; 11 | configConstants(); 12 | 13 | import { getSignaturesForAddress } from "./handlers/getSignaturesForAddress"; 14 | import { getAccountInfo } from "./handlers/getAccountInfo"; 15 | import { getBalance } from "./handlers/getBalance"; 16 | import { getAssetsByOwner } from "./handlers/getAssetsByOwner"; 17 | import { getListedCollectionNFTs } from "./handlers/getListedCollectionNFTs"; 18 | import { getCollectionsByFloorPrice } from "./handlers/getCollectionsByFloorPrice"; 19 | import { makeRedirectToLinkPreview } from "./handlers/solana-pay/redirectToLinkPreview"; 20 | import { makeQrcodeLinkPreview } from "./handlers/solana-pay/qrcodeLinkPreview"; 21 | import { makeCreateQrCode } from "./handlers/solana-pay/createQrCode"; 22 | import { 23 | respondToSolanaPayGet, 24 | makeRespondToSolanaPayPost, 25 | } from "./handlers/solana-pay/tx-request-server"; 26 | import { getTokenAccounts } from "./handlers/getTokenAccounts"; 27 | 28 | APP.use(bodyParser.json()); 29 | APP.use( 30 | cors({ 31 | origin: "*", 32 | }) 33 | ); 34 | 35 | if (process.env.DEV === "true") { 36 | APP.use("/.well-known", express.static("./.well-known-dev")); 37 | } else { 38 | APP.use("/.well-known", express.static("./.well-known")); 39 | } 40 | 41 | function errorHandle( 42 | handler: ( 43 | req: Request, 44 | res: Response> 45 | ) => Promise 46 | ) { 47 | return (req: Request, res: Response>) => { 48 | handler(req, res).catch((error) => { 49 | console.error(error); 50 | 51 | // Prevent ChatGPT from getting access to error messages until we have better error handling 52 | res.status(500).send({ message: "An error occurred" }); 53 | }); 54 | }; 55 | } 56 | 57 | // Solana RPC 58 | APP.post("/getBalance", errorHandle(getBalance)); 59 | APP.post("/getAccountInfo", errorHandle(getAccountInfo)); 60 | APP.post("/getTransaction", errorHandle(getTransaction)); 61 | APP.post("/getTokenAccounts", errorHandle(getTokenAccounts)); 62 | APP.post("/getSignaturesForAddress", errorHandle(getSignaturesForAddress)); 63 | 64 | // Metaplex ReadAPI (using Helius) 65 | APP.post("/getAssetsByOwner", errorHandle(getAssetsByOwner)); 66 | 67 | // NFT Listings (using Hyperspace) 68 | APP.post("/getListedCollectionNFTs", errorHandle(getListedCollectionNFTs)); 69 | APP.post( 70 | "/getCollectionsByFloorPrice", 71 | errorHandle(getCollectionsByFloorPrice) 72 | ); 73 | 74 | // Write API 75 | // -> Shows SolanaPay QR code in link previews 76 | for (const methodName of Object.keys(TX_DESCRIPTIONS)) { 77 | // Create redirect to link preview 78 | // This is the only ChatGPT accessible endpoint per tx 79 | APP.post( 80 | `/${methodName}`, 81 | errorHandle(makeRedirectToLinkPreview(methodName)) 82 | ); 83 | 84 | // ================================== 85 | // INTERNAL ENDPOINTS 86 | // ================================== 87 | 88 | // Creates an OpenGraph HTML page with a link to a QR code 89 | // so SolanaPay QR Codes can show up in ChatGPT's link previews 90 | APP.get( 91 | `/page/${methodName}`, 92 | errorHandle(makeQrcodeLinkPreview(methodName)) 93 | ); 94 | 95 | // Create QR code image 96 | APP.get(`/qr/${methodName}`, errorHandle(makeCreateQrCode(methodName))); 97 | 98 | // SolanaPay Transaction Request server impl 99 | APP.get(`/sign/${methodName}`, respondToSolanaPayGet); 100 | APP.post( 101 | `/sign/${methodName}`, 102 | errorHandle(makeRespondToSolanaPayPost(methodName)) 103 | ); 104 | } 105 | 106 | APP.listen(PORT, () => { 107 | console.log(`Server running at http://localhost:${PORT}`); 108 | }); 109 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Solana GPT Plugin 2 | A ChatGPT plugin for Solana. Install as an unverified plugin with url `https://solana-gpt-plugin.onrender.com`. 3 | 4 |
5 | Transfer Sol in ChatGPT 6 | Search NFTs in ChatGPT 7 | Buy NFTs in ChatGPT 8 |
9 | 10 | ## Endpoints 11 | 12 | ChatGPT can POST to the following resources with the same request payload, e.g. 13 | ```json 14 | { 15 | "address": "8fbqVvpK3Dj7fdP2c8JJhtD7Zy3n9qtwAeGfbkgPu625" 16 | } 17 | ``` 18 | 19 | ### /getAccountInfo 20 | 21 | Returns the output of `getAccountInfo` method from the RPC with buffer data, and if it can be deserialized by its program IDL, then the response payload has additional field called `extended` that has a JSON serialized string of the anchor data. Chat GPT's plugin model seems to be able to read this pretty well. 22 | ```json 23 | { 24 | ..., 25 | "extended": "{\"authority\":\"8fbqVvpK3Dj7fdP2c8JJhtD7Zy3n9qtwAeGfbkgPu625\",\"numMinted\":50}" 26 | } 27 | ``` 28 | 29 | ### /getBalance 30 | 31 | Returns 32 | ```json 33 | { 34 | "lamports": 42690 35 | } 36 | ``` 37 | 38 | ### /getAssetsByOwner 39 | 40 | Returns the assets returned by the [Metaplex Read API spec](https://github.com/metaplex-foundation/api-specifications/blob/main/specifications/read_api/openrpc_spec.json) 41 | 42 | ### /getTransaction 43 | 44 | Accepts 45 | ```json 46 | { 47 | "signature": "h51pjmFcn8LkxejofUQoDYkyubUKaB7bNtyMMSCCamSEYRutS2G2vm2w1ERShko8boRqdaaTAs4MR6sGYkTByNF" 48 | } 49 | ``` 50 | 51 | Returns the transaction status metadata for the `getTransaction` method from the Solana RPC. 52 | 53 | ### Endpoints for NFT discovery 54 | These endpoints are under development and subject to rapid change 55 | 56 | #### /getCollectionsByFloorPrice 57 | 58 | Returns 59 | ```json 60 | { 61 | "projects": [ 62 | { 63 | "id": "", 64 | "desc": "collection description", 65 | "img": "collection image url", 66 | "website": "collection website url", 67 | "floor_price": 0.1 68 | } 69 | ], 70 | "hasMore": true, 71 | "currentPage'": 1 72 | } 73 | ``` 74 | 75 | #### /getListedCollectionNFTs 76 | 77 | Returns LLM friendly response of available NFTs: 78 | ```json 79 | { 80 | "listings": [ 81 | { 82 | "price": 0.1, 83 | "token": "", 84 | "marketplace": "" 85 | } 86 | ], 87 | "hasMore": true, 88 | "currentPage": 1 89 | } 90 | ``` 91 | 92 | #### /createBuyTransaction 93 | 94 | Right now we are trusting Hyperspace to craft a valid transaction for us. 95 | In the future we will setup a write interface for programs on Solana to adhere to in order to 96 | be a target of LLM transaction composition. 97 | 98 | Returns 99 | ```json 100 | { 101 | "linkToSign": "" 102 | } 103 | ``` 104 | 105 | ### Endpoints for Transaction Composition (not LLM accessible) 106 | 107 | These are also subject to change, and we may create actual webpages to inspect 108 | the transaction before signing. However for now, these are simply redirect links 109 | to ensure that SolanaPay QR codes show up in the ChatGPT link previews. 110 | 111 | #### /page/createBuyNFT 112 | 113 | Returns a webpage with [OpenGraph](https://ogp.me/) metadata that will be rendered in the ChatGPT 114 | rich link preview. All ChatGPT links should be proxied through this sort of pipeline to maximize 115 | user engagement of links. The `og:image` tag is to `/qr/createBuyNFT` to show a SolanaPay QR code in link previews. 116 | 117 | This is currently a blank page, but we may show a preview of the transaction in the future. 118 | 119 | #### /qr/createBuyNFT 120 | 121 | Returns a PNG QR code that has been optimized to show in the particular aspect ratio of ChatGPT plugins. 122 | This just encodes a SolanaPay link that redirects to `/sign/createBuyNFT`. 123 | 124 | #### /sign/createBuyNFT 125 | 126 | This is the final redirect link that actually returns transaction bytes in a SolanaPay compatible format 127 | so users can sign transactions that are recommended by ChatGPT. 128 | 129 | ```json 130 | { 131 | "transaction": "" 132 | } 133 | ``` 134 | 135 | ## Development 136 | 137 | To install dependencies, just execute `yarn`. This project uses `node` with version `>=16.17.0`. 138 | 139 | To start a development server, execute `yarn dev`. This will start the plugin available from `localhost:3333` with its own configuration settings in `.well-known-dev/`. 140 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /.well-known-dev/openapi.yaml: -------------------------------------------------------------------------------- 1 | openapi: 3.0.2 2 | info: 3 | title: Retrieval Plugin API 4 | description: A retrieval API for querying and filtering documents based on natural language queries and metadata 5 | version: 1.0.0 6 | servers: 7 | - url: http://localhost:3333 8 | paths: 9 | /getAssetsByOwner: 10 | post: 11 | summary: getAssetsByOwner 12 | description: Accepts Solana publicKey address. Returns Metaplex NFTs owned by the address 13 | operationId: query_assets_by_owner 14 | requestBody: 15 | content: 16 | application/json: 17 | schema: 18 | $ref: "#/components/schemas/getAccountInfoRequest" 19 | required: true 20 | responses: 21 | "200": 22 | description: Successful Response 23 | content: 24 | application/json: 25 | schema: 26 | $ref: "#/components/schemas/getAssetsByOwnerResponse" 27 | "500": 28 | description: Validation Error 29 | content: 30 | application/json: 31 | schema: 32 | $ref: "#/components/schemas/HTTPValidationError" 33 | security: 34 | - HTTPBearer: [] 35 | /getAccountInfo: 36 | post: 37 | summary: getAccountInfo 38 | description: Accepts Solana publicKey address. Returns information the account data 39 | operationId: query_account_info 40 | requestBody: 41 | content: 42 | application/json: 43 | schema: 44 | $ref: "#/components/schemas/getAccountInfoRequest" 45 | required: true 46 | responses: 47 | "200": 48 | description: Successful Response 49 | content: 50 | application/json: 51 | schema: 52 | $ref: "#/components/schemas/getAccountInfoResponse" 53 | "500": 54 | description: Validation Error 55 | content: 56 | application/json: 57 | schema: 58 | $ref: "#/components/schemas/HTTPValidationError" 59 | security: 60 | - HTTPBearer: [] 61 | /getTokenAccounts: 62 | post: 63 | summary: getTokenAccounts 64 | description: Returns the fungible and non-fungible tokens and amounts owned by the address. May show tokens not listed in /getAssetsByOwner 65 | operationId: query_token_accounts 66 | requestBody: 67 | content: 68 | application/json: 69 | schema: 70 | $ref: "#/components/schemas/getBalanceRequest" 71 | required: true 72 | responses: 73 | "200": 74 | description: Successful Response 75 | content: 76 | application/json: 77 | schema: 78 | $ref: "#/components/schemas/getTokenAccountsResponse" 79 | "500": 80 | description: Validation Error 81 | content: 82 | application/json: 83 | schema: 84 | $ref: "#/components/schemas/HTTPValidationError" 85 | security: 86 | - HTTPBearer: [] 87 | /getBalance: 88 | post: 89 | summary: getBalance 90 | description: Accepts Solana publicKey address. Returns the amount of lamports that the account has available. 91 | operationId: query_balance 92 | requestBody: 93 | content: 94 | application/json: 95 | schema: 96 | $ref: "#/components/schemas/getBalanceRequest" 97 | required: true 98 | responses: 99 | "200": 100 | description: Successful Response 101 | content: 102 | application/json: 103 | schema: 104 | $ref: "#/components/schemas/getBalanceResponse" 105 | "500": 106 | description: Validation Error 107 | content: 108 | application/json: 109 | schema: 110 | $ref: "#/components/schemas/HTTPValidationError" 111 | security: 112 | - HTTPBearer: [] 113 | /getTransaction: 114 | post: 115 | summary: getTransaction 116 | description: Accepts a transaction signature. Returns the publicly available transaction information and metadata 117 | operationId: query_transaction 118 | requestBody: 119 | content: 120 | application/json: 121 | schema: 122 | $ref: "#/components/schemas/getTransactionRequest" 123 | responses: 124 | "200": 125 | description: Successful Response 126 | content: 127 | application/json: 128 | schema: 129 | $ref: "#/components/schemas/getTransactionResponse" 130 | "500": 131 | description: Validation Error 132 | content: 133 | application/json: 134 | schema: 135 | $ref: "#/components/schemas/HTTPValidationError" 136 | security: 137 | - HTTPBearer: [] 138 | /getSignaturesForAddress: 139 | post: 140 | summary: getSignaturesForAddress 141 | description: Accepts Solana publicKey address. Returns the latest transaction signatures that involve that address 142 | operationId: query_signatures_for_address 143 | requestBody: 144 | content: 145 | application/json: 146 | schema: 147 | $ref: "#/components/schemas/getSignaturesForAddressRequest" 148 | required: true 149 | responses: 150 | "200": 151 | description: Successful Response 152 | content: 153 | application/json: 154 | schema: 155 | $ref: "#/components/schemas/getSignaturesForAddressResponse" 156 | "500": 157 | description: Validation Error 158 | content: 159 | application/json: 160 | schema: 161 | $ref: "#/components/schemas/HTTPValidationError" 162 | security: 163 | - HTTPBearer: [] 164 | /getCollectionsByFloorPrice: 165 | post: 166 | summary: Search through Solana NFT collections by floor price 167 | operationId: query_nft_collections_by_fp 168 | requestBody: 169 | content: 170 | application/json: 171 | schema: 172 | $ref: "#/components/schemas/getCollectionsByFloorPriceRequest" 173 | responses: 174 | "200": 175 | description: Successful Response 176 | content: 177 | application/json: 178 | schema: 179 | $ref: "#/components/schemas/getCollectionsByFloorPriceResponse" 180 | "500": 181 | description: Validation Error 182 | content: 183 | application/json: 184 | schema: 185 | $ref: "#/components/schemas/HTTPValidationError" 186 | security: 187 | - HTTPBearer: [] 188 | /createCloseNFTMetadata: 189 | post: 190 | summary: Allows the user to close NFT metadata on-chain and redeem the account's SOL 191 | operationId: create_close_nft_metadata_tx 192 | requestBody: 193 | content: 194 | application/json: 195 | schema: 196 | $ref: "#/components/schemas/createCloseNFTMetadataRequest" 197 | responses: 198 | "200": 199 | description: Successful Response 200 | content: 201 | application/json: 202 | schema: 203 | $ref: "#/components/schemas/transactionResponse" 204 | "500": 205 | description: Validation Error 206 | content: 207 | application/json: 208 | schema: 209 | $ref: "#/components/schemas/HTTPValidationError" 210 | security: 211 | - HTTPBearer: [] 212 | /createWriteNFTMetadata: 213 | post: 214 | summary: Allows the user to write NFT metadata on-chain 215 | operationId: create_write_nft_metadata_tx 216 | requestBody: 217 | content: 218 | application/json: 219 | schema: 220 | $ref: "#/components/schemas/createWriteNFTMetadataRequest" 221 | responses: 222 | "200": 223 | description: Successful Response 224 | content: 225 | application/json: 226 | schema: 227 | $ref: "#/components/schemas/transactionResponse" 228 | "500": 229 | description: Validation Error 230 | content: 231 | application/json: 232 | schema: 233 | $ref: "#/components/schemas/HTTPValidationError" 234 | security: 235 | - HTTPBearer: [] 236 | /createTransferToken: 237 | post: 238 | summary: Allows the user to transfer a token to ownership of another account 239 | operationId: create_transfer_token_tx 240 | requestBody: 241 | content: 242 | application/json: 243 | schema: 244 | $ref: "#/components/schemas/createTransferTokenRequest" 245 | responses: 246 | "200": 247 | description: Successful Response 248 | content: 249 | application/json: 250 | schema: 251 | $ref: "#/components/schemas/transactionResponse" 252 | "500": 253 | description: Validation Error 254 | content: 255 | application/json: 256 | schema: 257 | $ref: "#/components/schemas/HTTPValidationError" 258 | security: 259 | - HTTPBearer: [] 260 | /createTransferSol: 261 | post: 262 | summary: Allows the user to transfer Sol to another account 263 | operationId: create_transfer_sol_tx 264 | requestBody: 265 | content: 266 | application/json: 267 | schema: 268 | $ref: "#/components/schemas/createTransferSolRequest" 269 | responses: 270 | "200": 271 | description: Successful Response 272 | content: 273 | application/json: 274 | schema: 275 | $ref: "#/components/schemas/transactionResponse" 276 | "500": 277 | description: Validation Error 278 | content: 279 | application/json: 280 | schema: 281 | $ref: "#/components/schemas/HTTPValidationError" 282 | security: 283 | - HTTPBearer: [] 284 | /createBuyNFT: 285 | post: 286 | summary: Accepts accounts needed to buy the NFT represented by the token 287 | operationId: create_buy_nft_tx 288 | requestBody: 289 | content: 290 | application/json: 291 | schema: 292 | $ref: "#/components/schemas/createBuyTransactionRequest" 293 | responses: 294 | "200": 295 | description: Successful Response 296 | content: 297 | application/json: 298 | schema: 299 | $ref: "#/components/schemas/transactionResponse" 300 | "500": 301 | description: Validation Error 302 | content: 303 | application/json: 304 | schema: 305 | $ref: "#/components/schemas/HTTPValidationError" 306 | security: 307 | - HTTPBearer: [] 308 | /getListedCollectionNFTs: 309 | post: 310 | summary: Returns the listed NFTs in a collection available to purchase 311 | operationId: query_listed_nfts_for_collection 312 | requestBody: 313 | content: 314 | application/json: 315 | schema: 316 | $ref: "#/components/schemas/getListedCollectionNFTsRequest" 317 | responses: 318 | "200": 319 | description: Successful Response 320 | content: 321 | application/json: 322 | schema: 323 | $ref: "#/components/schemas/getListedCollectionNFTsResponse" 324 | "500": 325 | description: Validation Error 326 | content: 327 | application/json: 328 | schema: 329 | $ref: "#/components/schemas/HTTPValidationError" 330 | security: 331 | - HTTPBearer: [] 332 | components: 333 | schemas: 334 | getAccountInfoRequest: 335 | title: GetAccountInfoRequest 336 | type: object 337 | required: 338 | - address 339 | properties: 340 | address: 341 | title: Address 342 | type: string 343 | getAccountInfoResponse: 344 | title: GetAccountInfoResponse 345 | type: object 346 | properties: 347 | message: 348 | title: Message 349 | type: object 350 | properties: 351 | data: 352 | title: Data 353 | type: object 354 | properties: 355 | type: 356 | title: Type 357 | type: string 358 | data: 359 | title: Data 360 | type: array 361 | items: { type: string } 362 | executable: 363 | title: Executable 364 | type: boolean 365 | lamports: 366 | title: Lamports 367 | type: number 368 | owner: 369 | title: Owner 370 | type: string 371 | rentEpoch: 372 | title: Owner 373 | type: number 374 | extended: 375 | title: Extended 376 | type: string 377 | getSignaturesForAddressResponse: 378 | title: GetSignaturesForAddressResponse 379 | type: object 380 | required: 381 | - hasMore 382 | - signatures 383 | properties: 384 | hasMore: 385 | type: boolean 386 | nextPage: 387 | type: object 388 | properties: 389 | beforeSignature: 390 | type: string 391 | 392 | signatures: 393 | type: array 394 | items: 395 | type: object 396 | required: 397 | - signature 398 | - slot 399 | properties: 400 | blockTime: 401 | type: number 402 | confirmationStatus: 403 | type: string 404 | err: 405 | type: object 406 | signature: 407 | type: string 408 | slot: 409 | type: number 410 | getSignaturesForAddressRequest: 411 | title: GetSignaturesForAddressRequest 412 | type: object 413 | required: 414 | - address 415 | properties: 416 | address: 417 | type: string 418 | beforeSignature: 419 | type: string 420 | untilSignature: 421 | type: string 422 | getBalanceRequest: 423 | title: GetBalanceRequest 424 | type: object 425 | required: 426 | - address 427 | properties: 428 | address: 429 | title: Address 430 | type: string 431 | getBalanceResponse: 432 | title: GetBalanceResponse 433 | type: object 434 | properties: 435 | sol: 436 | title: sol 437 | type: number 438 | getTokenAccountsResponse: 439 | type: array 440 | items: 441 | type: object 442 | properties: 443 | mint: 444 | type: string 445 | amount: 446 | type: string 447 | HTTPValidationError: 448 | title: HTTPValidationError 449 | type: object 450 | properties: 451 | message: 452 | title: Message 453 | type: string 454 | ValidationError: 455 | title: ValidationError 456 | required: 457 | - loc 458 | - msg 459 | - type 460 | type: object 461 | properties: 462 | loc: 463 | title: Location 464 | type: array 465 | items: 466 | anyOf: 467 | - type: string 468 | - type: integer 469 | msg: 470 | title: Message 471 | type: string 472 | type: 473 | title: Error Type 474 | type: string 475 | getAssetsByOwnerResponse: 476 | title: GetAssetsByOwnerResponse 477 | type: object 478 | properties: 479 | total: 480 | title: Total 481 | type: number 482 | limit: 483 | title: Limit 484 | type: number 485 | page: 486 | title: Page 487 | type: number 488 | items: 489 | title: Items 490 | type: array 491 | items: { $ref: "#/components/schemas/Asset" } 492 | Asset: 493 | title: Asset 494 | type: object 495 | required: 496 | - version 497 | - id 498 | properties: 499 | interface: 500 | type: string 501 | enum: 502 | - V1_NFT 503 | - V1_PRINT 504 | - LEGACY_NFT 505 | - V2_NFT 506 | - FungibleAsset 507 | - Custom 508 | - Identity 509 | - Executable 510 | id: 511 | type: string 512 | content: 513 | type: object 514 | properties: 515 | $schema: 516 | type: string 517 | json_uri: 518 | type: string 519 | metadata: 520 | type: object 521 | properties: 522 | description: 523 | type: string 524 | name: 525 | type: string 526 | symbol: 527 | type: string 528 | files: 529 | type: array 530 | items: 531 | type: object 532 | properties: 533 | uri: 534 | type: string 535 | mime: 536 | type: string 537 | quality: 538 | type: object 539 | properties: 540 | $$schema: 541 | type: string 542 | links: 543 | type: array 544 | items: 545 | type: object 546 | authorities: 547 | type: array 548 | items: 549 | type: object 550 | properties: 551 | address: 552 | type: string 553 | scopes: 554 | type: array 555 | items: 556 | type: string 557 | compression: 558 | type: object 559 | properties: 560 | eligible: 561 | type: boolean 562 | compressed: 563 | type: boolean 564 | grouping: 565 | type: array 566 | items: 567 | type: object 568 | required: 569 | - $$schema 570 | properties: 571 | $$schema: 572 | type: string 573 | group_key: 574 | type: string 575 | group_value: 576 | type: string 577 | royalty: 578 | type: object 579 | properties: 580 | royalty_model: 581 | type: string 582 | enum: 583 | - creators 584 | - fanout 585 | - single 586 | target: 587 | type: string 588 | percent: 589 | type: number 590 | locked: 591 | type: boolean 592 | creators: 593 | type: array 594 | items: 595 | type: object 596 | properties: 597 | address: 598 | type: string 599 | share: 600 | type: string 601 | verified: 602 | type: boolean 603 | ownership: 604 | type: object 605 | properties: 606 | frozen: 607 | type: boolean 608 | delegated: 609 | type: boolean 610 | delegate: 611 | type: string 612 | ownership_model: 613 | type: string 614 | enum: 615 | - Single 616 | - Token 617 | address: 618 | type: string 619 | version: 620 | type: string 621 | getTransactionRequest: 622 | type: object 623 | required: 624 | - signature 625 | properties: 626 | signature: 627 | type: string 628 | # TODO: verify this actually describes the response 629 | getTransactionResponse: 630 | type: object 631 | properties: 632 | slot: 633 | type: integer 634 | format: int64 635 | transaction: 636 | oneOf: 637 | - type: object 638 | - type: array 639 | items: 640 | type: string 641 | minItems: 2 642 | blockTime: 643 | type: integer 644 | format: int64 645 | nullable: true 646 | meta: 647 | $ref: "#/components/schemas/Meta" 648 | Meta: 649 | type: object 650 | properties: 651 | err: 652 | type: object 653 | nullable: true 654 | fee: 655 | type: integer 656 | format: uint64 657 | preBalances: 658 | type: array 659 | items: 660 | type: integer 661 | format: uint64 662 | postBalances: 663 | type: array 664 | items: 665 | type: integer 666 | format: uint64 667 | innerInstructions: 668 | type: array 669 | nullable: true 670 | items: 671 | $ref: "#/components/schemas/InnerInstruction" 672 | preTokenBalances: 673 | type: array 674 | nullable: true 675 | items: 676 | $ref: "#/components/schemas/TokenBalance" 677 | postTokenBalances: 678 | type: array 679 | nullable: true 680 | items: 681 | $ref: "#/components/schemas/TokenBalance" 682 | logMessages: 683 | type: array 684 | nullable: true 685 | items: 686 | type: string 687 | rewards: 688 | type: array 689 | nullable: true 690 | items: 691 | $ref: "#/components/schemas/Reward" 692 | InnerInstruction: 693 | type: object 694 | properties: 695 | index: 696 | type: integer 697 | format: int32 698 | instructions: 699 | type: array 700 | items: 701 | $ref: "#/components/schemas/Instruction" 702 | Instruction: 703 | type: object 704 | properties: 705 | programIdIndex: 706 | type: integer 707 | format: int32 708 | accounts: 709 | type: array 710 | items: 711 | type: integer 712 | format: int32 713 | data: 714 | type: string 715 | TokenBalance: 716 | type: object 717 | properties: 718 | accountIndex: 719 | type: integer 720 | format: int32 721 | mint: 722 | type: string 723 | owner: 724 | type: string 725 | nullable: true 726 | programId: 727 | type: string 728 | nullable: true 729 | uiTokenAmount: 730 | $ref: "#/components/schemas/UiTokenAmount" 731 | UiTokenAmount: 732 | type: object 733 | properties: 734 | amount: 735 | type: string 736 | decimals: 737 | type: integer 738 | format: int32 739 | uiAmount: 740 | type: number 741 | nullable: true 742 | deprecated: true 743 | uiAmountString: 744 | type: string 745 | Reward: 746 | type: object 747 | properties: 748 | pubkey: 749 | type: string 750 | lamports: 751 | type: integer 752 | format: int64 753 | postBalance: 754 | type: integer 755 | format: uint64 756 | rewardType: 757 | type: string 758 | commission: 759 | type: integer 760 | format: uint8 761 | nullable: true 762 | getCollectionsByFloorPriceRequest: 763 | type: object 764 | properties: 765 | maxFloorPrice: 766 | type: number 767 | nullable: true 768 | minFloorPrice: 769 | type: number 770 | nullable: true 771 | orderBy: 772 | type: string 773 | enum: 774 | - ASC 775 | - DESC 776 | nullable: true 777 | getCollectionsByFloorPriceResponse: 778 | type: object 779 | properties: 780 | hasMore: 781 | type: boolean 782 | currentPage: 783 | type: number 784 | projects: 785 | type: array 786 | items: { $ref: "#/components/schemas/CollectionResponse" } 787 | CollectionResponse: 788 | type: object 789 | properties: 790 | id: 791 | type: string 792 | desc: 793 | type: string 794 | img: 795 | type: string 796 | website: 797 | type: string 798 | floor_price: 799 | type: number 800 | createBuyTransactionRequest: 801 | type: object 802 | properties: 803 | token: 804 | type: string 805 | price: 806 | type: number 807 | createWriteNFTMetadataRequest: 808 | type: object 809 | properties: 810 | image: 811 | type: string 812 | createCloseNFTMetadataRequest: 813 | type: object 814 | properties: 815 | account: 816 | type: string 817 | createTransferTokenRequest: 818 | type: object 819 | properties: 820 | amount: 821 | type: string 822 | destination: 823 | type: string 824 | mint: 825 | type: string 826 | createTransferSolRequest: 827 | type: object 828 | properties: 829 | amount: 830 | type: string 831 | destination: 832 | type: string 833 | transactionResponse: 834 | type: object 835 | properties: 836 | linkToSign: 837 | type: string 838 | getListedCollectionNFTsRequest: 839 | type: object 840 | properties: 841 | projectId: 842 | type: string 843 | priceOrder: 844 | type: string 845 | nullable: true 846 | pageSize: 847 | type: number 848 | nullable: true 849 | getListedCollectionNFTsResponse: 850 | type: object 851 | properties: 852 | listings: 853 | type: array 854 | items: { $ref: "#/components/schemas/ListedNFT" } 855 | hasMore: 856 | type: boolean 857 | ListedNFT: 858 | type: object 859 | properties: 860 | price: 861 | type: number 862 | token: 863 | type: string 864 | image: 865 | type: string 866 | marketplace: 867 | type: string 868 | securitySchemes: 869 | HTTPBearer: 870 | type: http 871 | scheme: bearer 872 | -------------------------------------------------------------------------------- /.well-known/openapi.yaml: -------------------------------------------------------------------------------- 1 | openapi: 3.0.2 2 | info: 3 | title: Retrieval Plugin API 4 | description: A retrieval API for querying and filtering documents based on natural language queries and metadata 5 | version: 1.0.0 6 | servers: 7 | - url: https://solana-gpt-plugin.onrender.com 8 | paths: 9 | /getAssetsByOwner: 10 | post: 11 | summary: getAssetsByOwner 12 | description: Accepts Solana publicKey address. Returns Metaplex NFTs owned by the address 13 | operationId: query_assets_by_owner 14 | requestBody: 15 | content: 16 | application/json: 17 | schema: 18 | $ref: "#/components/schemas/getAccountInfoRequest" 19 | required: true 20 | responses: 21 | "200": 22 | description: Successful Response 23 | content: 24 | application/json: 25 | schema: 26 | $ref: "#/components/schemas/getAssetsByOwnerResponse" 27 | "500": 28 | description: Validation Error 29 | content: 30 | application/json: 31 | schema: 32 | $ref: "#/components/schemas/HTTPValidationError" 33 | security: 34 | - HTTPBearer: [] 35 | /getAccountInfo: 36 | post: 37 | summary: getAccountInfo 38 | description: Accepts Solana publicKey address. Returns information the account data 39 | operationId: query_account_info 40 | requestBody: 41 | content: 42 | application/json: 43 | schema: 44 | $ref: "#/components/schemas/getAccountInfoRequest" 45 | required: true 46 | responses: 47 | "200": 48 | description: Successful Response 49 | content: 50 | application/json: 51 | schema: 52 | $ref: "#/components/schemas/getAccountInfoResponse" 53 | "500": 54 | description: Validation Error 55 | content: 56 | application/json: 57 | schema: 58 | $ref: "#/components/schemas/HTTPValidationError" 59 | security: 60 | - HTTPBearer: [] 61 | /getTokenAccounts: 62 | post: 63 | summary: getTokenAccounts 64 | description: Returns the fungible and non-fungible tokens and amounts owned by the address. May show tokens not listed in /getAssetsByOwner 65 | operationId: query_token_accounts 66 | requestBody: 67 | content: 68 | application/json: 69 | schema: 70 | $ref: "#/components/schemas/getBalanceRequest" 71 | required: true 72 | responses: 73 | "200": 74 | description: Successful Response 75 | content: 76 | application/json: 77 | schema: 78 | $ref: "#/components/schemas/getTokenAccountsResponse" 79 | "500": 80 | description: Validation Error 81 | content: 82 | application/json: 83 | schema: 84 | $ref: "#/components/schemas/HTTPValidationError" 85 | security: 86 | - HTTPBearer: [] 87 | /getBalance: 88 | post: 89 | summary: getBalance 90 | description: Accepts Solana publicKey address. Returns the amount of lamports that the account has available. 91 | operationId: query_balance 92 | requestBody: 93 | content: 94 | application/json: 95 | schema: 96 | $ref: "#/components/schemas/getBalanceRequest" 97 | required: true 98 | responses: 99 | "200": 100 | description: Successful Response 101 | content: 102 | application/json: 103 | schema: 104 | $ref: "#/components/schemas/getBalanceResponse" 105 | "500": 106 | description: Validation Error 107 | content: 108 | application/json: 109 | schema: 110 | $ref: "#/components/schemas/HTTPValidationError" 111 | security: 112 | - HTTPBearer: [] 113 | /getTransaction: 114 | post: 115 | summary: getTransaction 116 | description: Accepts a transaction signature. Returns the publicly available transaction information and metadata 117 | operationId: query_transaction 118 | requestBody: 119 | content: 120 | application/json: 121 | schema: 122 | $ref: "#/components/schemas/getTransactionRequest" 123 | responses: 124 | "200": 125 | description: Successful Response 126 | content: 127 | application/json: 128 | schema: 129 | $ref: "#/components/schemas/getTransactionResponse" 130 | "500": 131 | description: Validation Error 132 | content: 133 | application/json: 134 | schema: 135 | $ref: "#/components/schemas/HTTPValidationError" 136 | security: 137 | - HTTPBearer: [] 138 | /getSignaturesForAddress: 139 | post: 140 | summary: getSignaturesForAddress 141 | description: Accepts Solana publicKey address. Returns the latest transaction signatures that involve that address 142 | operationId: query_signatures_for_address 143 | requestBody: 144 | content: 145 | application/json: 146 | schema: 147 | $ref: "#/components/schemas/getSignaturesForAddressRequest" 148 | required: true 149 | responses: 150 | "200": 151 | description: Successful Response 152 | content: 153 | application/json: 154 | schema: 155 | $ref: "#/components/schemas/getSignaturesForAddressResponse" 156 | "500": 157 | description: Validation Error 158 | content: 159 | application/json: 160 | schema: 161 | $ref: "#/components/schemas/HTTPValidationError" 162 | security: 163 | - HTTPBearer: [] 164 | /getCollectionsByFloorPrice: 165 | post: 166 | summary: Search through Solana NFT collections by floor price 167 | operationId: query_nft_collections_by_fp 168 | requestBody: 169 | content: 170 | application/json: 171 | schema: 172 | $ref: "#/components/schemas/getCollectionsByFloorPriceRequest" 173 | responses: 174 | "200": 175 | description: Successful Response 176 | content: 177 | application/json: 178 | schema: 179 | $ref: "#/components/schemas/getCollectionsByFloorPriceResponse" 180 | "500": 181 | description: Validation Error 182 | content: 183 | application/json: 184 | schema: 185 | $ref: "#/components/schemas/HTTPValidationError" 186 | security: 187 | - HTTPBearer: [] 188 | /createCloseNFTMetadata: 189 | post: 190 | summary: Allows the user to close NFT metadata on-chain and redeem the account's SOL 191 | operationId: create_close_nft_metadata_tx 192 | requestBody: 193 | content: 194 | application/json: 195 | schema: 196 | $ref: "#/components/schemas/createCloseNFTMetadataRequest" 197 | responses: 198 | "200": 199 | description: Successful Response 200 | content: 201 | application/json: 202 | schema: 203 | $ref: "#/components/schemas/transactionResponse" 204 | "500": 205 | description: Validation Error 206 | content: 207 | application/json: 208 | schema: 209 | $ref: "#/components/schemas/HTTPValidationError" 210 | security: 211 | - HTTPBearer: [] 212 | /createWriteNFTMetadata: 213 | post: 214 | summary: Allows the user to write NFT metadata on-chain 215 | operationId: create_write_nft_metadata_tx 216 | requestBody: 217 | content: 218 | application/json: 219 | schema: 220 | $ref: "#/components/schemas/createWriteNFTMetadataRequest" 221 | responses: 222 | "200": 223 | description: Successful Response 224 | content: 225 | application/json: 226 | schema: 227 | $ref: "#/components/schemas/transactionResponse" 228 | "500": 229 | description: Validation Error 230 | content: 231 | application/json: 232 | schema: 233 | $ref: "#/components/schemas/HTTPValidationError" 234 | security: 235 | - HTTPBearer: [] 236 | /createTransferToken: 237 | post: 238 | summary: Allows the user to transfer a token to ownership of another account 239 | operationId: create_transfer_token_tx 240 | requestBody: 241 | content: 242 | application/json: 243 | schema: 244 | $ref: "#/components/schemas/createTransferTokenRequest" 245 | responses: 246 | "200": 247 | description: Successful Response 248 | content: 249 | application/json: 250 | schema: 251 | $ref: "#/components/schemas/transactionResponse" 252 | "500": 253 | description: Validation Error 254 | content: 255 | application/json: 256 | schema: 257 | $ref: "#/components/schemas/HTTPValidationError" 258 | security: 259 | - HTTPBearer: [] 260 | /createTransferSol: 261 | post: 262 | summary: Allows the user to transfer Sol to another account 263 | operationId: create_transfer_sol_tx 264 | requestBody: 265 | content: 266 | application/json: 267 | schema: 268 | $ref: "#/components/schemas/createTransferSolRequest" 269 | responses: 270 | "200": 271 | description: Successful Response 272 | content: 273 | application/json: 274 | schema: 275 | $ref: "#/components/schemas/transactionResponse" 276 | "500": 277 | description: Validation Error 278 | content: 279 | application/json: 280 | schema: 281 | $ref: "#/components/schemas/HTTPValidationError" 282 | security: 283 | - HTTPBearer: [] 284 | /createBuyNFT: 285 | post: 286 | summary: Accepts accounts needed to buy the NFT represented by the token 287 | operationId: create_buy_nft_tx 288 | requestBody: 289 | content: 290 | application/json: 291 | schema: 292 | $ref: "#/components/schemas/createBuyTransactionRequest" 293 | responses: 294 | "200": 295 | description: Successful Response 296 | content: 297 | application/json: 298 | schema: 299 | $ref: "#/components/schemas/transactionResponse" 300 | "500": 301 | description: Validation Error 302 | content: 303 | application/json: 304 | schema: 305 | $ref: "#/components/schemas/HTTPValidationError" 306 | security: 307 | - HTTPBearer: [] 308 | /getListedCollectionNFTs: 309 | post: 310 | summary: Returns the listed NFTs in a collection available to purchase 311 | operationId: query_listed_nfts_for_collection 312 | requestBody: 313 | content: 314 | application/json: 315 | schema: 316 | $ref: "#/components/schemas/getListedCollectionNFTsRequest" 317 | responses: 318 | "200": 319 | description: Successful Response 320 | content: 321 | application/json: 322 | schema: 323 | $ref: "#/components/schemas/getListedCollectionNFTsResponse" 324 | "500": 325 | description: Validation Error 326 | content: 327 | application/json: 328 | schema: 329 | $ref: "#/components/schemas/HTTPValidationError" 330 | security: 331 | - HTTPBearer: [] 332 | components: 333 | schemas: 334 | getAccountInfoRequest: 335 | title: GetAccountInfoRequest 336 | type: object 337 | required: 338 | - address 339 | properties: 340 | address: 341 | title: Address 342 | type: string 343 | getAccountInfoResponse: 344 | title: GetAccountInfoResponse 345 | type: object 346 | properties: 347 | message: 348 | title: Message 349 | type: object 350 | properties: 351 | data: 352 | title: Data 353 | type: object 354 | properties: 355 | type: 356 | title: Type 357 | type: string 358 | data: 359 | title: Data 360 | type: array 361 | items: { type: string } 362 | executable: 363 | title: Executable 364 | type: boolean 365 | lamports: 366 | title: Lamports 367 | type: number 368 | owner: 369 | title: Owner 370 | type: string 371 | rentEpoch: 372 | title: Owner 373 | type: number 374 | extended: 375 | title: Extended 376 | type: string 377 | getSignaturesForAddressResponse: 378 | title: GetSignaturesForAddressResponse 379 | type: object 380 | required: 381 | - hasMore 382 | - signatures 383 | properties: 384 | hasMore: 385 | type: boolean 386 | nextPage: 387 | type: object 388 | properties: 389 | beforeSignature: 390 | type: string 391 | 392 | signatures: 393 | type: array 394 | items: 395 | type: object 396 | required: 397 | - signature 398 | - slot 399 | properties: 400 | blockTime: 401 | type: number 402 | confirmationStatus: 403 | type: string 404 | err: 405 | type: object 406 | signature: 407 | type: string 408 | slot: 409 | type: number 410 | getSignaturesForAddressRequest: 411 | title: GetSignaturesForAddressRequest 412 | type: object 413 | required: 414 | - address 415 | properties: 416 | address: 417 | type: string 418 | beforeSignature: 419 | type: string 420 | untilSignature: 421 | type: string 422 | getBalanceRequest: 423 | title: GetBalanceRequest 424 | type: object 425 | required: 426 | - address 427 | properties: 428 | address: 429 | title: Address 430 | type: string 431 | getBalanceResponse: 432 | title: GetBalanceResponse 433 | type: object 434 | properties: 435 | sol: 436 | title: sol 437 | type: number 438 | getTokenAccountsResponse: 439 | type: array 440 | items: 441 | type: object 442 | properties: 443 | mint: 444 | type: string 445 | amount: 446 | type: string 447 | HTTPValidationError: 448 | title: HTTPValidationError 449 | type: object 450 | properties: 451 | message: 452 | title: Message 453 | type: string 454 | ValidationError: 455 | title: ValidationError 456 | required: 457 | - loc 458 | - msg 459 | - type 460 | type: object 461 | properties: 462 | loc: 463 | title: Location 464 | type: array 465 | items: 466 | anyOf: 467 | - type: string 468 | - type: integer 469 | msg: 470 | title: Message 471 | type: string 472 | type: 473 | title: Error Type 474 | type: string 475 | getAssetsByOwnerResponse: 476 | title: GetAssetsByOwnerResponse 477 | type: object 478 | properties: 479 | total: 480 | title: Total 481 | type: number 482 | limit: 483 | title: Limit 484 | type: number 485 | page: 486 | title: Page 487 | type: number 488 | items: 489 | title: Items 490 | type: array 491 | items: { $ref: "#/components/schemas/Asset" } 492 | Asset: 493 | title: Asset 494 | type: object 495 | required: 496 | - version 497 | - id 498 | properties: 499 | interface: 500 | type: string 501 | enum: 502 | - V1_NFT 503 | - V1_PRINT 504 | - LEGACY_NFT 505 | - V2_NFT 506 | - FungibleAsset 507 | - Custom 508 | - Identity 509 | - Executable 510 | id: 511 | type: string 512 | content: 513 | type: object 514 | properties: 515 | $schema: 516 | type: string 517 | json_uri: 518 | type: string 519 | metadata: 520 | type: object 521 | properties: 522 | description: 523 | type: string 524 | name: 525 | type: string 526 | symbol: 527 | type: string 528 | files: 529 | type: array 530 | items: 531 | type: object 532 | properties: 533 | uri: 534 | type: string 535 | mime: 536 | type: string 537 | quality: 538 | type: object 539 | properties: 540 | $$schema: 541 | type: string 542 | links: 543 | type: array 544 | items: 545 | type: object 546 | authorities: 547 | type: array 548 | items: 549 | type: object 550 | properties: 551 | address: 552 | type: string 553 | scopes: 554 | type: array 555 | items: 556 | type: string 557 | compression: 558 | type: object 559 | properties: 560 | eligible: 561 | type: boolean 562 | compressed: 563 | type: boolean 564 | grouping: 565 | type: array 566 | items: 567 | type: object 568 | required: 569 | - $$schema 570 | properties: 571 | $$schema: 572 | type: string 573 | group_key: 574 | type: string 575 | group_value: 576 | type: string 577 | royalty: 578 | type: object 579 | properties: 580 | royalty_model: 581 | type: string 582 | enum: 583 | - creators 584 | - fanout 585 | - single 586 | target: 587 | type: string 588 | percent: 589 | type: number 590 | locked: 591 | type: boolean 592 | creators: 593 | type: array 594 | items: 595 | type: object 596 | properties: 597 | address: 598 | type: string 599 | share: 600 | type: string 601 | verified: 602 | type: boolean 603 | ownership: 604 | type: object 605 | properties: 606 | frozen: 607 | type: boolean 608 | delegated: 609 | type: boolean 610 | delegate: 611 | type: string 612 | ownership_model: 613 | type: string 614 | enum: 615 | - Single 616 | - Token 617 | address: 618 | type: string 619 | version: 620 | type: string 621 | getTransactionRequest: 622 | type: object 623 | required: 624 | - signature 625 | properties: 626 | signature: 627 | type: string 628 | # TODO: verify this actually describes the response 629 | getTransactionResponse: 630 | type: object 631 | properties: 632 | slot: 633 | type: integer 634 | format: int64 635 | transaction: 636 | oneOf: 637 | - type: object 638 | - type: array 639 | items: 640 | type: string 641 | minItems: 2 642 | blockTime: 643 | type: integer 644 | format: int64 645 | nullable: true 646 | meta: 647 | $ref: "#/components/schemas/Meta" 648 | Meta: 649 | type: object 650 | properties: 651 | err: 652 | type: object 653 | nullable: true 654 | fee: 655 | type: integer 656 | format: uint64 657 | preBalances: 658 | type: array 659 | items: 660 | type: integer 661 | format: uint64 662 | postBalances: 663 | type: array 664 | items: 665 | type: integer 666 | format: uint64 667 | innerInstructions: 668 | type: array 669 | nullable: true 670 | items: 671 | $ref: "#/components/schemas/InnerInstruction" 672 | preTokenBalances: 673 | type: array 674 | nullable: true 675 | items: 676 | $ref: "#/components/schemas/TokenBalance" 677 | postTokenBalances: 678 | type: array 679 | nullable: true 680 | items: 681 | $ref: "#/components/schemas/TokenBalance" 682 | logMessages: 683 | type: array 684 | nullable: true 685 | items: 686 | type: string 687 | rewards: 688 | type: array 689 | nullable: true 690 | items: 691 | $ref: "#/components/schemas/Reward" 692 | InnerInstruction: 693 | type: object 694 | properties: 695 | index: 696 | type: integer 697 | format: int32 698 | instructions: 699 | type: array 700 | items: 701 | $ref: "#/components/schemas/Instruction" 702 | Instruction: 703 | type: object 704 | properties: 705 | programIdIndex: 706 | type: integer 707 | format: int32 708 | accounts: 709 | type: array 710 | items: 711 | type: integer 712 | format: int32 713 | data: 714 | type: string 715 | TokenBalance: 716 | type: object 717 | properties: 718 | accountIndex: 719 | type: integer 720 | format: int32 721 | mint: 722 | type: string 723 | owner: 724 | type: string 725 | nullable: true 726 | programId: 727 | type: string 728 | nullable: true 729 | uiTokenAmount: 730 | $ref: "#/components/schemas/UiTokenAmount" 731 | UiTokenAmount: 732 | type: object 733 | properties: 734 | amount: 735 | type: string 736 | decimals: 737 | type: integer 738 | format: int32 739 | uiAmount: 740 | type: number 741 | nullable: true 742 | deprecated: true 743 | uiAmountString: 744 | type: string 745 | Reward: 746 | type: object 747 | properties: 748 | pubkey: 749 | type: string 750 | lamports: 751 | type: integer 752 | format: int64 753 | postBalance: 754 | type: integer 755 | format: uint64 756 | rewardType: 757 | type: string 758 | commission: 759 | type: integer 760 | format: uint8 761 | nullable: true 762 | getCollectionsByFloorPriceRequest: 763 | type: object 764 | properties: 765 | maxFloorPrice: 766 | type: number 767 | nullable: true 768 | minFloorPrice: 769 | type: number 770 | nullable: true 771 | orderBy: 772 | type: string 773 | enum: 774 | - ASC 775 | - DESC 776 | nullable: true 777 | getCollectionsByFloorPriceResponse: 778 | type: object 779 | properties: 780 | hasMore: 781 | type: boolean 782 | currentPage: 783 | type: number 784 | projects: 785 | type: array 786 | items: { $ref: "#/components/schemas/CollectionResponse" } 787 | CollectionResponse: 788 | type: object 789 | properties: 790 | id: 791 | type: string 792 | desc: 793 | type: string 794 | img: 795 | type: string 796 | website: 797 | type: string 798 | floor_price: 799 | type: number 800 | createBuyTransactionRequest: 801 | type: object 802 | properties: 803 | token: 804 | type: string 805 | price: 806 | type: number 807 | createWriteNFTMetadataRequest: 808 | type: object 809 | properties: 810 | image: 811 | type: string 812 | createCloseNFTMetadataRequest: 813 | type: object 814 | properties: 815 | account: 816 | type: string 817 | createTransferTokenRequest: 818 | type: object 819 | properties: 820 | amount: 821 | type: string 822 | destination: 823 | type: string 824 | mint: 825 | type: string 826 | createTransferSolRequest: 827 | type: object 828 | properties: 829 | amount: 830 | type: string 831 | destination: 832 | type: string 833 | transactionResponse: 834 | type: object 835 | properties: 836 | linkToSign: 837 | type: string 838 | getListedCollectionNFTsRequest: 839 | type: object 840 | properties: 841 | projectId: 842 | type: string 843 | priceOrder: 844 | type: string 845 | nullable: true 846 | pageSize: 847 | type: number 848 | nullable: true 849 | getListedCollectionNFTsResponse: 850 | type: object 851 | properties: 852 | listings: 853 | type: array 854 | items: { $ref: "#/components/schemas/ListedNFT" } 855 | hasMore: 856 | type: boolean 857 | ListedNFT: 858 | type: object 859 | properties: 860 | price: 861 | type: number 862 | token: 863 | type: string 864 | image: 865 | type: string 866 | marketplace: 867 | type: string 868 | securitySchemes: 869 | HTTPBearer: 870 | type: http 871 | scheme: bearer 872 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "aiohttp" 5 | version = "3.8.4" 6 | description = "Async http client/server framework (asyncio)" 7 | category = "main" 8 | optional = false 9 | python-versions = ">=3.6" 10 | files = [ 11 | {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1"}, 12 | {file = "aiohttp-3.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a"}, 13 | {file = "aiohttp-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b"}, 14 | {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3"}, 15 | {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc"}, 16 | {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd"}, 17 | {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5"}, 18 | {file = "aiohttp-3.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e"}, 19 | {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd"}, 20 | {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6"}, 21 | {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9"}, 22 | {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949"}, 23 | {file = "aiohttp-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea"}, 24 | {file = "aiohttp-3.8.4-cp310-cp310-win32.whl", hash = "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1"}, 25 | {file = "aiohttp-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f"}, 26 | {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4"}, 27 | {file = "aiohttp-3.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4"}, 28 | {file = "aiohttp-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef"}, 29 | {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f"}, 30 | {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e"}, 31 | {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f"}, 32 | {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05"}, 33 | {file = "aiohttp-3.8.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654"}, 34 | {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a"}, 35 | {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb"}, 36 | {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531"}, 37 | {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b"}, 38 | {file = "aiohttp-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24"}, 39 | {file = "aiohttp-3.8.4-cp311-cp311-win32.whl", hash = "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d"}, 40 | {file = "aiohttp-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc"}, 41 | {file = "aiohttp-3.8.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51"}, 42 | {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6"}, 43 | {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131"}, 44 | {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75"}, 45 | {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01"}, 46 | {file = "aiohttp-3.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622"}, 47 | {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41"}, 48 | {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36"}, 49 | {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99"}, 50 | {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71"}, 51 | {file = "aiohttp-3.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff"}, 52 | {file = "aiohttp-3.8.4-cp36-cp36m-win32.whl", hash = "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777"}, 53 | {file = "aiohttp-3.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e"}, 54 | {file = "aiohttp-3.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519"}, 55 | {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f"}, 56 | {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9"}, 57 | {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b"}, 58 | {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab"}, 59 | {file = "aiohttp-3.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332"}, 60 | {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333"}, 61 | {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9"}, 62 | {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699"}, 63 | {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6"}, 64 | {file = "aiohttp-3.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241"}, 65 | {file = "aiohttp-3.8.4-cp37-cp37m-win32.whl", hash = "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a"}, 66 | {file = "aiohttp-3.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480"}, 67 | {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f"}, 68 | {file = "aiohttp-3.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15"}, 69 | {file = "aiohttp-3.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945"}, 70 | {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da"}, 71 | {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd"}, 72 | {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10"}, 73 | {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8"}, 74 | {file = "aiohttp-3.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a"}, 75 | {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074"}, 76 | {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52"}, 77 | {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71"}, 78 | {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275"}, 79 | {file = "aiohttp-3.8.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d"}, 80 | {file = "aiohttp-3.8.4-cp38-cp38-win32.whl", hash = "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54"}, 81 | {file = "aiohttp-3.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f"}, 82 | {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed"}, 83 | {file = "aiohttp-3.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567"}, 84 | {file = "aiohttp-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643"}, 85 | {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a"}, 86 | {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf"}, 87 | {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719"}, 88 | {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2"}, 89 | {file = "aiohttp-3.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e"}, 90 | {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57"}, 91 | {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391"}, 92 | {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2"}, 93 | {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14"}, 94 | {file = "aiohttp-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4"}, 95 | {file = "aiohttp-3.8.4-cp39-cp39-win32.whl", hash = "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a"}, 96 | {file = "aiohttp-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04"}, 97 | {file = "aiohttp-3.8.4.tar.gz", hash = "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c"}, 98 | ] 99 | 100 | [package.dependencies] 101 | aiosignal = ">=1.1.2" 102 | async-timeout = ">=4.0.0a3,<5.0" 103 | attrs = ">=17.3.0" 104 | charset-normalizer = ">=2.0,<4.0" 105 | frozenlist = ">=1.1.1" 106 | multidict = ">=4.5,<7.0" 107 | yarl = ">=1.0,<2.0" 108 | 109 | [package.extras] 110 | speedups = ["Brotli", "aiodns", "cchardet"] 111 | 112 | [[package]] 113 | name = "aiosignal" 114 | version = "1.3.1" 115 | description = "aiosignal: a list of registered asynchronous callbacks" 116 | category = "main" 117 | optional = false 118 | python-versions = ">=3.7" 119 | files = [ 120 | {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, 121 | {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, 122 | ] 123 | 124 | [package.dependencies] 125 | frozenlist = ">=1.1.0" 126 | 127 | [[package]] 128 | name = "async-timeout" 129 | version = "4.0.2" 130 | description = "Timeout context manager for asyncio programs" 131 | category = "main" 132 | optional = false 133 | python-versions = ">=3.6" 134 | files = [ 135 | {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, 136 | {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, 137 | ] 138 | 139 | [[package]] 140 | name = "attrs" 141 | version = "22.2.0" 142 | description = "Classes Without Boilerplate" 143 | category = "main" 144 | optional = false 145 | python-versions = ">=3.6" 146 | files = [ 147 | {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, 148 | {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, 149 | ] 150 | 151 | [package.extras] 152 | cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] 153 | dev = ["attrs[docs,tests]"] 154 | docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] 155 | tests = ["attrs[tests-no-zope]", "zope.interface"] 156 | tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] 157 | 158 | [[package]] 159 | name = "certifi" 160 | version = "2022.12.7" 161 | description = "Python package for providing Mozilla's CA Bundle." 162 | category = "main" 163 | optional = false 164 | python-versions = ">=3.6" 165 | files = [ 166 | {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, 167 | {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, 168 | ] 169 | 170 | [[package]] 171 | name = "charset-normalizer" 172 | version = "3.1.0" 173 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 174 | category = "main" 175 | optional = false 176 | python-versions = ">=3.7.0" 177 | files = [ 178 | {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, 179 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, 180 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, 181 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, 182 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, 183 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, 184 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, 185 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, 186 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, 187 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, 188 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, 189 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, 190 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, 191 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, 192 | {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, 193 | {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, 194 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, 195 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, 196 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, 197 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, 198 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, 199 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, 200 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, 201 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, 202 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, 203 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, 204 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, 205 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, 206 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, 207 | {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, 208 | {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, 209 | {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, 210 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, 211 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, 212 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, 213 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, 214 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, 215 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, 216 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, 217 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, 218 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, 219 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, 220 | {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, 221 | {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, 222 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, 223 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, 224 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, 225 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, 226 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, 227 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, 228 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, 229 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, 230 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, 231 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, 232 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, 233 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, 234 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, 235 | {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, 236 | {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, 237 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, 238 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, 239 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, 240 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, 241 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, 242 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, 243 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, 244 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, 245 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, 246 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, 247 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, 248 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, 249 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, 250 | {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, 251 | {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, 252 | {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, 253 | ] 254 | 255 | [[package]] 256 | name = "colorama" 257 | version = "0.4.6" 258 | description = "Cross-platform colored terminal text." 259 | category = "main" 260 | optional = false 261 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 262 | files = [ 263 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 264 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 265 | ] 266 | 267 | [[package]] 268 | name = "dataclasses-json" 269 | version = "0.5.7" 270 | description = "Easily serialize dataclasses to and from JSON" 271 | category = "main" 272 | optional = false 273 | python-versions = ">=3.6" 274 | files = [ 275 | {file = "dataclasses-json-0.5.7.tar.gz", hash = "sha256:c2c11bc8214fbf709ffc369d11446ff6945254a7f09128154a7620613d8fda90"}, 276 | {file = "dataclasses_json-0.5.7-py3-none-any.whl", hash = "sha256:bc285b5f892094c3a53d558858a88553dd6a61a11ab1a8128a0e554385dcc5dd"}, 277 | ] 278 | 279 | [package.dependencies] 280 | marshmallow = ">=3.3.0,<4.0.0" 281 | marshmallow-enum = ">=1.5.1,<2.0.0" 282 | typing-inspect = ">=0.4.0" 283 | 284 | [package.extras] 285 | dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest (>=6.2.3)", "simplejson", "types-dataclasses"] 286 | 287 | [[package]] 288 | name = "frozenlist" 289 | version = "1.3.3" 290 | description = "A list-like structure which implements collections.abc.MutableSequence" 291 | category = "main" 292 | optional = false 293 | python-versions = ">=3.7" 294 | files = [ 295 | {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"}, 296 | {file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"}, 297 | {file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"}, 298 | {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7"}, 299 | {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99"}, 300 | {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483"}, 301 | {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd"}, 302 | {file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf"}, 303 | {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816"}, 304 | {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0"}, 305 | {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce"}, 306 | {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f"}, 307 | {file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420"}, 308 | {file = "frozenlist-1.3.3-cp310-cp310-win32.whl", hash = "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642"}, 309 | {file = "frozenlist-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1"}, 310 | {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7"}, 311 | {file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678"}, 312 | {file = "frozenlist-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6"}, 313 | {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8"}, 314 | {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb"}, 315 | {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91"}, 316 | {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b"}, 317 | {file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4"}, 318 | {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48"}, 319 | {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d"}, 320 | {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6"}, 321 | {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4"}, 322 | {file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81"}, 323 | {file = "frozenlist-1.3.3-cp311-cp311-win32.whl", hash = "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8"}, 324 | {file = "frozenlist-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32"}, 325 | {file = "frozenlist-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332"}, 326 | {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27"}, 327 | {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d"}, 328 | {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e"}, 329 | {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d"}, 330 | {file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c"}, 331 | {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56"}, 332 | {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420"}, 333 | {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e"}, 334 | {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb"}, 335 | {file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401"}, 336 | {file = "frozenlist-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a"}, 337 | {file = "frozenlist-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411"}, 338 | {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a"}, 339 | {file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5"}, 340 | {file = "frozenlist-1.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e"}, 341 | {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c"}, 342 | {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba"}, 343 | {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703"}, 344 | {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2"}, 345 | {file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448"}, 346 | {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4"}, 347 | {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649"}, 348 | {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842"}, 349 | {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13"}, 350 | {file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3"}, 351 | {file = "frozenlist-1.3.3-cp38-cp38-win32.whl", hash = "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b"}, 352 | {file = "frozenlist-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef"}, 353 | {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf"}, 354 | {file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1"}, 355 | {file = "frozenlist-1.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0"}, 356 | {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d"}, 357 | {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936"}, 358 | {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5"}, 359 | {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b"}, 360 | {file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669"}, 361 | {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb"}, 362 | {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784"}, 363 | {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d"}, 364 | {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab"}, 365 | {file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1"}, 366 | {file = "frozenlist-1.3.3-cp39-cp39-win32.whl", hash = "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38"}, 367 | {file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"}, 368 | {file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"}, 369 | ] 370 | 371 | [[package]] 372 | name = "greenlet" 373 | version = "2.0.2" 374 | description = "Lightweight in-process concurrent programming" 375 | category = "main" 376 | optional = false 377 | python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" 378 | files = [ 379 | {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, 380 | {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, 381 | {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, 382 | {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, 383 | {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, 384 | {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, 385 | {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, 386 | {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, 387 | {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, 388 | {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, 389 | {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, 390 | {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, 391 | {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, 392 | {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, 393 | {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, 394 | {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, 395 | {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, 396 | {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, 397 | {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, 398 | {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, 399 | {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, 400 | {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, 401 | {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, 402 | {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, 403 | {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, 404 | {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, 405 | {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, 406 | {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, 407 | {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, 408 | {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, 409 | {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, 410 | {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, 411 | {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, 412 | {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, 413 | {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, 414 | {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, 415 | {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, 416 | {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, 417 | {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, 418 | {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, 419 | {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, 420 | {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, 421 | {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, 422 | {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, 423 | {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, 424 | {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, 425 | {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, 426 | {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, 427 | {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, 428 | {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, 429 | {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, 430 | {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, 431 | {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, 432 | {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, 433 | {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, 434 | {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, 435 | {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, 436 | {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, 437 | {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, 438 | {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, 439 | ] 440 | 441 | [package.extras] 442 | docs = ["Sphinx", "docutils (<0.18)"] 443 | test = ["objgraph", "psutil"] 444 | 445 | [[package]] 446 | name = "idna" 447 | version = "3.4" 448 | description = "Internationalized Domain Names in Applications (IDNA)" 449 | category = "main" 450 | optional = false 451 | python-versions = ">=3.5" 452 | files = [ 453 | {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, 454 | {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, 455 | ] 456 | 457 | [[package]] 458 | name = "langchain" 459 | version = "0.0.136" 460 | description = "Building applications with LLMs through composability" 461 | category = "main" 462 | optional = false 463 | python-versions = ">=3.8.1,<4.0" 464 | files = [ 465 | {file = "langchain-0.0.136-py3-none-any.whl", hash = "sha256:b920c8dc202f82a998a31c7fc70733a6fd1761902ab20d725c0b60d62c94dcab"}, 466 | {file = "langchain-0.0.136.tar.gz", hash = "sha256:6ab89b1d0d350792fba1cfe5f236f97d3484490b7ed61294156a1ddd8b68f187"}, 467 | ] 468 | 469 | [package.dependencies] 470 | aiohttp = ">=3.8.3,<4.0.0" 471 | async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} 472 | dataclasses-json = ">=0.5.7,<0.6.0" 473 | numpy = ">=1,<2" 474 | openapi-schema-pydantic = ">=1.2,<2.0" 475 | pydantic = ">=1,<2" 476 | PyYAML = ">=5.4.1" 477 | requests = ">=2,<3" 478 | SQLAlchemy = ">=1,<2" 479 | tenacity = ">=8.1.0,<9.0.0" 480 | 481 | [package.extras] 482 | all = ["aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.2.4,<0.3.0)", "beautifulsoup4 (>=4,<5)", "cohere (>=3,<4)", "deeplake (>=3.2.21,<4.0.0)", "elasticsearch (>=8,<9)", "faiss-cpu (>=1,<2)", "google-api-python-client (==2.70.0)", "google-search-results (>=2,<3)", "huggingface_hub (>=0,<1)", "jina (>=3.14,<4.0)", "jinja2 (>=3,<4)", "manifest-ml (>=0.0.1,<0.0.2)", "networkx (>=2.6.3,<3.0.0)", "nlpcloud (>=1,<2)", "nltk (>=3,<4)", "nomic (>=1.0.43,<2.0.0)", "openai (>=0,<1)", "opensearch-py (>=2.0.0,<3.0.0)", "pgvector (>=0.1.6,<0.2.0)", "pinecone-client (>=2,<3)", "psycopg2-binary (>=2.9.5,<3.0.0)", "pyowm (>=3.3.0,<4.0.0)", "pypdf (>=3.4.0,<4.0.0)", "qdrant-client (>=1.1.2,<2.0.0)", "redis (>=4,<5)", "sentence-transformers (>=2,<3)", "spacy (>=3,<4)", "tensorflow-text (>=2.11.0,<3.0.0)", "tiktoken (>=0.3.2,<0.4.0)", "torch (>=1,<2)", "transformers (>=4,<5)", "weaviate-client (>=3,<4)", "wikipedia (>=1,<2)", "wolframalpha (==5.0.0)"] 483 | cohere = ["cohere (>=3,<4)"] 484 | llms = ["anthropic (>=0.2.4,<0.3.0)", "cohere (>=3,<4)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (>=0,<1)", "torch (>=1,<2)", "transformers (>=4,<5)"] 485 | openai = ["openai (>=0,<1)"] 486 | qdrant = ["qdrant-client (>=1.1.2,<2.0.0)"] 487 | 488 | [[package]] 489 | name = "marshmallow" 490 | version = "3.19.0" 491 | description = "A lightweight library for converting complex datatypes to and from native Python datatypes." 492 | category = "main" 493 | optional = false 494 | python-versions = ">=3.7" 495 | files = [ 496 | {file = "marshmallow-3.19.0-py3-none-any.whl", hash = "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b"}, 497 | {file = "marshmallow-3.19.0.tar.gz", hash = "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78"}, 498 | ] 499 | 500 | [package.dependencies] 501 | packaging = ">=17.0" 502 | 503 | [package.extras] 504 | dev = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)", "pytest", "pytz", "simplejson", "tox"] 505 | docs = ["alabaster (==0.7.12)", "autodocsumm (==0.2.9)", "sphinx (==5.3.0)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] 506 | lint = ["flake8 (==5.0.4)", "flake8-bugbear (==22.10.25)", "mypy (==0.990)", "pre-commit (>=2.4,<3.0)"] 507 | tests = ["pytest", "pytz", "simplejson"] 508 | 509 | [[package]] 510 | name = "marshmallow-enum" 511 | version = "1.5.1" 512 | description = "Enum field for Marshmallow" 513 | category = "main" 514 | optional = false 515 | python-versions = "*" 516 | files = [ 517 | {file = "marshmallow-enum-1.5.1.tar.gz", hash = "sha256:38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58"}, 518 | {file = "marshmallow_enum-1.5.1-py2.py3-none-any.whl", hash = "sha256:57161ab3dbfde4f57adeb12090f39592e992b9c86d206d02f6bd03ebec60f072"}, 519 | ] 520 | 521 | [package.dependencies] 522 | marshmallow = ">=2.0.0" 523 | 524 | [[package]] 525 | name = "multidict" 526 | version = "6.0.4" 527 | description = "multidict implementation" 528 | category = "main" 529 | optional = false 530 | python-versions = ">=3.7" 531 | files = [ 532 | {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, 533 | {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, 534 | {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, 535 | {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, 536 | {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, 537 | {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, 538 | {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, 539 | {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, 540 | {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, 541 | {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, 542 | {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, 543 | {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, 544 | {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, 545 | {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, 546 | {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, 547 | {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, 548 | {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, 549 | {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, 550 | {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, 551 | {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, 552 | {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, 553 | {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, 554 | {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, 555 | {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, 556 | {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, 557 | {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, 558 | {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, 559 | {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, 560 | {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, 561 | {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, 562 | {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, 563 | {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, 564 | {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, 565 | {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, 566 | {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, 567 | {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, 568 | {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, 569 | {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, 570 | {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, 571 | {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, 572 | {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, 573 | {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, 574 | {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, 575 | {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, 576 | {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, 577 | {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, 578 | {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, 579 | {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, 580 | {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, 581 | {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, 582 | {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, 583 | {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, 584 | {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, 585 | {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, 586 | {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, 587 | {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, 588 | {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, 589 | {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, 590 | {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, 591 | {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, 592 | {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, 593 | {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, 594 | {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, 595 | {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, 596 | {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, 597 | {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, 598 | {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, 599 | {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, 600 | {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, 601 | {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, 602 | {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, 603 | {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, 604 | {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, 605 | {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, 606 | ] 607 | 608 | [[package]] 609 | name = "mypy-extensions" 610 | version = "1.0.0" 611 | description = "Type system extensions for programs checked with the mypy type checker." 612 | category = "main" 613 | optional = false 614 | python-versions = ">=3.5" 615 | files = [ 616 | {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, 617 | {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, 618 | ] 619 | 620 | [[package]] 621 | name = "numpy" 622 | version = "1.24.2" 623 | description = "Fundamental package for array computing in Python" 624 | category = "main" 625 | optional = false 626 | python-versions = ">=3.8" 627 | files = [ 628 | {file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"}, 629 | {file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"}, 630 | {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253"}, 631 | {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978"}, 632 | {file = "numpy-1.24.2-cp310-cp310-win32.whl", hash = "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9"}, 633 | {file = "numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"}, 634 | {file = "numpy-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a"}, 635 | {file = "numpy-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0"}, 636 | {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281"}, 637 | {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910"}, 638 | {file = "numpy-1.24.2-cp311-cp311-win32.whl", hash = "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95"}, 639 | {file = "numpy-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04"}, 640 | {file = "numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"}, 641 | {file = "numpy-1.24.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5"}, 642 | {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a"}, 643 | {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96"}, 644 | {file = "numpy-1.24.2-cp38-cp38-win32.whl", hash = "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d"}, 645 | {file = "numpy-1.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756"}, 646 | {file = "numpy-1.24.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a"}, 647 | {file = "numpy-1.24.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f"}, 648 | {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb"}, 649 | {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780"}, 650 | {file = "numpy-1.24.2-cp39-cp39-win32.whl", hash = "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468"}, 651 | {file = "numpy-1.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5"}, 652 | {file = "numpy-1.24.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d"}, 653 | {file = "numpy-1.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa"}, 654 | {file = "numpy-1.24.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f"}, 655 | {file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"}, 656 | ] 657 | 658 | [[package]] 659 | name = "openai" 660 | version = "0.27.4" 661 | description = "Python client library for the OpenAI API" 662 | category = "main" 663 | optional = false 664 | python-versions = ">=3.7.1" 665 | files = [ 666 | {file = "openai-0.27.4-py3-none-any.whl", hash = "sha256:3b82c867d531e1fd2003d9de2131e1c4bfd4c70b1a3149e0543a555b30807b70"}, 667 | {file = "openai-0.27.4.tar.gz", hash = "sha256:9f9d27d26e62c6068f516c0729449954b5ef6994be1a6cbfe7dbefbc84423a04"}, 668 | ] 669 | 670 | [package.dependencies] 671 | aiohttp = "*" 672 | requests = ">=2.20" 673 | tqdm = "*" 674 | 675 | [package.extras] 676 | datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] 677 | dev = ["black (>=21.6b0,<22.0)", "pytest (>=6.0.0,<7.0.0)", "pytest-asyncio", "pytest-mock"] 678 | embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"] 679 | wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"] 680 | 681 | [[package]] 682 | name = "openapi-schema-pydantic" 683 | version = "1.2.4" 684 | description = "OpenAPI (v3) specification schema as pydantic class" 685 | category = "main" 686 | optional = false 687 | python-versions = ">=3.6.1" 688 | files = [ 689 | {file = "openapi-schema-pydantic-1.2.4.tar.gz", hash = "sha256:3e22cf58b74a69f752cc7e5f1537f6e44164282db2700cbbcd3bb99ddd065196"}, 690 | {file = "openapi_schema_pydantic-1.2.4-py3-none-any.whl", hash = "sha256:a932ecc5dcbb308950282088956e94dea069c9823c84e507d64f6b622222098c"}, 691 | ] 692 | 693 | [package.dependencies] 694 | pydantic = ">=1.8.2" 695 | 696 | [[package]] 697 | name = "packaging" 698 | version = "23.0" 699 | description = "Core utilities for Python packages" 700 | category = "main" 701 | optional = false 702 | python-versions = ">=3.7" 703 | files = [ 704 | {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, 705 | {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, 706 | ] 707 | 708 | [[package]] 709 | name = "pydantic" 710 | version = "1.10.7" 711 | description = "Data validation and settings management using python type hints" 712 | category = "main" 713 | optional = false 714 | python-versions = ">=3.7" 715 | files = [ 716 | {file = "pydantic-1.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e79e999e539872e903767c417c897e729e015872040e56b96e67968c3b918b2d"}, 717 | {file = "pydantic-1.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:01aea3a42c13f2602b7ecbbea484a98169fb568ebd9e247593ea05f01b884b2e"}, 718 | {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:516f1ed9bc2406a0467dd777afc636c7091d71f214d5e413d64fef45174cfc7a"}, 719 | {file = "pydantic-1.10.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae150a63564929c675d7f2303008d88426a0add46efd76c3fc797cd71cb1b46f"}, 720 | {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ecbbc51391248116c0a055899e6c3e7ffbb11fb5e2a4cd6f2d0b93272118a209"}, 721 | {file = "pydantic-1.10.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f4a2b50e2b03d5776e7f21af73e2070e1b5c0d0df255a827e7c632962f8315af"}, 722 | {file = "pydantic-1.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:a7cd2251439988b413cb0a985c4ed82b6c6aac382dbaff53ae03c4b23a70e80a"}, 723 | {file = "pydantic-1.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:68792151e174a4aa9e9fc1b4e653e65a354a2fa0fed169f7b3d09902ad2cb6f1"}, 724 | {file = "pydantic-1.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe2507b8ef209da71b6fb5f4e597b50c5a34b78d7e857c4f8f3115effaef5fe"}, 725 | {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a86d8c8db68086f1e30a530f7d5f83eb0685e632e411dbbcf2d5c0150e8dcd"}, 726 | {file = "pydantic-1.10.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75ae19d2a3dbb146b6f324031c24f8a3f52ff5d6a9f22f0683694b3afcb16fb"}, 727 | {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:464855a7ff7f2cc2cf537ecc421291b9132aa9c79aef44e917ad711b4a93163b"}, 728 | {file = "pydantic-1.10.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:193924c563fae6ddcb71d3f06fa153866423ac1b793a47936656e806b64e24ca"}, 729 | {file = "pydantic-1.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:b4a849d10f211389502059c33332e91327bc154acc1845f375a99eca3afa802d"}, 730 | {file = "pydantic-1.10.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cc1dde4e50a5fc1336ee0581c1612215bc64ed6d28d2c7c6f25d2fe3e7c3e918"}, 731 | {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0cfe895a504c060e5d36b287ee696e2fdad02d89e0d895f83037245218a87fe"}, 732 | {file = "pydantic-1.10.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:670bb4683ad1e48b0ecb06f0cfe2178dcf74ff27921cdf1606e527d2617a81ee"}, 733 | {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:950ce33857841f9a337ce07ddf46bc84e1c4946d2a3bba18f8280297157a3fd1"}, 734 | {file = "pydantic-1.10.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c15582f9055fbc1bfe50266a19771bbbef33dd28c45e78afbe1996fd70966c2a"}, 735 | {file = "pydantic-1.10.7-cp37-cp37m-win_amd64.whl", hash = "sha256:82dffb306dd20bd5268fd6379bc4bfe75242a9c2b79fec58e1041fbbdb1f7914"}, 736 | {file = "pydantic-1.10.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c7f51861d73e8b9ddcb9916ae7ac39fb52761d9ea0df41128e81e2ba42886cd"}, 737 | {file = "pydantic-1.10.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6434b49c0b03a51021ade5c4daa7d70c98f7a79e95b551201fff682fc1661245"}, 738 | {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64d34ab766fa056df49013bb6e79921a0265204c071984e75a09cbceacbbdd5d"}, 739 | {file = "pydantic-1.10.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:701daea9ffe9d26f97b52f1d157e0d4121644f0fcf80b443248434958fd03dc3"}, 740 | {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf135c46099ff3f919d2150a948ce94b9ce545598ef2c6c7bf55dca98a304b52"}, 741 | {file = "pydantic-1.10.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0f85904f73161817b80781cc150f8b906d521fa11e3cdabae19a581c3606209"}, 742 | {file = "pydantic-1.10.7-cp38-cp38-win_amd64.whl", hash = "sha256:9f6f0fd68d73257ad6685419478c5aece46432f4bdd8d32c7345f1986496171e"}, 743 | {file = "pydantic-1.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c230c0d8a322276d6e7b88c3f7ce885f9ed16e0910354510e0bae84d54991143"}, 744 | {file = "pydantic-1.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:976cae77ba6a49d80f461fd8bba183ff7ba79f44aa5cfa82f1346b5626542f8e"}, 745 | {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d45fc99d64af9aaf7e308054a0067fdcd87ffe974f2442312372dfa66e1001d"}, 746 | {file = "pydantic-1.10.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2a5ebb48958754d386195fe9e9c5106f11275867051bf017a8059410e9abf1f"}, 747 | {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:abfb7d4a7cd5cc4e1d1887c43503a7c5dd608eadf8bc615413fc498d3e4645cd"}, 748 | {file = "pydantic-1.10.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80b1fab4deb08a8292d15e43a6edccdffa5377a36a4597bb545b93e79c5ff0a5"}, 749 | {file = "pydantic-1.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:d71e69699498b020ea198468e2480a2f1e7433e32a3a99760058c6520e2bea7e"}, 750 | {file = "pydantic-1.10.7-py3-none-any.whl", hash = "sha256:0cd181f1d0b1d00e2b705f1bf1ac7799a2d938cce3376b8007df62b29be3c2c6"}, 751 | {file = "pydantic-1.10.7.tar.gz", hash = "sha256:cfc83c0678b6ba51b0532bea66860617c4cd4251ecf76e9846fa5a9f3454e97e"}, 752 | ] 753 | 754 | [package.dependencies] 755 | typing-extensions = ">=4.2.0" 756 | 757 | [package.extras] 758 | dotenv = ["python-dotenv (>=0.10.4)"] 759 | email = ["email-validator (>=1.0.3)"] 760 | 761 | [[package]] 762 | name = "pyyaml" 763 | version = "6.0" 764 | description = "YAML parser and emitter for Python" 765 | category = "main" 766 | optional = false 767 | python-versions = ">=3.6" 768 | files = [ 769 | {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, 770 | {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, 771 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, 772 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, 773 | {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, 774 | {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, 775 | {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, 776 | {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, 777 | {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, 778 | {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, 779 | {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, 780 | {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, 781 | {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, 782 | {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, 783 | {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, 784 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, 785 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, 786 | {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, 787 | {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, 788 | {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, 789 | {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, 790 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, 791 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, 792 | {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, 793 | {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, 794 | {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, 795 | {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, 796 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, 797 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, 798 | {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, 799 | {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, 800 | {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, 801 | {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, 802 | {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, 803 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, 804 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, 805 | {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, 806 | {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, 807 | {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, 808 | {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, 809 | ] 810 | 811 | [[package]] 812 | name = "requests" 813 | version = "2.28.2" 814 | description = "Python HTTP for Humans." 815 | category = "main" 816 | optional = false 817 | python-versions = ">=3.7, <4" 818 | files = [ 819 | {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, 820 | {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, 821 | ] 822 | 823 | [package.dependencies] 824 | certifi = ">=2017.4.17" 825 | charset-normalizer = ">=2,<4" 826 | idna = ">=2.5,<4" 827 | urllib3 = ">=1.21.1,<1.27" 828 | 829 | [package.extras] 830 | socks = ["PySocks (>=1.5.6,!=1.5.7)"] 831 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] 832 | 833 | [[package]] 834 | name = "sqlalchemy" 835 | version = "1.4.47" 836 | description = "Database Abstraction Library" 837 | category = "main" 838 | optional = false 839 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" 840 | files = [ 841 | {file = "SQLAlchemy-1.4.47-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:dcfb480bfc9e1fab726003ae00a6bfc67a29bad275b63a4e36d17fe7f13a624e"}, 842 | {file = "SQLAlchemy-1.4.47-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:28fda5a69d6182589892422c5a9b02a8fd1125787aab1d83f1392aa955bf8d0a"}, 843 | {file = "SQLAlchemy-1.4.47-cp27-cp27m-win32.whl", hash = "sha256:45e799c1a41822eba6bee4e59b0e38764e1a1ee69873ab2889079865e9ea0e23"}, 844 | {file = "SQLAlchemy-1.4.47-cp27-cp27m-win_amd64.whl", hash = "sha256:10edbb92a9ef611f01b086e271a9f6c1c3e5157c3b0c5ff62310fb2187acbd4a"}, 845 | {file = "SQLAlchemy-1.4.47-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7a4df53472c9030a8ddb1cce517757ba38a7a25699bbcabd57dcc8a5d53f324e"}, 846 | {file = "SQLAlchemy-1.4.47-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:511d4abc823152dec49461209607bbfb2df60033c8c88a3f7c93293b8ecbb13d"}, 847 | {file = "SQLAlchemy-1.4.47-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbe57f39f531c5d68d5594ea4613daa60aba33bb51a8cc42f96f17bbd6305e8d"}, 848 | {file = "SQLAlchemy-1.4.47-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca8ab6748e3ec66afccd8b23ec2f92787a58d5353ce9624dccd770427ee67c82"}, 849 | {file = "SQLAlchemy-1.4.47-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299b5c5c060b9fbe51808d0d40d8475f7b3873317640b9b7617c7f988cf59fda"}, 850 | {file = "SQLAlchemy-1.4.47-cp310-cp310-win32.whl", hash = "sha256:684e5c773222781775c7f77231f412633d8af22493bf35b7fa1029fdf8066d10"}, 851 | {file = "SQLAlchemy-1.4.47-cp310-cp310-win_amd64.whl", hash = "sha256:2bba39b12b879c7b35cde18b6e14119c5f1a16bd064a48dd2ac62d21366a5e17"}, 852 | {file = "SQLAlchemy-1.4.47-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:795b5b9db573d3ed61fae74285d57d396829e3157642794d3a8f72ec2a5c719b"}, 853 | {file = "SQLAlchemy-1.4.47-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:989c62b96596b7938cbc032e39431e6c2d81b635034571d6a43a13920852fb65"}, 854 | {file = "SQLAlchemy-1.4.47-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b67bda733da1dcdccaf354e71ef01b46db483a4f6236450d3f9a61efdba35a"}, 855 | {file = "SQLAlchemy-1.4.47-cp311-cp311-win32.whl", hash = "sha256:9a198f690ac12a3a807e03a5a45df6a30cd215935f237a46f4248faed62e69c8"}, 856 | {file = "SQLAlchemy-1.4.47-cp311-cp311-win_amd64.whl", hash = "sha256:03be6f3cb66e69fb3a09b5ea89d77e4bc942f3bf84b207dba84666a26799c166"}, 857 | {file = "SQLAlchemy-1.4.47-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:16ee6fea316790980779268da47a9260d5dd665c96f225d28e7750b0bb2e2a04"}, 858 | {file = "SQLAlchemy-1.4.47-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:557675e0befafa08d36d7a9284e8761c97490a248474d778373fb96b0d7fd8de"}, 859 | {file = "SQLAlchemy-1.4.47-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb2797fee8a7914fb2c3dc7de404d3f96eb77f20fc60e9ee38dc6b0ca720f2c2"}, 860 | {file = "SQLAlchemy-1.4.47-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28297aa29e035f29cba6b16aacd3680fbc6a9db682258d5f2e7b49ec215dbe40"}, 861 | {file = "SQLAlchemy-1.4.47-cp36-cp36m-win32.whl", hash = "sha256:998e782c8d9fd57fa8704d149ccd52acf03db30d7dd76f467fd21c1c21b414fa"}, 862 | {file = "SQLAlchemy-1.4.47-cp36-cp36m-win_amd64.whl", hash = "sha256:dde4d02213f1deb49eaaf8be8a6425948963a7af84983b3f22772c63826944de"}, 863 | {file = "SQLAlchemy-1.4.47-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:e98ef1babe34f37f443b7211cd3ee004d9577a19766e2dbacf62fce73c76245a"}, 864 | {file = "SQLAlchemy-1.4.47-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14a3879853208a242b5913f3a17c6ac0eae9dc210ff99c8f10b19d4a1ed8ed9b"}, 865 | {file = "SQLAlchemy-1.4.47-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7120a2f72599d4fed7c001fa1cbbc5b4d14929436135768050e284f53e9fbe5e"}, 866 | {file = "SQLAlchemy-1.4.47-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:048509d7f3ac27b83ad82fd96a1ab90a34c8e906e4e09c8d677fc531d12c23c5"}, 867 | {file = "SQLAlchemy-1.4.47-cp37-cp37m-win32.whl", hash = "sha256:6572d7c96c2e3e126d0bb27bfb1d7e2a195b68d951fcc64c146b94f088e5421a"}, 868 | {file = "SQLAlchemy-1.4.47-cp37-cp37m-win_amd64.whl", hash = "sha256:a6c3929df5eeaf3867724003d5c19fed3f0c290f3edc7911616616684f200ecf"}, 869 | {file = "SQLAlchemy-1.4.47-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:71d4bf7768169c4502f6c2b0709a02a33703544f611810fb0c75406a9c576ee1"}, 870 | {file = "SQLAlchemy-1.4.47-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd45c60cc4f6d68c30d5179e2c2c8098f7112983532897566bb69c47d87127d3"}, 871 | {file = "SQLAlchemy-1.4.47-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0fdbb8e9d4e9003f332a93d6a37bca48ba8095086c97a89826a136d8eddfc455"}, 872 | {file = "SQLAlchemy-1.4.47-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f216a51451a0a0466e082e163591f6dcb2f9ec182adb3f1f4b1fd3688c7582c"}, 873 | {file = "SQLAlchemy-1.4.47-cp38-cp38-win32.whl", hash = "sha256:bd988b3362d7e586ef581eb14771bbb48793a4edb6fcf62da75d3f0f3447060b"}, 874 | {file = "SQLAlchemy-1.4.47-cp38-cp38-win_amd64.whl", hash = "sha256:32ab09f2863e3de51529aa84ff0e4fe89a2cb1bfbc11e225b6dbc60814e44c94"}, 875 | {file = "SQLAlchemy-1.4.47-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:07764b240645627bc3e82596435bd1a1884646bfc0721642d24c26b12f1df194"}, 876 | {file = "SQLAlchemy-1.4.47-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e2a42017984099ef6f56438a6b898ce0538f6fadddaa902870c5aa3e1d82583"}, 877 | {file = "SQLAlchemy-1.4.47-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6b6d807c76c20b4bc143a49ad47782228a2ac98bdcdcb069da54280e138847fc"}, 878 | {file = "SQLAlchemy-1.4.47-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a94632ba26a666e7be0a7d7cc3f7acab622a04259a3aa0ee50ff6d44ba9df0d"}, 879 | {file = "SQLAlchemy-1.4.47-cp39-cp39-win32.whl", hash = "sha256:f80915681ea9001f19b65aee715115f2ad310730c8043127cf3e19b3009892dd"}, 880 | {file = "SQLAlchemy-1.4.47-cp39-cp39-win_amd64.whl", hash = "sha256:fc700b862e0a859a37faf85367e205e7acaecae5a098794aff52fdd8aea77b12"}, 881 | {file = "SQLAlchemy-1.4.47.tar.gz", hash = "sha256:95fc02f7fc1f3199aaa47a8a757437134cf618e9d994c84effd53f530c38586f"}, 882 | ] 883 | 884 | [package.dependencies] 885 | greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} 886 | 887 | [package.extras] 888 | aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] 889 | aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] 890 | asyncio = ["greenlet (!=0.4.17)"] 891 | asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] 892 | mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)"] 893 | mssql = ["pyodbc"] 894 | mssql-pymssql = ["pymssql"] 895 | mssql-pyodbc = ["pyodbc"] 896 | mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] 897 | mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] 898 | mysql-connector = ["mysql-connector-python"] 899 | oracle = ["cx-oracle (>=7)", "cx-oracle (>=7,<8)"] 900 | postgresql = ["psycopg2 (>=2.7)"] 901 | postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] 902 | postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)"] 903 | postgresql-psycopg2binary = ["psycopg2-binary"] 904 | postgresql-psycopg2cffi = ["psycopg2cffi"] 905 | pymysql = ["pymysql", "pymysql (<1)"] 906 | sqlcipher = ["sqlcipher3-binary"] 907 | 908 | [[package]] 909 | name = "tenacity" 910 | version = "8.2.2" 911 | description = "Retry code until it succeeds" 912 | category = "main" 913 | optional = false 914 | python-versions = ">=3.6" 915 | files = [ 916 | {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, 917 | {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, 918 | ] 919 | 920 | [package.extras] 921 | doc = ["reno", "sphinx", "tornado (>=4.5)"] 922 | 923 | [[package]] 924 | name = "tqdm" 925 | version = "4.65.0" 926 | description = "Fast, Extensible Progress Meter" 927 | category = "main" 928 | optional = false 929 | python-versions = ">=3.7" 930 | files = [ 931 | {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, 932 | {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, 933 | ] 934 | 935 | [package.dependencies] 936 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 937 | 938 | [package.extras] 939 | dev = ["py-make (>=0.1.0)", "twine", "wheel"] 940 | notebook = ["ipywidgets (>=6)"] 941 | slack = ["slack-sdk"] 942 | telegram = ["requests"] 943 | 944 | [[package]] 945 | name = "typing-extensions" 946 | version = "4.5.0" 947 | description = "Backported and Experimental Type Hints for Python 3.7+" 948 | category = "main" 949 | optional = false 950 | python-versions = ">=3.7" 951 | files = [ 952 | {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, 953 | {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, 954 | ] 955 | 956 | [[package]] 957 | name = "typing-inspect" 958 | version = "0.8.0" 959 | description = "Runtime inspection utilities for typing module." 960 | category = "main" 961 | optional = false 962 | python-versions = "*" 963 | files = [ 964 | {file = "typing_inspect-0.8.0-py3-none-any.whl", hash = "sha256:5fbf9c1e65d4fa01e701fe12a5bca6c6e08a4ffd5bc60bfac028253a447c5188"}, 965 | {file = "typing_inspect-0.8.0.tar.gz", hash = "sha256:8b1ff0c400943b6145df8119c41c244ca8207f1f10c9c057aeed1560e4806e3d"}, 966 | ] 967 | 968 | [package.dependencies] 969 | mypy-extensions = ">=0.3.0" 970 | typing-extensions = ">=3.7.4" 971 | 972 | [[package]] 973 | name = "urllib3" 974 | version = "1.26.15" 975 | description = "HTTP library with thread-safe connection pooling, file post, and more." 976 | category = "main" 977 | optional = false 978 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" 979 | files = [ 980 | {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, 981 | {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, 982 | ] 983 | 984 | [package.extras] 985 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] 986 | secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] 987 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] 988 | 989 | [[package]] 990 | name = "yarl" 991 | version = "1.8.2" 992 | description = "Yet another URL library" 993 | category = "main" 994 | optional = false 995 | python-versions = ">=3.7" 996 | files = [ 997 | {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5"}, 998 | {file = "yarl-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863"}, 999 | {file = "yarl-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe"}, 1000 | {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e"}, 1001 | {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996"}, 1002 | {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef"}, 1003 | {file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8"}, 1004 | {file = "yarl-1.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6"}, 1005 | {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146"}, 1006 | {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f"}, 1007 | {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826"}, 1008 | {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3"}, 1009 | {file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80"}, 1010 | {file = "yarl-1.8.2-cp310-cp310-win32.whl", hash = "sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42"}, 1011 | {file = "yarl-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574"}, 1012 | {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634"}, 1013 | {file = "yarl-1.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd"}, 1014 | {file = "yarl-1.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581"}, 1015 | {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a"}, 1016 | {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf"}, 1017 | {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee"}, 1018 | {file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76"}, 1019 | {file = "yarl-1.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b"}, 1020 | {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a"}, 1021 | {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6"}, 1022 | {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4"}, 1023 | {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c"}, 1024 | {file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2"}, 1025 | {file = "yarl-1.8.2-cp311-cp311-win32.whl", hash = "sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b"}, 1026 | {file = "yarl-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c"}, 1027 | {file = "yarl-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef"}, 1028 | {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1"}, 1029 | {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077"}, 1030 | {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2"}, 1031 | {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89"}, 1032 | {file = "yarl-1.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c"}, 1033 | {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0"}, 1034 | {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739"}, 1035 | {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b"}, 1036 | {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7"}, 1037 | {file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37"}, 1038 | {file = "yarl-1.8.2-cp37-cp37m-win32.whl", hash = "sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89"}, 1039 | {file = "yarl-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5"}, 1040 | {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1"}, 1041 | {file = "yarl-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918"}, 1042 | {file = "yarl-1.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229"}, 1043 | {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e"}, 1044 | {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e"}, 1045 | {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1"}, 1046 | {file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3"}, 1047 | {file = "yarl-1.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901"}, 1048 | {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0"}, 1049 | {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05"}, 1050 | {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d"}, 1051 | {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c"}, 1052 | {file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946"}, 1053 | {file = "yarl-1.8.2-cp38-cp38-win32.whl", hash = "sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165"}, 1054 | {file = "yarl-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f"}, 1055 | {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8"}, 1056 | {file = "yarl-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf"}, 1057 | {file = "yarl-1.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77"}, 1058 | {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87"}, 1059 | {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0"}, 1060 | {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2"}, 1061 | {file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08"}, 1062 | {file = "yarl-1.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d"}, 1063 | {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951"}, 1064 | {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220"}, 1065 | {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06"}, 1066 | {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516"}, 1067 | {file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588"}, 1068 | {file = "yarl-1.8.2-cp39-cp39-win32.whl", hash = "sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83"}, 1069 | {file = "yarl-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778"}, 1070 | {file = "yarl-1.8.2.tar.gz", hash = "sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562"}, 1071 | ] 1072 | 1073 | [package.dependencies] 1074 | idna = ">=2.0" 1075 | multidict = ">=4.0" 1076 | 1077 | [metadata] 1078 | lock-version = "2.0" 1079 | python-versions = "^3.9" 1080 | content-hash = "7929f0a9da4dd2e5d4d18f2752cad4deac1c2714e01f37678f1e686661809de6" 1081 | --------------------------------------------------------------------------------