├── .gitignore ├── README.md ├── minidon.sql ├── package.json ├── public └── static │ └── icon.png ├── src ├── index.ts ├── logic.ts ├── routes │ ├── Pages.tsx │ ├── ui.tsx │ ├── user.ts │ └── webfinger.ts ├── types.ts └── utils.ts ├── tsconfig.json ├── wrangler.sample.toml └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | wrangler.toml 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Minidon 2 | 3 | Minimal implementation of ActivityPub with Cloudflare Workers and D1. 4 | 5 | ## What can we do? 6 | 7 | * Having only one actor 8 | * The actor is discovered via webfinger (so you can find the account from other instances) 9 | * Notifying followers of new posts (so new posts show up in their timeline) 10 | * Web interface to post messages 11 | 12 | ## Screencast 13 | 14 | ![output](https://user-images.githubusercontent.com/10682/216822004-603b867e-203e-48bf-bf13-efa41830eab8.gif) 15 | 16 | ## Requirements 17 | 18 | * Node.js 19 | * Cloudflare Account 20 | 21 | ## Installation 22 | 23 | ``` 24 | yarn install 25 | ``` 26 | 27 | ## Configuration 28 | 29 | ``` 30 | cp wrangler.sample.toml wrangler.toml 31 | ``` 32 | 33 | Fill the values: 34 | 35 | * `preferredUsername` - Your account name. eg. `yusukebe` 36 | * `name` - Your long name. eg. `Yusuke Wada` 37 | * `BASIC_USERNAME` - Basic auth username for login to Web UI 38 | * `BASIC_PASSWORD` - Basic auth password 39 | 40 | Pick up the value of `PRIVATE_KEY` from the files generated by `ssh-keygen`: 41 | 42 | ``` 43 | ssh-keygen -b 4096 -m PKCS8 -t rsa -N '' -f id_rsa 44 | ``` 45 | 46 | You can also use the value as "Secret variables" in Cloudflare Workers. 47 | 48 | ## Setup D1 49 | 50 | ``` 51 | wrangler d1 create minidon 52 | ``` 53 | 54 | `database_id` will be shown on your console. Copy it and paste into the value of `database_id` and `preview_database_id` in wrangler.toml. 55 | 56 | Create tables: 57 | 58 | ``` 59 | wrangler d1 execute minidon --file minidon.sql 60 | ``` 61 | 62 | ## Development 63 | 64 | ``` 65 | yarn dev 66 | ``` 67 | 68 | ## Deploy 69 | 70 | ``` 71 | yarn deploy 72 | ``` 73 | 74 | ## Usage 75 | 76 | `@{name}@{minion.username.workers.dev}` will be your account id. 77 | Paste it on such a Mastodon URL input, the account will be shown. 78 | 79 | To post the message, access `https://minion.username.workers.dev/ui`. 80 | 81 | ## Author 82 | 83 | Yusuke Wada 84 | 85 | ## License 86 | 87 | MIT 88 | 89 | And using a lot of code in Matchbox and inspired by Express ActivityPub Server. 90 | 91 | Matchbox 92 | https://gitlab.com/acefed/matchbox 93 | Copyright (c) 2022 Acefed MIT License 94 | 95 | Express ActivityPub Server 96 | https://github.com/dariusk/express-activitypub 97 | Copyright (c) 2018 Darius Kazemi. Licensed under the MIT license. -------------------------------------------------------------------------------- /minidon.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE follower ( 2 | id TEXT PRIMARY KEY 3 | ); 4 | 5 | CREATE TABLE message ( 6 | id TEXT PRIMARY KEY, 7 | body TEXT 8 | ); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "dev": "wrangler dev src/index.ts", 4 | "deploy": "wrangler publish src/index.ts" 5 | }, 6 | "dependencies": { 7 | "hono": "3.0.0-rc.10" 8 | }, 9 | "devDependencies": { 10 | "@cloudflare/workers-types": "^4.20221111.1", 11 | "wrangler": "^2.9.0" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /public/static/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yusukebe/minidon/2f4e70f92c056e23ab67400e76de3e9e8f2823e1/public/static/icon.png -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Hono } from 'hono' 2 | import { serveStatic } from 'hono/cloudflare-workers' 3 | import { logger } from 'hono/logger' 4 | import ui from './routes/ui' 5 | import webfinger from './routes/webfinger' 6 | import user from './routes/user' 7 | 8 | const app = new Hono() 9 | 10 | app.use('*', logger()) 11 | 12 | app.get('/static/*', serveStatic({ root: './' })) 13 | 14 | app.get('/', (c) => c.text('Minidon')) 15 | app.route('/.well-known/webfinger', webfinger) 16 | app.route('/u', user) 17 | app.route('/ui', ui) 18 | 19 | app.showRoutes() 20 | 21 | export default app 22 | -------------------------------------------------------------------------------- /src/logic.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Based on Matchbox 3 | * Matchbox https://gitlab.com/acefed/matchbox Copyright (c) 2022 Acefed MIT License 4 | */ 5 | 6 | import { btos, stob } from './utils' 7 | 8 | export async function getInbox(req: string) { 9 | const res = await fetch(req, { 10 | method: 'GET', 11 | headers: { Accept: 'application/activity+json' }, 12 | }) 13 | return res.json() 14 | } 15 | 16 | export async function postInbox(req: string, data: any, headers: { [key: string]: string }) { 17 | const res = await fetch(req, { method: 'POST', body: JSON.stringify(data), headers }) 18 | return res 19 | } 20 | 21 | export async function signHeaders( 22 | res: any, 23 | strName: string, 24 | strHost: string, 25 | strInbox: string, 26 | privateKey: CryptoKey 27 | ) { 28 | const strTime = new Date().toUTCString() 29 | const s = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(JSON.stringify(res))) 30 | const s256 = btoa(btos(s)) 31 | const sig = await crypto.subtle.sign( 32 | 'RSASSA-PKCS1-v1_5', 33 | privateKey, 34 | stob( 35 | `(request-target): post ${new URL(strInbox).pathname}\n` + 36 | `host: ${new URL(strInbox).hostname}\n` + 37 | `date: ${strTime}\n` + 38 | `digest: SHA-256=${s256}` 39 | ) 40 | ) 41 | const b64 = btoa(btos(sig)) 42 | const headers = { 43 | Host: new URL(strInbox).hostname, 44 | Date: strTime, 45 | Digest: `SHA-256=${s256}`, 46 | Signature: 47 | `keyId="https://${strHost}/u/${strName}",` + 48 | `algorithm="rsa-sha256",` + 49 | `headers="(request-target) host date digest",` + 50 | `signature="${b64}"`, 51 | Accept: 'application/activity+json', 52 | 'Content-Type': 'application/activity+json', 53 | 'Accept-Encoding': 'gzip', 54 | 'User-Agent': `Minidon/0.0.0 (+https://${strHost}/)`, 55 | } 56 | return headers 57 | } 58 | 59 | export async function acceptFollow( 60 | strName: string, 61 | strHost: string, 62 | x: any, 63 | y: any, 64 | privateKey: CryptoKey 65 | ) { 66 | const strId = crypto.randomUUID() 67 | const strInbox = x.inbox 68 | const res = { 69 | '@context': 'https://www.w3.org/ns/activitystreams', 70 | id: `https://${strHost}/u/${strName}/s/${strId}`, 71 | type: 'Accept', 72 | actor: `https://${strHost}/u/${strName}`, 73 | object: y, 74 | } 75 | const headers = await signHeaders(res, strName, strHost, strInbox, privateKey) 76 | await postInbox(strInbox, res, headers) 77 | } 78 | 79 | export async function createNote( 80 | strId: string, 81 | strName: string, 82 | strHost: string, 83 | x: any, 84 | y: string, 85 | privateKey: CryptoKey 86 | ) { 87 | const strTime = new Date().toISOString().substring(0, 19) + 'Z' 88 | const strInbox = x.inbox 89 | const res = { 90 | '@context': 'https://www.w3.org/ns/activitystreams', 91 | id: `https://${strHost}/u/${strName}/s/${strId}/activity`, 92 | type: 'Create', 93 | actor: `https://${strHost}/u/${strName}`, 94 | published: strTime, 95 | to: ['https://www.w3.org/ns/activitystreams#Public'], 96 | cc: [`https://${strHost}/u/${strName}/followers`], 97 | object: { 98 | id: `https://${strHost}/u/${strName}/s/${strId}`, 99 | type: 'Note', 100 | attributedTo: `https://${strHost}/u/${strName}`, 101 | content: y, 102 | url: `https://${strHost}/u/${strName}/s/${strId}`, 103 | published: strTime, 104 | to: ['https://www.w3.org/ns/activitystreams#Public'], 105 | cc: [`https://${strHost}/u/${strName}/followers`], 106 | }, 107 | } 108 | const headers = await signHeaders(res, strName, strHost, strInbox, privateKey) 109 | await postInbox(strInbox, res, headers) 110 | } 111 | 112 | export async function deleteNote( 113 | strName: string, 114 | strHost: string, 115 | x: any, 116 | y: string, 117 | privateKey: CryptoKey 118 | ) { 119 | const strId = crypto.randomUUID() 120 | const strInbox = x.inbox 121 | const res = { 122 | '@context': 'https://www.w3.org/ns/activitystreams', 123 | id: `https://${strHost}/u/${strName}/s/${strId}/activity`, 124 | type: 'Delete', 125 | actor: `https://${strHost}/u/${strName}`, 126 | object: { 127 | id: y, 128 | type: 'Note', 129 | }, 130 | } 131 | const headers = await signHeaders(res, strName, strHost, strInbox, privateKey) 132 | await postInbox(strInbox, res, headers) 133 | } 134 | -------------------------------------------------------------------------------- /src/routes/Pages.tsx: -------------------------------------------------------------------------------- 1 | import { html } from 'hono/html' 2 | import { Message } from '../types' 3 | 4 | const Form = () => { 5 | return ( 6 |
7 | 10 | 11 |
12 | ) 13 | } 14 | 15 | export const Top = (props: { messages: Message[] }) => { 16 | return ( 17 | 18 |

19 | Minidon 20 |

21 |
22 |
23 | {props.messages.reverse().map((message) => { 24 | return
{message.body}
25 | })} 26 | 27 | ) 28 | } 29 | 30 | const Layout = (props: any) => html` 31 | 32 | 33 | Minidon 34 | 35 | 36 | 37 |
${props.children}
38 | 39 | ` 40 | -------------------------------------------------------------------------------- /src/routes/ui.tsx: -------------------------------------------------------------------------------- 1 | import { Hono } from 'hono' 2 | import { basicAuth } from 'hono/basic-auth' 3 | import { Top } from './Pages' 4 | import { Env, Message } from '../types' 5 | import { validator } from 'hono/validator' 6 | import { importprivateKey } from '../utils' 7 | import { createNote, getInbox } from '../logic' 8 | 9 | const app = new Hono() 10 | 11 | app.use('*', async (c, next) => { 12 | const auth = basicAuth({ 13 | username: c.env.BASIC_USERNAME, 14 | password: c.env.BASIC_PASSWORD, 15 | }) 16 | return await auth(c, next) 17 | }) 18 | 19 | app.get('/', async (c) => { 20 | const { results } = await c.env.DB.prepare(`SELECT * FROM message;`).all() 21 | const messages = results 22 | return c.html() 23 | }) 24 | 25 | app.post( 26 | '/post', 27 | validator('form', (value, c) => { 28 | if (!value['body']) { 29 | return c.text('Invalid!', 400) 30 | } 31 | return value as Message 32 | }), 33 | async (c) => { 34 | const message = c.req.valid('form') 35 | const messageId = crypto.randomUUID() 36 | 37 | const strHost = new URL(c.req.url).hostname 38 | const strName = c.env.preferredUsername 39 | 40 | const PRIVATE_KEY = await importprivateKey(c.env.PRIVATE_KEY) 41 | 42 | const { results } = await c.env.DB.prepare(`SELECT id FROM follower;`).all<{ id: string }>() 43 | const followers = results 44 | 45 | for (const follower of followers) { 46 | const x = await getInbox(follower.id) 47 | await createNote(messageId, strName, strHost, x, message.body, PRIVATE_KEY) 48 | } 49 | 50 | await c.env.DB.prepare(`INSERT INTO message(id, body) VALUES(?, ?);`) 51 | .bind(messageId, message.body) 52 | .run() 53 | 54 | return c.redirect('/ui') 55 | } 56 | ) 57 | 58 | export default app 59 | -------------------------------------------------------------------------------- /src/routes/user.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Based on Matchbox 3 | * Matchbox https://gitlab.com/acefed/matchbox Copyright (c) 2022 Acefed MIT License 4 | */ 5 | 6 | import { Hono } from 'hono' 7 | import { Env, Follower } from '../types' 8 | import { exportPublicKey, importprivateKey, privateKeyToPublicKey } from '../utils' 9 | import { acceptFollow, getInbox } from '../logic' 10 | 11 | const app = new Hono() 12 | 13 | app.get(':strName', async (c) => { 14 | const strName = c.req.param('strName') 15 | const strHost = new URL(c.req.url).hostname 16 | 17 | if (strName !== c.env.preferredUsername) return c.notFound() 18 | if (!c.req.header('Accept').includes('application/activity+json')) { 19 | return c.text(`${strName}: ${c.env.name}`) 20 | } 21 | 22 | const PRIVATE_KEY = await importprivateKey(c.env.PRIVATE_KEY) 23 | const PUBLIC_KEY = await privateKeyToPublicKey(PRIVATE_KEY) 24 | const public_key_pem = await exportPublicKey(PUBLIC_KEY) 25 | 26 | const r = { 27 | '@context': ['https://www.w3.org/ns/activitystreams', 'https://w3id.org/security/v1'], 28 | id: `https://${strHost}/u/${strName}`, 29 | type: 'Person', 30 | inbox: `https://${strHost}/u/${strName}/inbox`, 31 | followers: `https://${strHost}/u/${strName}/followers`, 32 | preferredUsername: strName, 33 | name: c.env.name, 34 | url: `https://${strHost}/u/${strName}`, 35 | publicKey: { 36 | id: `https://${strHost}/u/${strName}`, 37 | type: 'Key', 38 | owner: `https://${strHost}/u/${strName}`, 39 | publicKeyPem: public_key_pem, 40 | }, 41 | icon: { 42 | type: 'Image', 43 | mediaType: 'image/png', 44 | url: `https://${strHost}/static/icon.png`, 45 | }, 46 | } 47 | 48 | return c.json(r, 200, { 'Content-Type': 'activity+json' }) 49 | }) 50 | 51 | app.get(':strName/inbox', (c) => c.body(null, 405)) 52 | app.post(':strName/inbox', async (c) => { 53 | const strName = c.req.param('strName') 54 | const strHost = new URL(c.req.url).hostname 55 | 56 | if (strName !== c.env.preferredUsername) return c.notFound() 57 | if (!c.req.header('Content-Type').includes('application/activity+json')) return c.body(null, 400) 58 | const y = await c.req.json() 59 | if (new URL(y.actor).protocol !== 'https:') return c.body(null, 400) 60 | 61 | const x = await getInbox(y.actor) 62 | if (!x) return c.body(null, 500) 63 | 64 | const private_key = await importprivateKey(c.env.PRIVATE_KEY) 65 | 66 | if (y.type === 'Follow') { 67 | const actor = y.actor 68 | await c.env.DB.prepare(`INSERT OR REPLACE INTO follower(id) VALUES(?);`).bind(actor).run() 69 | await acceptFollow(strName, strHost, x, y, private_key) 70 | return c.body(null) 71 | } 72 | 73 | if (y.type === 'Undo') { 74 | const z = y.object 75 | if (z.type === 'Follow') { 76 | await c.env.DB.prepare(`DELETE FROM follower WHERE id = ?;`).bind(y.actor).run() 77 | return c.body(null) 78 | } 79 | } 80 | 81 | return c.body(null, 500) 82 | }) 83 | 84 | app.get(':strName/followers', async (c) => { 85 | const strName = c.req.param('strName') 86 | const strHost = new URL(c.req.url).hostname 87 | if (strName !== c.env.preferredUsername) return c.notFound() 88 | if (!c.req.header('Accept').includes('application/activity+json')) return c.body(null, 400) 89 | 90 | const { results } = await c.env.DB.prepare(`SELECT * FROM follower;`).all() 91 | const followers = results 92 | 93 | const items = followers.map(({ id }) => { 94 | return id 95 | }) 96 | 97 | const r = { 98 | '@context': 'https://www.w3.org/ns/activitystreams', 99 | id: `https://${strHost}/u/${strName}/followers`, 100 | type: 'OrderedCollection', 101 | first: { 102 | type: 'OrderedCollectionPage', 103 | totalItems: followers.length, 104 | partOf: `https://${strHost}/u/${strName}/followers`, 105 | orderedItems: items, 106 | id: `https://${strHost}/u/${strName}/followers?page=1`, 107 | }, 108 | } 109 | 110 | return c.json(r, 200, { 'Content-Type': 'activity+json' }) 111 | }) 112 | 113 | export default app 114 | -------------------------------------------------------------------------------- /src/routes/webfinger.ts: -------------------------------------------------------------------------------- 1 | import { Hono } from 'hono' 2 | import { Env } from 'hono' 3 | 4 | const app = new Hono() 5 | 6 | app.get('/', (c) => { 7 | const strName = c.env.preferredUsername 8 | const strHost = new URL(c.req.url).hostname 9 | if (c.req.query('resource') !== `acct:${strName}@${strHost}`) return c.notFound() 10 | const r = { 11 | subject: `acct:${strName}@${strHost}`, 12 | links: [ 13 | { 14 | rel: 'self', 15 | type: 'application/activity+json', 16 | href: `https://${strHost}/u/${strName}`, 17 | }, 18 | ], 19 | } 20 | return c.json(r, 200, { 'Content-Type': 'jrd+json' }) 21 | }) 22 | 23 | export default app 24 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export type Env = { 2 | Bindings: { 3 | DB: D1Database 4 | preferredUsername: string 5 | name: string 6 | PRIVATE_KEY: string 7 | BASIC_USERNAME: string 8 | BASIC_PASSWORD: string 9 | } 10 | } 11 | 12 | export type Follower = { 13 | id: string 14 | } 15 | 16 | export type Message = { 17 | id: string 18 | body: string 19 | } 20 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | export function stob(s: string) { 2 | return Uint8Array.from(s, (c) => c.charCodeAt(0)) 3 | } 4 | 5 | export function btos(b: ArrayBuffer) { 6 | return String.fromCharCode(...new Uint8Array(b)) 7 | } 8 | 9 | export async function importprivateKey(pem: string) { 10 | const pemHeader = '-----BEGIN PRIVATE KEY-----' 11 | const pemFooter = '-----END PRIVATE KEY-----' 12 | if (pem.startsWith('"')) pem = pem.slice(1) 13 | if (pem.endsWith('"')) pem = pem.slice(0, -1) 14 | pem = pem.split('\\n').join('') 15 | pem = pem.split('\n').join('') 16 | const pemContents = pem.substring(pemHeader.length, pem.length - pemFooter.length) 17 | const der = stob(atob(pemContents)) 18 | const r = await crypto.subtle.importKey( 19 | 'pkcs8', 20 | der, 21 | { 22 | name: 'RSASSA-PKCS1-v1_5', 23 | hash: 'SHA-256', 24 | }, 25 | true, 26 | ['sign'] 27 | ) 28 | return r 29 | } 30 | 31 | export async function privateKeyToPublicKey(key: CryptoKey) { 32 | const jwk = await crypto.subtle.exportKey('jwk', key) 33 | if ('kty' in jwk) { 34 | delete jwk.d 35 | delete jwk.p 36 | delete jwk.q 37 | delete jwk.dp 38 | delete jwk.dq 39 | delete jwk.qi 40 | delete jwk.oth 41 | jwk.key_ops = ['verify'] 42 | } 43 | const r = await crypto.subtle.importKey( 44 | 'jwk', 45 | jwk, 46 | { 47 | name: 'RSASSA-PKCS1-v1_5', 48 | hash: 'SHA-256', 49 | }, 50 | true, 51 | ['verify'] 52 | ) 53 | return r 54 | } 55 | 56 | export async function exportPublicKey(key: CryptoKey) { 57 | const der = await crypto.subtle.exportKey('spki', key) 58 | if ('byteLength' in der) { 59 | let pemContents = btoa(btos(der)) 60 | 61 | let pem = '-----BEGIN PUBLIC KEY-----\n' 62 | while (pemContents.length > 0) { 63 | pem += pemContents.substring(0, 64) + '\n' 64 | pemContents = pemContents.substring(64) 65 | } 66 | pem += '-----END PUBLIC KEY-----\n' 67 | return pem 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "moduleResolution": "node", 6 | "lib": [ 7 | "esnext" 8 | ], 9 | "types": [ 10 | "@cloudflare/workers-types" 11 | ], 12 | "jsx": "react-jsx", 13 | "jsxFragmentFactory": "Fragment", 14 | "jsxImportSource": "hono/jsx" 15 | } 16 | } -------------------------------------------------------------------------------- /wrangler.sample.toml: -------------------------------------------------------------------------------- 1 | name = "minidon" 2 | compatibility_date = "2023-01-01" 3 | 4 | [site] 5 | bucket = "./public" 6 | 7 | [[ d1_databases ]] 8 | binding = "DB" 9 | database_name = "minidon" 10 | database_id = "" 11 | preview_database_id = "" 12 | 13 | [vars] 14 | preferredUsername = "" 15 | name = "" 16 | BASIC_USERNAME = "" 17 | BASIC_PASSWORD = "" 18 | 19 | PRIVATE_KEY = """-----BEGIN PRIVATE KEY----- 20 | 21 | -----END PRIVATE KEY----- 22 | """ -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cloudflare/kv-asset-handler@^0.2.0": 6 | version "0.2.0" 7 | resolved "https://registry.yarnpkg.com/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.2.0.tgz#c9959bbd7a1c40bd7c674adae98aa8c8d0e5ca68" 8 | integrity sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A== 9 | dependencies: 10 | mime "^3.0.0" 11 | 12 | "@cloudflare/workers-types@^4.20221111.1": 13 | version "4.20230115.0" 14 | resolved "https://registry.yarnpkg.com/@cloudflare/workers-types/-/workers-types-4.20230115.0.tgz#84e6c7b1a753098dbc7cd718fdcf191c215225af" 15 | integrity sha512-GPJEiO8AFN+jUpA+DHJ1qdVmk4s/hq8JYKjOV/+U7avGquQbVnj905+Kg6uAEfrq16muwmRKl+XJGqsvlBlDNg== 16 | 17 | "@esbuild-plugins/node-globals-polyfill@^0.1.1": 18 | version "0.1.1" 19 | resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz#a313ab3efbb2c17c8ce376aa216c627c9b40f9d7" 20 | integrity sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg== 21 | 22 | "@esbuild-plugins/node-modules-polyfill@^0.1.4": 23 | version "0.1.4" 24 | resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz#eb2f55da11967b2986c913f1a7957d1c868849c0" 25 | integrity sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg== 26 | dependencies: 27 | escape-string-regexp "^4.0.0" 28 | rollup-plugin-node-polyfills "^0.2.1" 29 | 30 | "@iarna/toml@^2.2.5": 31 | version "2.2.5" 32 | resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" 33 | integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== 34 | 35 | "@miniflare/cache@2.11.0": 36 | version "2.11.0" 37 | resolved "https://registry.yarnpkg.com/@miniflare/cache/-/cache-2.11.0.tgz#e13f4a860ebe01fc67f0169e76be93350c29d7ff" 38 | integrity sha512-L/kc9AzidPwFuk2fwHpAEePi0kNBk6FWUq3ln+9beRCDrPEpfVrDRFpNleF1NFZz5//oeVMuo8F0IVUQGzR7+Q== 39 | dependencies: 40 | "@miniflare/core" "2.11.0" 41 | "@miniflare/shared" "2.11.0" 42 | http-cache-semantics "^4.1.0" 43 | undici "5.9.1" 44 | 45 | "@miniflare/cli-parser@2.11.0": 46 | version "2.11.0" 47 | resolved "https://registry.yarnpkg.com/@miniflare/cli-parser/-/cli-parser-2.11.0.tgz#47f517731791c9e652e9849d590fde3235737529" 48 | integrity sha512-JUmyRzEGAS6CouvXJwBh8p44onfw3KRpfq5JGXEuHModOGjTp6li7PQyCTNPV2Hv/7StAXWnTFGXeAqyDHuTig== 49 | dependencies: 50 | "@miniflare/shared" "2.11.0" 51 | kleur "^4.1.4" 52 | 53 | "@miniflare/core@2.11.0": 54 | version "2.11.0" 55 | resolved "https://registry.yarnpkg.com/@miniflare/core/-/core-2.11.0.tgz#68efb7c9bab0d56bdf284b704089b035cd0b1a28" 56 | integrity sha512-UFMFiCG0co36VpZkgFrSBnrxo71uf1x+cjlzzJi3khmMyDlnLu4RuIQsAqvKbYom6fi3G9Q8lTgM7JuOXFyjhw== 57 | dependencies: 58 | "@iarna/toml" "^2.2.5" 59 | "@miniflare/queues" "2.11.0" 60 | "@miniflare/shared" "2.11.0" 61 | "@miniflare/watcher" "2.11.0" 62 | busboy "^1.6.0" 63 | dotenv "^10.0.0" 64 | kleur "^4.1.4" 65 | set-cookie-parser "^2.4.8" 66 | undici "5.9.1" 67 | urlpattern-polyfill "^4.0.3" 68 | 69 | "@miniflare/d1@2.11.0": 70 | version "2.11.0" 71 | resolved "https://registry.yarnpkg.com/@miniflare/d1/-/d1-2.11.0.tgz#1c340abe1c50cce27432b100d78b345b45e60b10" 72 | integrity sha512-aDdBVQZ2C0Zs3+Y9ZbRctmuQxozPfpumwJ/6NG6fBadANvune/hW7ddEoxyteIEU9W3IgzVj8s4by4VvasX90A== 73 | dependencies: 74 | "@miniflare/core" "2.11.0" 75 | "@miniflare/shared" "2.11.0" 76 | 77 | "@miniflare/durable-objects@2.11.0": 78 | version "2.11.0" 79 | resolved "https://registry.yarnpkg.com/@miniflare/durable-objects/-/durable-objects-2.11.0.tgz#4c53c27a939e022a1de47ee338cec395cbb9e24d" 80 | integrity sha512-0cKJaMgraTEU1b4kqK8cjD2oTeOjA6QU3Y+lWiZT/k1PMHZULovrSFnjii7qZ8npf4VHSIN6XYPxhyxRyEM65Q== 81 | dependencies: 82 | "@miniflare/core" "2.11.0" 83 | "@miniflare/shared" "2.11.0" 84 | "@miniflare/storage-memory" "2.11.0" 85 | undici "5.9.1" 86 | 87 | "@miniflare/html-rewriter@2.11.0": 88 | version "2.11.0" 89 | resolved "https://registry.yarnpkg.com/@miniflare/html-rewriter/-/html-rewriter-2.11.0.tgz#5e5e1292876feca3002b3a729dd8f892f7ef0d0c" 90 | integrity sha512-olTqmuYTHnoTNtiA0vjQ/ixRfbwgPzDrAUbtXDCYW45VFbHfDVJrJGZX3Jg0HpSlxy86Zclle1SUxGbVDzxsBg== 91 | dependencies: 92 | "@miniflare/core" "2.11.0" 93 | "@miniflare/shared" "2.11.0" 94 | html-rewriter-wasm "^0.4.1" 95 | undici "5.9.1" 96 | 97 | "@miniflare/http-server@2.11.0": 98 | version "2.11.0" 99 | resolved "https://registry.yarnpkg.com/@miniflare/http-server/-/http-server-2.11.0.tgz#76d2e2c6549528d965e5f48a8ddc3448c28d4569" 100 | integrity sha512-sMLcrDFzqqAvnQmAUH0hRTo8sBjW79VZYfnIH5FAGSGcKX6kdAGs9RStdYZ4CftQCBAEQScX0KBsMx5FwJRe9Q== 101 | dependencies: 102 | "@miniflare/core" "2.11.0" 103 | "@miniflare/shared" "2.11.0" 104 | "@miniflare/web-sockets" "2.11.0" 105 | kleur "^4.1.4" 106 | selfsigned "^2.0.0" 107 | undici "5.9.1" 108 | ws "^8.2.2" 109 | youch "^2.2.2" 110 | 111 | "@miniflare/kv@2.11.0": 112 | version "2.11.0" 113 | resolved "https://registry.yarnpkg.com/@miniflare/kv/-/kv-2.11.0.tgz#af162567e2d49ae533be60bca29eaf9486408a68" 114 | integrity sha512-3m9dL2HBBN170V1JvwjjucR5zl4G3mlcsV6C1E7A2wLl2Z2TWvIx/tSY9hrhkD96dFnejwJ9qmPMbXMMuynhjg== 115 | dependencies: 116 | "@miniflare/shared" "2.11.0" 117 | 118 | "@miniflare/queues@2.11.0": 119 | version "2.11.0" 120 | resolved "https://registry.yarnpkg.com/@miniflare/queues/-/queues-2.11.0.tgz#feb48d1934b4f98d9bc605d0967140f8e70cc5be" 121 | integrity sha512-fLHjdrNLKhn0LZM/aii/9GsAttFd+lWlGzK8HOg1R0vhfKBwEub4zntjMmOfFbDm1ntc21tdMK7n3ldUphwh5w== 122 | dependencies: 123 | "@miniflare/shared" "2.11.0" 124 | 125 | "@miniflare/r2@2.11.0": 126 | version "2.11.0" 127 | resolved "https://registry.yarnpkg.com/@miniflare/r2/-/r2-2.11.0.tgz#52f19d22b63b4d5e72d2b96ee514333a810dce7a" 128 | integrity sha512-MKuyJ/gGNsK3eWbGdygvozqcyaZhM3C6NGHvoaZwH503dwN569j5DpatTWiHGFeDeSu64VqcIsGehz05GDUaag== 129 | dependencies: 130 | "@miniflare/shared" "2.11.0" 131 | undici "5.9.1" 132 | 133 | "@miniflare/runner-vm@2.11.0": 134 | version "2.11.0" 135 | resolved "https://registry.yarnpkg.com/@miniflare/runner-vm/-/runner-vm-2.11.0.tgz#801c16ddbd360c3c8fcca84c43faaecfd2d4ef70" 136 | integrity sha512-bkVSuvCf5+VylqN8lTiLxIYqYcKFbl+BywZGwGQndPC/3wh42J00mM0jw4hRbvXgwuBhlUyCVpEXtYlftFFT/g== 137 | dependencies: 138 | "@miniflare/shared" "2.11.0" 139 | 140 | "@miniflare/scheduler@2.11.0": 141 | version "2.11.0" 142 | resolved "https://registry.yarnpkg.com/@miniflare/scheduler/-/scheduler-2.11.0.tgz#2568d44f571e73355369be6a6da4481aa4af25c8" 143 | integrity sha512-DPdzINhdWeS99eIicGoluMsD4pLTTAWNQbgCv3CTwgdKA3dxdvMSCkNqZzQLiALzvk9+rSfj46FlH++HE7o7/w== 144 | dependencies: 145 | "@miniflare/core" "2.11.0" 146 | "@miniflare/shared" "2.11.0" 147 | cron-schedule "^3.0.4" 148 | 149 | "@miniflare/shared@2.11.0": 150 | version "2.11.0" 151 | resolved "https://registry.yarnpkg.com/@miniflare/shared/-/shared-2.11.0.tgz#12905f4b4310bdcc28169667d024ca6fab35a035" 152 | integrity sha512-fWMqq3ZkWAg+k7CnyzMV/rZHugwn+/JxvVzCxrtvxzwotTN547THlOxgZe8JAP23U9BiTxOfpTfnLvFEjAmegw== 153 | dependencies: 154 | "@types/better-sqlite3" "^7.6.0" 155 | kleur "^4.1.4" 156 | npx-import "^1.1.3" 157 | picomatch "^2.3.1" 158 | 159 | "@miniflare/sites@2.11.0": 160 | version "2.11.0" 161 | resolved "https://registry.yarnpkg.com/@miniflare/sites/-/sites-2.11.0.tgz#f7849ed6cc13fd3a96a329b815828ed5e4f22df3" 162 | integrity sha512-qbefKdWZUJgsdLf+kCw03sn3h/92LZgJAbkOpP6bCrfWkXlJ37EQXO4KWdhn4Ghc7A6GwU1s1I/mdB64B3AewQ== 163 | dependencies: 164 | "@miniflare/kv" "2.11.0" 165 | "@miniflare/shared" "2.11.0" 166 | "@miniflare/storage-file" "2.11.0" 167 | 168 | "@miniflare/storage-file@2.11.0": 169 | version "2.11.0" 170 | resolved "https://registry.yarnpkg.com/@miniflare/storage-file/-/storage-file-2.11.0.tgz#eaa30899d6a369f9a0dca32859ff1b36db1f0bac" 171 | integrity sha512-beWF/lTX74x7AiaSB+xQxywPSNdhtEKvqDkRui8eOJ5kqN2o4UaleLKQGgqmCw3WyHRIsckV7If1qpbNiLtWMw== 172 | dependencies: 173 | "@miniflare/shared" "2.11.0" 174 | "@miniflare/storage-memory" "2.11.0" 175 | 176 | "@miniflare/storage-memory@2.11.0": 177 | version "2.11.0" 178 | resolved "https://registry.yarnpkg.com/@miniflare/storage-memory/-/storage-memory-2.11.0.tgz#24b6ba299435a96dbe8929308c49cdd2346d2d25" 179 | integrity sha512-s0AhPww7fq/Jz80NbPb+ffhcVRKnfPi7H1dHTRTre2Ud23EVJjAWl2gat42x8NOT/Fu3/o/7A72DWQQJqfO98A== 180 | dependencies: 181 | "@miniflare/shared" "2.11.0" 182 | 183 | "@miniflare/watcher@2.11.0": 184 | version "2.11.0" 185 | resolved "https://registry.yarnpkg.com/@miniflare/watcher/-/watcher-2.11.0.tgz#4cfe96ed8131118de31287d7b2690758925f4505" 186 | integrity sha512-RUfjz2iYcsQXLcGySemJl98CJ2iierbWsPGWZhIVZI+NNhROkEy77g/Q+lvP2ATwexG3/dUSfdJ3P8aH+sI4Ig== 187 | dependencies: 188 | "@miniflare/shared" "2.11.0" 189 | 190 | "@miniflare/web-sockets@2.11.0": 191 | version "2.11.0" 192 | resolved "https://registry.yarnpkg.com/@miniflare/web-sockets/-/web-sockets-2.11.0.tgz#1d4ef353c618a971c882efcc33ed37df9fa01af1" 193 | integrity sha512-NC8RKrmxrO0hZmwpzn5g4hPGA2VblnFTIBobmWoxuK95eW49zfs7dtE/PyFs+blsGv3CjTIjHVSQ782K+C6HFA== 194 | dependencies: 195 | "@miniflare/core" "2.11.0" 196 | "@miniflare/shared" "2.11.0" 197 | undici "5.9.1" 198 | ws "^8.2.2" 199 | 200 | "@types/better-sqlite3@^7.6.0": 201 | version "7.6.3" 202 | resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.3.tgz#117c3c182e300799b84d1b7e1781c27d8d536505" 203 | integrity sha512-YS64N9SNDT/NAvou3QNdzAu3E2om/W/0dhORimtPGLef+zSK5l1vDzfsWb4xgXOgfhtOI5ZDTRxnvRPb22AIVQ== 204 | dependencies: 205 | "@types/node" "*" 206 | 207 | "@types/node@*": 208 | version "18.11.19" 209 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.19.tgz#35e26df9ec441ab99d73e99e9aca82935eea216d" 210 | integrity sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw== 211 | 212 | "@types/stack-trace@0.0.29": 213 | version "0.0.29" 214 | resolved "https://registry.yarnpkg.com/@types/stack-trace/-/stack-trace-0.0.29.tgz#eb7a7c60098edb35630ed900742a5ecb20cfcb4d" 215 | integrity sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g== 216 | 217 | anymatch@~3.1.2: 218 | version "3.1.3" 219 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 220 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 221 | dependencies: 222 | normalize-path "^3.0.0" 223 | picomatch "^2.0.4" 224 | 225 | binary-extensions@^2.0.0: 226 | version "2.2.0" 227 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 228 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 229 | 230 | blake3-wasm@^2.1.5: 231 | version "2.1.5" 232 | resolved "https://registry.yarnpkg.com/blake3-wasm/-/blake3-wasm-2.1.5.tgz#b22dbb84bc9419ed0159caa76af4b1b132e6ba52" 233 | integrity sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g== 234 | 235 | braces@~3.0.2: 236 | version "3.0.2" 237 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 238 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 239 | dependencies: 240 | fill-range "^7.0.1" 241 | 242 | buffer-from@^1.0.0: 243 | version "1.1.2" 244 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 245 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 246 | 247 | builtins@^5.0.0: 248 | version "5.0.1" 249 | resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" 250 | integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== 251 | dependencies: 252 | semver "^7.0.0" 253 | 254 | busboy@^1.6.0: 255 | version "1.6.0" 256 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" 257 | integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== 258 | dependencies: 259 | streamsearch "^1.1.0" 260 | 261 | chokidar@^3.5.3: 262 | version "3.5.3" 263 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 264 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 265 | dependencies: 266 | anymatch "~3.1.2" 267 | braces "~3.0.2" 268 | glob-parent "~5.1.2" 269 | is-binary-path "~2.1.0" 270 | is-glob "~4.0.1" 271 | normalize-path "~3.0.0" 272 | readdirp "~3.6.0" 273 | optionalDependencies: 274 | fsevents "~2.3.2" 275 | 276 | cookie@^0.4.1: 277 | version "0.4.2" 278 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" 279 | integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== 280 | 281 | cron-schedule@^3.0.4: 282 | version "3.0.6" 283 | resolved "https://registry.yarnpkg.com/cron-schedule/-/cron-schedule-3.0.6.tgz#7d0a3ad9154112fc3720fe43238a43d50e8465e7" 284 | integrity sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg== 285 | 286 | cross-spawn@^7.0.3: 287 | version "7.0.3" 288 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 289 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 290 | dependencies: 291 | path-key "^3.1.0" 292 | shebang-command "^2.0.0" 293 | which "^2.0.1" 294 | 295 | dotenv@^10.0.0: 296 | version "10.0.0" 297 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" 298 | integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== 299 | 300 | esbuild-android-64@0.14.51: 301 | version "0.14.51" 302 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" 303 | integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== 304 | 305 | esbuild-android-arm64@0.14.51: 306 | version "0.14.51" 307 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" 308 | integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== 309 | 310 | esbuild-darwin-64@0.14.51: 311 | version "0.14.51" 312 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" 313 | integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== 314 | 315 | esbuild-darwin-arm64@0.14.51: 316 | version "0.14.51" 317 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" 318 | integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== 319 | 320 | esbuild-freebsd-64@0.14.51: 321 | version "0.14.51" 322 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" 323 | integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== 324 | 325 | esbuild-freebsd-arm64@0.14.51: 326 | version "0.14.51" 327 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" 328 | integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== 329 | 330 | esbuild-linux-32@0.14.51: 331 | version "0.14.51" 332 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" 333 | integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== 334 | 335 | esbuild-linux-64@0.14.51: 336 | version "0.14.51" 337 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" 338 | integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== 339 | 340 | esbuild-linux-arm64@0.14.51: 341 | version "0.14.51" 342 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" 343 | integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== 344 | 345 | esbuild-linux-arm@0.14.51: 346 | version "0.14.51" 347 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" 348 | integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== 349 | 350 | esbuild-linux-mips64le@0.14.51: 351 | version "0.14.51" 352 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" 353 | integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== 354 | 355 | esbuild-linux-ppc64le@0.14.51: 356 | version "0.14.51" 357 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" 358 | integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== 359 | 360 | esbuild-linux-riscv64@0.14.51: 361 | version "0.14.51" 362 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" 363 | integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== 364 | 365 | esbuild-linux-s390x@0.14.51: 366 | version "0.14.51" 367 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" 368 | integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== 369 | 370 | esbuild-netbsd-64@0.14.51: 371 | version "0.14.51" 372 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" 373 | integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== 374 | 375 | esbuild-openbsd-64@0.14.51: 376 | version "0.14.51" 377 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" 378 | integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== 379 | 380 | esbuild-sunos-64@0.14.51: 381 | version "0.14.51" 382 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" 383 | integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== 384 | 385 | esbuild-windows-32@0.14.51: 386 | version "0.14.51" 387 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" 388 | integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== 389 | 390 | esbuild-windows-64@0.14.51: 391 | version "0.14.51" 392 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz#7d3c09c8652d222925625637bdc7e6c223e0085d" 393 | integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== 394 | 395 | esbuild-windows-arm64@0.14.51: 396 | version "0.14.51" 397 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" 398 | integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== 399 | 400 | esbuild@0.14.51: 401 | version "0.14.51" 402 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.51.tgz#1c8ecbc8db3710da03776211dc3ee3448f7aa51e" 403 | integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== 404 | optionalDependencies: 405 | esbuild-android-64 "0.14.51" 406 | esbuild-android-arm64 "0.14.51" 407 | esbuild-darwin-64 "0.14.51" 408 | esbuild-darwin-arm64 "0.14.51" 409 | esbuild-freebsd-64 "0.14.51" 410 | esbuild-freebsd-arm64 "0.14.51" 411 | esbuild-linux-32 "0.14.51" 412 | esbuild-linux-64 "0.14.51" 413 | esbuild-linux-arm "0.14.51" 414 | esbuild-linux-arm64 "0.14.51" 415 | esbuild-linux-mips64le "0.14.51" 416 | esbuild-linux-ppc64le "0.14.51" 417 | esbuild-linux-riscv64 "0.14.51" 418 | esbuild-linux-s390x "0.14.51" 419 | esbuild-netbsd-64 "0.14.51" 420 | esbuild-openbsd-64 "0.14.51" 421 | esbuild-sunos-64 "0.14.51" 422 | esbuild-windows-32 "0.14.51" 423 | esbuild-windows-64 "0.14.51" 424 | esbuild-windows-arm64 "0.14.51" 425 | 426 | escape-string-regexp@^4.0.0: 427 | version "4.0.0" 428 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 429 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 430 | 431 | estree-walker@^0.6.1: 432 | version "0.6.1" 433 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" 434 | integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== 435 | 436 | execa@^6.1.0: 437 | version "6.1.0" 438 | resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" 439 | integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== 440 | dependencies: 441 | cross-spawn "^7.0.3" 442 | get-stream "^6.0.1" 443 | human-signals "^3.0.1" 444 | is-stream "^3.0.0" 445 | merge-stream "^2.0.0" 446 | npm-run-path "^5.1.0" 447 | onetime "^6.0.0" 448 | signal-exit "^3.0.7" 449 | strip-final-newline "^3.0.0" 450 | 451 | fill-range@^7.0.1: 452 | version "7.0.1" 453 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 454 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 455 | dependencies: 456 | to-regex-range "^5.0.1" 457 | 458 | fsevents@~2.3.2: 459 | version "2.3.2" 460 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 461 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 462 | 463 | get-stream@^6.0.1: 464 | version "6.0.1" 465 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 466 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 467 | 468 | glob-parent@~5.1.2: 469 | version "5.1.2" 470 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 471 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 472 | dependencies: 473 | is-glob "^4.0.1" 474 | 475 | hono@3.0.0-rc.10: 476 | version "3.0.0-rc.10" 477 | resolved "https://registry.yarnpkg.com/hono/-/hono-3.0.0-rc.10.tgz#d60ec9db495d3b23437f2b1000a529d4128fe16e" 478 | integrity sha512-JrO8wJv6T02lbafCxcfjbusgeUZ+GkBpS1LEv6X0uAmYTELXnH4Fn+nRD4sN4ZTrS6PsedoLDlOlcL7v7hE41w== 479 | 480 | html-rewriter-wasm@^0.4.1: 481 | version "0.4.1" 482 | resolved "https://registry.yarnpkg.com/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz#235e3d96c1aa4bfd2182661ee13881e290ff5ff2" 483 | integrity sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q== 484 | 485 | http-cache-semantics@^4.1.0: 486 | version "4.1.1" 487 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" 488 | integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== 489 | 490 | human-signals@^3.0.1: 491 | version "3.0.1" 492 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" 493 | integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== 494 | 495 | is-binary-path@~2.1.0: 496 | version "2.1.0" 497 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 498 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 499 | dependencies: 500 | binary-extensions "^2.0.0" 501 | 502 | is-extglob@^2.1.1: 503 | version "2.1.1" 504 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 505 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 506 | 507 | is-glob@^4.0.1, is-glob@~4.0.1: 508 | version "4.0.3" 509 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 510 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 511 | dependencies: 512 | is-extglob "^2.1.1" 513 | 514 | is-number@^7.0.0: 515 | version "7.0.0" 516 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 517 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 518 | 519 | is-stream@^3.0.0: 520 | version "3.0.0" 521 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" 522 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== 523 | 524 | isexe@^2.0.0: 525 | version "2.0.0" 526 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 527 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 528 | 529 | kleur@^4.1.4: 530 | version "4.1.5" 531 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" 532 | integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== 533 | 534 | lru-cache@^6.0.0: 535 | version "6.0.0" 536 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 537 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 538 | dependencies: 539 | yallist "^4.0.0" 540 | 541 | magic-string@^0.25.3: 542 | version "0.25.9" 543 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" 544 | integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== 545 | dependencies: 546 | sourcemap-codec "^1.4.8" 547 | 548 | merge-stream@^2.0.0: 549 | version "2.0.0" 550 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 551 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 552 | 553 | mime@^3.0.0: 554 | version "3.0.0" 555 | resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" 556 | integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== 557 | 558 | mimic-fn@^4.0.0: 559 | version "4.0.0" 560 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" 561 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== 562 | 563 | miniflare@2.11.0: 564 | version "2.11.0" 565 | resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-2.11.0.tgz#36c575e1e75451c416f136d188b744896becc352" 566 | integrity sha512-QA18I1VQXdCo4nBtPJUcUDxW8c9xbc5ex5F61jwhkGVOISSnYdEheolESmjr8MYk28xwi0XD1ozS4rLaTONd+w== 567 | dependencies: 568 | "@miniflare/cache" "2.11.0" 569 | "@miniflare/cli-parser" "2.11.0" 570 | "@miniflare/core" "2.11.0" 571 | "@miniflare/d1" "2.11.0" 572 | "@miniflare/durable-objects" "2.11.0" 573 | "@miniflare/html-rewriter" "2.11.0" 574 | "@miniflare/http-server" "2.11.0" 575 | "@miniflare/kv" "2.11.0" 576 | "@miniflare/queues" "2.11.0" 577 | "@miniflare/r2" "2.11.0" 578 | "@miniflare/runner-vm" "2.11.0" 579 | "@miniflare/scheduler" "2.11.0" 580 | "@miniflare/shared" "2.11.0" 581 | "@miniflare/sites" "2.11.0" 582 | "@miniflare/storage-file" "2.11.0" 583 | "@miniflare/storage-memory" "2.11.0" 584 | "@miniflare/web-sockets" "2.11.0" 585 | kleur "^4.1.4" 586 | semiver "^1.1.0" 587 | source-map-support "^0.5.20" 588 | undici "5.9.1" 589 | 590 | mustache@^4.2.0: 591 | version "4.2.0" 592 | resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" 593 | integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== 594 | 595 | nanoid@^3.3.3: 596 | version "3.3.4" 597 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 598 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 599 | 600 | node-forge@^1: 601 | version "1.3.1" 602 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" 603 | integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== 604 | 605 | normalize-path@^3.0.0, normalize-path@~3.0.0: 606 | version "3.0.0" 607 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 608 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 609 | 610 | npm-run-path@^5.1.0: 611 | version "5.1.0" 612 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" 613 | integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== 614 | dependencies: 615 | path-key "^4.0.0" 616 | 617 | npx-import@^1.1.3: 618 | version "1.1.4" 619 | resolved "https://registry.yarnpkg.com/npx-import/-/npx-import-1.1.4.tgz#0ee9a27484c633255528f7ec2e4c2adeaa1fcda3" 620 | integrity sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA== 621 | dependencies: 622 | execa "^6.1.0" 623 | parse-package-name "^1.0.0" 624 | semver "^7.3.7" 625 | validate-npm-package-name "^4.0.0" 626 | 627 | onetime@^6.0.0: 628 | version "6.0.0" 629 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" 630 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== 631 | dependencies: 632 | mimic-fn "^4.0.0" 633 | 634 | parse-package-name@^1.0.0: 635 | version "1.0.0" 636 | resolved "https://registry.yarnpkg.com/parse-package-name/-/parse-package-name-1.0.0.tgz#1a108757e4ffc6889d5e78bcc4932a97c097a5a7" 637 | integrity sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg== 638 | 639 | path-key@^3.1.0: 640 | version "3.1.1" 641 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 642 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 643 | 644 | path-key@^4.0.0: 645 | version "4.0.0" 646 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" 647 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== 648 | 649 | path-to-regexp@^6.2.0: 650 | version "6.2.1" 651 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" 652 | integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== 653 | 654 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 655 | version "2.3.1" 656 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 657 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 658 | 659 | readdirp@~3.6.0: 660 | version "3.6.0" 661 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 662 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 663 | dependencies: 664 | picomatch "^2.2.1" 665 | 666 | rollup-plugin-inject@^3.0.0: 667 | version "3.0.2" 668 | resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4" 669 | integrity sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w== 670 | dependencies: 671 | estree-walker "^0.6.1" 672 | magic-string "^0.25.3" 673 | rollup-pluginutils "^2.8.1" 674 | 675 | rollup-plugin-node-polyfills@^0.2.1: 676 | version "0.2.1" 677 | resolved "https://registry.yarnpkg.com/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz#53092a2744837164d5b8a28812ba5f3ff61109fd" 678 | integrity sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA== 679 | dependencies: 680 | rollup-plugin-inject "^3.0.0" 681 | 682 | rollup-pluginutils@^2.8.1: 683 | version "2.8.2" 684 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" 685 | integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== 686 | dependencies: 687 | estree-walker "^0.6.1" 688 | 689 | selfsigned@^2.0.0, selfsigned@^2.0.1: 690 | version "2.1.1" 691 | resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" 692 | integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== 693 | dependencies: 694 | node-forge "^1" 695 | 696 | semiver@^1.1.0: 697 | version "1.1.0" 698 | resolved "https://registry.yarnpkg.com/semiver/-/semiver-1.1.0.tgz#9c97fb02c21c7ce4fcf1b73e2c7a24324bdddd5f" 699 | integrity sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg== 700 | 701 | semver@^7.0.0, semver@^7.3.7: 702 | version "7.3.8" 703 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 704 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 705 | dependencies: 706 | lru-cache "^6.0.0" 707 | 708 | set-cookie-parser@^2.4.8: 709 | version "2.5.1" 710 | resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b" 711 | integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ== 712 | 713 | shebang-command@^2.0.0: 714 | version "2.0.0" 715 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 716 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 717 | dependencies: 718 | shebang-regex "^3.0.0" 719 | 720 | shebang-regex@^3.0.0: 721 | version "3.0.0" 722 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 723 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 724 | 725 | signal-exit@^3.0.7: 726 | version "3.0.7" 727 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 728 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 729 | 730 | source-map-support@^0.5.20: 731 | version "0.5.21" 732 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 733 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 734 | dependencies: 735 | buffer-from "^1.0.0" 736 | source-map "^0.6.0" 737 | 738 | source-map@^0.6.0: 739 | version "0.6.1" 740 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 741 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 742 | 743 | source-map@^0.7.4: 744 | version "0.7.4" 745 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" 746 | integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== 747 | 748 | sourcemap-codec@^1.4.8: 749 | version "1.4.8" 750 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 751 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 752 | 753 | stack-trace@0.0.10: 754 | version "0.0.10" 755 | resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" 756 | integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== 757 | 758 | streamsearch@^1.1.0: 759 | version "1.1.0" 760 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" 761 | integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== 762 | 763 | strip-final-newline@^3.0.0: 764 | version "3.0.0" 765 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" 766 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== 767 | 768 | to-regex-range@^5.0.1: 769 | version "5.0.1" 770 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 771 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 772 | dependencies: 773 | is-number "^7.0.0" 774 | 775 | undici@5.9.1: 776 | version "5.9.1" 777 | resolved "https://registry.yarnpkg.com/undici/-/undici-5.9.1.tgz#fc9fd85dd488f965f153314a63d9426a11f3360b" 778 | integrity sha512-6fB3a+SNnWEm4CJbgo0/CWR8RGcOCQP68SF4X0mxtYTq2VNN8T88NYrWVBAeSX+zb7bny2dx2iYhP3XHi00omg== 779 | 780 | urlpattern-polyfill@^4.0.3: 781 | version "4.0.3" 782 | resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz#c1fa7a73eb4e6c6a1ffb41b24cf31974f7392d3b" 783 | integrity sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ== 784 | 785 | validate-npm-package-name@^4.0.0: 786 | version "4.0.0" 787 | resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" 788 | integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== 789 | dependencies: 790 | builtins "^5.0.0" 791 | 792 | which@^2.0.1: 793 | version "2.0.2" 794 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 795 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 796 | dependencies: 797 | isexe "^2.0.0" 798 | 799 | wrangler@^2.9.0: 800 | version "2.9.0" 801 | resolved "https://registry.yarnpkg.com/wrangler/-/wrangler-2.9.0.tgz#65fb2f19b4d8ce0a45be52c6dd81dd1eb9112906" 802 | integrity sha512-5nyyR4bXKG/Rwz0dH+nOx4SWvJWmTZVSbceLyTV+ZOH1sd2vvPnnW14NUzTNEjY3XaT93XH+28mc5+UNSYsFHw== 803 | dependencies: 804 | "@cloudflare/kv-asset-handler" "^0.2.0" 805 | "@esbuild-plugins/node-globals-polyfill" "^0.1.1" 806 | "@esbuild-plugins/node-modules-polyfill" "^0.1.4" 807 | "@miniflare/core" "2.11.0" 808 | "@miniflare/d1" "2.11.0" 809 | "@miniflare/durable-objects" "2.11.0" 810 | blake3-wasm "^2.1.5" 811 | chokidar "^3.5.3" 812 | esbuild "0.14.51" 813 | miniflare "2.11.0" 814 | nanoid "^3.3.3" 815 | path-to-regexp "^6.2.0" 816 | selfsigned "^2.0.1" 817 | source-map "^0.7.4" 818 | xxhash-wasm "^1.0.1" 819 | optionalDependencies: 820 | fsevents "~2.3.2" 821 | 822 | ws@^8.2.2: 823 | version "8.12.0" 824 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" 825 | integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== 826 | 827 | xxhash-wasm@^1.0.1: 828 | version "1.0.2" 829 | resolved "https://registry.yarnpkg.com/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz#ecc0f813219b727af4d5f3958ca6becee2f2f1ff" 830 | integrity sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A== 831 | 832 | yallist@^4.0.0: 833 | version "4.0.0" 834 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 835 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 836 | 837 | youch@^2.2.2: 838 | version "2.2.2" 839 | resolved "https://registry.yarnpkg.com/youch/-/youch-2.2.2.tgz#cb87a359a5c524ebd35eb07ca3a1521dbc7e1a3e" 840 | integrity sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ== 841 | dependencies: 842 | "@types/stack-trace" "0.0.29" 843 | cookie "^0.4.1" 844 | mustache "^4.2.0" 845 | stack-trace "0.0.10" 846 | --------------------------------------------------------------------------------