├── wrangler.example.toml
├── .gitignore
├── .editorconfig
├── tsconfig.json
├── package.json
├── LICENSE
├── src
├── utils.ts
├── index.ts
└── request.ts
├── README.md
└── pnpm-lock.yaml
/wrangler.example.toml:
--------------------------------------------------------------------------------
1 | name = "omnivore2rss"
2 | compatibility_date = "2023-01-01"
3 |
4 | [vars]
5 | OMNIVORE_AUTH_TOKEN = "Your API token here"
6 | PUBLIC_MODE = ""
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
3 | .wrangler
4 | .dev.vars
5 |
6 | # Change them to your taste:
7 | wrangler.toml
8 | wrangler.public.toml
9 | wrangler.private.toml
10 | package-lock.json
11 | yarn.lock
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | [*]
7 | indent_style = space
8 | indent_size = 2
9 | end_of_line = lf
10 | charset = utf-8
11 | trim_trailing_whitespace = false
12 | insert_final_newline = false
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "module": "ESNext",
5 | "moduleResolution": "node",
6 | "esModuleInterop": true,
7 | "strict": true,
8 | "lib": [
9 | "esnext"
10 | ],
11 | "types": [
12 | "@cloudflare/workers-types"
13 | ],
14 | "jsx": "react-jsx",
15 | "jsxImportSource": "hono/jsx"
16 | },
17 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "dev": "wrangler dev src/index.ts",
4 | "deploy": "cp wrangler.private.toml wrangler.toml && wrangler deploy --minify src/index.ts",
5 | "deploy:public": "cp wrangler.public.toml wrangler.toml && wrangler deploy --minify src/index.ts"
6 | },
7 | "dependencies": {
8 | "hono": "^3.7.2",
9 | "mime": "4.0.1"
10 | },
11 | "devDependencies": {
12 | "@cloudflare/workers-types": "^4.20230914.0",
13 | "wrangler": "^3.9.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 savokiss
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import mime from 'mime'
2 |
3 | const sanitizeXML = (str: string) => {
4 | return str.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '')
5 | .replace(/&(?!(amp;|lt;|gt;|apos;|quot;))/g, '&')
6 | }
7 |
8 | const getImageType = (imageUrl: string) => {
9 | const urlWithoutParams = imageUrl.split('?')[0]
10 | return mime.getType(urlWithoutParams)
11 | }
12 |
13 | const createRSSItem = (article: any) => {
14 | const node = article['node']
15 | const title = sanitizeXML(node['title'])
16 | const link = sanitizeXML(node['url'])
17 | const content = sanitizeXML(node['content'])
18 | const author = node['author'] ? `author@omnivore.app (${node['author']})` : ''
19 | const imageType = node['image'] ? getImageType(node['image']) : null
20 |
21 | return `-
22 | ${title}
23 | ${link}
24 |
25 | ${new Date(node['createdAt']).toUTCString()}
26 | ${node['id']}
27 | ${author}
28 | ${node['image'] ? `` : ''}
29 |
`
30 | }
31 |
32 | export const convertArticlesToRSS = (articles: any[], reqUrl: string) => {
33 | const items = articles.map(createRSSItem).join('')
34 | const requestUrl = sanitizeXML(reqUrl)
35 |
36 | return `
37 |
38 |
39 | Omnivore
40 | https://omnivore.app
41 | Articles from Omnivore
42 |
43 | ${items}
44 |
45 | `
46 | }
47 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Omnivore2RSS
2 |
3 | A simple project to turn your [Omnivore](https://omnivore.app/) inbox into an RSS feed.
4 |
5 | This is a cloudflare worker project that can be easily deployed at the edge.
6 |
7 | ## Features
8 | - Using Cloudflare Workers
9 | - One Click Deployment
10 | - Public Mode, get your feed instantly through
11 | - Official Search Supports, see [Params](#params)
12 |
13 | ## Deployment
14 |
15 | [](https://deploy.workers.cloudflare.com/?url=https://github.com/savokiss/omnivore2rss)
16 |
17 | ## Public Mode
18 |
19 | You can get your feed instantly through:
20 |
21 | ```bash
22 | https://o2rss.detools.dev/public?token=
23 | ```
24 |
25 | > Please note that we do not store your token, but we also advise against saving any sensitive data in your feed.
26 |
27 |
28 | ## Usage
29 | ### Install dependencies
30 |
31 | ```bash
32 | pnpm i
33 | ```
34 |
35 | ### Replace wrangler config
36 |
37 | ```bash
38 | cp wrangler.example.toml wrangler.toml
39 | ```
40 |
41 | Then replace the `OMNIVORE_AUTH_TOKEN` field.
42 |
43 | Your omnivore auth token can be found here:
44 |
45 | ### Deploy your worker
46 |
47 | ```bash
48 | pnpm run deploy
49 | ```
50 |
51 | ### The Feed URL
52 |
53 | ```bash
54 | https:///feed
55 | ```
56 |
57 | Add this url to your RSS reader, then enjoy reading articles in one place!
58 |
59 | ## Params
60 |
61 | ### Limit
62 | The default limit is 10, you can change it like this:
63 |
64 | ```bash
65 | https:///feed?limit=20
66 | ```
67 |
68 | ### Query
69 | The `query` is the same from the official, you can find the `query string` on your omnivore inbox page's top **input box**.
70 |
71 | ```bash
72 | https:///feed?query=in:inbox
73 | ```
74 |
75 | Avaliable Queries:
76 |
77 | - `in:inbox`
78 | - `in:inbox sort:read-desc is:reading`
79 | - `in:library`
80 | - `no:label`
81 | ...
82 |
83 | Plus all your custom labels, it's the same thing.
84 |
85 | ## Develop
86 | ```
87 | pnpm dev
88 | ```
89 |
90 | ## License
91 |
92 | [MIT](https://choosealicense.com/licenses/mit/)
93 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { Context, Hono } from 'hono'
2 | import { GraphQLFetcher } from './request'
3 | import { convertArticlesToRSS } from './utils'
4 |
5 | const defaultUrl = 'https://api-prod.omnivore.app/api/graphql'
6 |
7 | type Bindings = {
8 | OMNIVORE_API_URL: string
9 | OMNIVORE_AUTH_TOKEN: string
10 | PUBLIC_MODE: string
11 | }
12 |
13 | type OmniOptions = {
14 | reqUrl: string
15 | limit?: number,
16 | query?: string
17 | }
18 |
19 | const app = new Hono<{ Bindings: Bindings }>()
20 |
21 | app.get('/', async (c) => {
22 | if (c.env.PUBLIC_MODE) {
23 | return c.text('Public mode enabled, please use the /public?token= endpoint.')
24 | }
25 | return c.json({
26 | msg: 'Server is ready.'
27 | })
28 | })
29 |
30 | app.get('/feed', async (c) => {
31 | if (c.env.PUBLIC_MODE) {
32 | return c.json({
33 | msg: 'Public mode enabled, please use the /public endpoint.'
34 | })
35 | }
36 | const { limit, query = '' } = c.req.query()
37 | const omniUrl = c.env.OMNIVORE_API_URL ?? defaultUrl
38 | const token = c.env.OMNIVORE_AUTH_TOKEN
39 | // singleton
40 | const api = GraphQLFetcher.getInstance(omniUrl, token)
41 | const feed = await handleTransform(api, {
42 | reqUrl: c.req.url,
43 | limit: parseInt(limit),
44 | query
45 | })
46 | c.header('Content-Type', 'application/xml')
47 | return c.body(feed)
48 | })
49 |
50 | app.get('/public', async (c) => {
51 | if (!c.env.PUBLIC_MODE) {
52 | return c.json({
53 | msg: 'Public mode disabled, please use the /feed endpoint.'
54 | })
55 | }
56 | const { token, limit, query = '' } = c.req.query()
57 | if (!token) {
58 | return c.json({
59 | msg: 'In public mode, please provide a token, or you can deploy it yourself on cloudflare.'
60 | })
61 | }
62 | const omniUrl = c.env.OMNIVORE_API_URL ?? defaultUrl
63 | // per request instance
64 | const api = new GraphQLFetcher(omniUrl, token)
65 | const feed = await handleTransform(api, {
66 | reqUrl: c.req.url,
67 | limit: parseInt(limit),
68 | query
69 | })
70 | c.header('Content-Type', 'application/xml')
71 | return c.body(feed)
72 | })
73 |
74 | async function handleTransform (api: GraphQLFetcher, options: OmniOptions) {
75 | const { reqUrl, limit = 10, query = '' } = options
76 | const data = await api.request(undefined, limit, query)
77 | const articles = data.data.search.edges
78 | const feed = convertArticlesToRSS(articles, reqUrl)
79 | return feed
80 | }
81 |
82 | export default app
83 |
--------------------------------------------------------------------------------
/src/request.ts:
--------------------------------------------------------------------------------
1 | type ApiResult = {
2 | data: {
3 | search: {
4 | edges: any[]
5 | pageInfo: {
6 | hasNextPage: boolean
7 | endCursor: string
8 | totalCount: number
9 | }
10 | }
11 | }
12 | }
13 |
14 | export class GraphQLFetcher {
15 | private static instance: GraphQLFetcher | null = null
16 | private apiUrl: string
17 | private authToken: string
18 |
19 | constructor(apiUrl: string, authToken: string) {
20 | this.apiUrl = apiUrl
21 | this.authToken = authToken
22 | }
23 |
24 | static getInstance(apiUrl: string, authToken: string): GraphQLFetcher {
25 | if (!this.instance) {
26 | this.instance = new GraphQLFetcher(apiUrl, authToken)
27 | }
28 | return this.instance
29 | }
30 |
31 | /**
32 | * Requests data from the server.
33 | *
34 | * @param {string | undefined} cursor - The cursor for pagination.
35 | * @param {number} limit - The maximum number of items to return.
36 | * @param {string} searchQuery - The search query.
37 | * @return {Promise} A promise that resolves to the response from the server.
38 | */
39 | async request(
40 | cursor: string | undefined,
41 | limit: number,
42 | searchQuery: string
43 | ): Promise {
44 | const query = `
45 | query Search(
46 | $after: String
47 | $first: Int
48 | $query: String
49 | $includeContent: Boolean
50 | $format: String
51 | ) {
52 | search(
53 | after: $after
54 | first: $first
55 | query: $query
56 | includeContent: $includeContent
57 | format: $format
58 | ) {
59 | ... on SearchSuccess {
60 | edges {
61 | node {
62 | id
63 | title
64 | slug
65 | content
66 | url
67 | createdAt
68 | image
69 | author
70 | }
71 | }
72 | pageInfo {
73 | hasNextPage
74 | endCursor
75 | totalCount
76 | }
77 | }
78 | ... on SearchError {
79 | errorCodes
80 | }
81 | }
82 | }
83 | `
84 |
85 | const variables = {
86 | after: cursor,
87 | first: limit,
88 | format: "html",
89 | includeContent: true,
90 | query: searchQuery,
91 | }
92 |
93 | const headers = {
94 | Cookie: `auth=${this.authToken};`,
95 | "Content-Type": "application/json",
96 | }
97 |
98 | const params = {
99 | variables,
100 | query,
101 | }
102 |
103 | const response = await fetch(this.apiUrl, {
104 | method: "POST",
105 | headers,
106 | body: JSON.stringify(params),
107 | })
108 |
109 | return await response.json()
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | hono:
9 | specifier: ^3.7.2
10 | version: 3.7.2
11 | mime:
12 | specifier: 4.0.1
13 | version: 4.0.1
14 |
15 | devDependencies:
16 | '@cloudflare/workers-types':
17 | specifier: ^4.20230914.0
18 | version: 4.20230914.0
19 | wrangler:
20 | specifier: ^3.9.0
21 | version: 3.9.0
22 |
23 | packages:
24 |
25 | /@cloudflare/kv-asset-handler@0.2.0:
26 | resolution: {integrity: sha512-MVbXLbTcAotOPUj0pAMhVtJ+3/kFkwJqc5qNOleOZTv6QkZZABDMS21dSrSlVswEHwrpWC03e4fWytjqKvuE2A==}
27 | dependencies:
28 | mime: 3.0.0
29 | dev: true
30 |
31 | /@cloudflare/workerd-darwin-64@1.20230904.0:
32 | resolution: {integrity: sha512-/GDlmxAFbDtrQwP4zOXFbqOfaPvkDxdsCoEa+KEBcAl5uR98+7WW5/b8naBHX+t26uS7p4bLlImM8J5F1ienRQ==}
33 | engines: {node: '>=16'}
34 | cpu: [x64]
35 | os: [darwin]
36 | requiresBuild: true
37 | dev: true
38 | optional: true
39 |
40 | /@cloudflare/workerd-darwin-arm64@1.20230904.0:
41 | resolution: {integrity: sha512-x8WXNc2xnDqr5y1iirnNdyx8GZY3rL5xiF7ebK3mKQeB+jFjkhO71yuPTkDCzUWtOvw1Wfd4jbwy4wxacMX4mQ==}
42 | engines: {node: '>=16'}
43 | cpu: [arm64]
44 | os: [darwin]
45 | requiresBuild: true
46 | dev: true
47 | optional: true
48 |
49 | /@cloudflare/workerd-linux-64@1.20230904.0:
50 | resolution: {integrity: sha512-V58xyMS3oDpKO8Dpdh0r0BXm99OzoGgvWe9ufttVraj/1NTMGELwb6i9ySb8k3F1J9m/sO26+TV7pQc/bGC1VQ==}
51 | engines: {node: '>=16'}
52 | cpu: [x64]
53 | os: [linux]
54 | requiresBuild: true
55 | dev: true
56 | optional: true
57 |
58 | /@cloudflare/workerd-linux-arm64@1.20230904.0:
59 | resolution: {integrity: sha512-VrDaW+pjb5IAKEnNWtEaFiG377kXKmk5Fu0Era4W+jKzPON2BW/qRb/4LNHXQ4yxg/2HLm7RiUTn7JZtt1qO6A==}
60 | engines: {node: '>=16'}
61 | cpu: [arm64]
62 | os: [linux]
63 | requiresBuild: true
64 | dev: true
65 | optional: true
66 |
67 | /@cloudflare/workerd-windows-64@1.20230904.0:
68 | resolution: {integrity: sha512-/R/dE8uy+8J2YeXfDhI8/Bg7YUirdbbjH5/l/Vv00ZRE0lC3nPLcYeyBXSwXIQ6/Xht3gN+lksLQgKd0ZWRd+Q==}
69 | engines: {node: '>=16'}
70 | cpu: [x64]
71 | os: [win32]
72 | requiresBuild: true
73 | dev: true
74 | optional: true
75 |
76 | /@cloudflare/workers-types@4.20230914.0:
77 | resolution: {integrity: sha512-OVeN4lFVu1O0PJGZ2d0FwpK8lelFcr33qYOgCh77ErEYmEBO4adwnIxcIsdQbFbhF0ffN6joiVcljD4zakdaeQ==}
78 | dev: true
79 |
80 | /@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19):
81 | resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==}
82 | peerDependencies:
83 | esbuild: '*'
84 | dependencies:
85 | esbuild: 0.17.19
86 | dev: true
87 |
88 | /@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19):
89 | resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==}
90 | peerDependencies:
91 | esbuild: '*'
92 | dependencies:
93 | esbuild: 0.17.19
94 | escape-string-regexp: 4.0.0
95 | rollup-plugin-node-polyfills: 0.2.1
96 | dev: true
97 |
98 | /@esbuild/android-arm64@0.17.19:
99 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
100 | engines: {node: '>=12'}
101 | cpu: [arm64]
102 | os: [android]
103 | requiresBuild: true
104 | dev: true
105 | optional: true
106 |
107 | /@esbuild/android-arm@0.17.19:
108 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
109 | engines: {node: '>=12'}
110 | cpu: [arm]
111 | os: [android]
112 | requiresBuild: true
113 | dev: true
114 | optional: true
115 |
116 | /@esbuild/android-x64@0.17.19:
117 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
118 | engines: {node: '>=12'}
119 | cpu: [x64]
120 | os: [android]
121 | requiresBuild: true
122 | dev: true
123 | optional: true
124 |
125 | /@esbuild/darwin-arm64@0.17.19:
126 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
127 | engines: {node: '>=12'}
128 | cpu: [arm64]
129 | os: [darwin]
130 | requiresBuild: true
131 | dev: true
132 | optional: true
133 |
134 | /@esbuild/darwin-x64@0.17.19:
135 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
136 | engines: {node: '>=12'}
137 | cpu: [x64]
138 | os: [darwin]
139 | requiresBuild: true
140 | dev: true
141 | optional: true
142 |
143 | /@esbuild/freebsd-arm64@0.17.19:
144 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
145 | engines: {node: '>=12'}
146 | cpu: [arm64]
147 | os: [freebsd]
148 | requiresBuild: true
149 | dev: true
150 | optional: true
151 |
152 | /@esbuild/freebsd-x64@0.17.19:
153 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
154 | engines: {node: '>=12'}
155 | cpu: [x64]
156 | os: [freebsd]
157 | requiresBuild: true
158 | dev: true
159 | optional: true
160 |
161 | /@esbuild/linux-arm64@0.17.19:
162 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
163 | engines: {node: '>=12'}
164 | cpu: [arm64]
165 | os: [linux]
166 | requiresBuild: true
167 | dev: true
168 | optional: true
169 |
170 | /@esbuild/linux-arm@0.17.19:
171 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
172 | engines: {node: '>=12'}
173 | cpu: [arm]
174 | os: [linux]
175 | requiresBuild: true
176 | dev: true
177 | optional: true
178 |
179 | /@esbuild/linux-ia32@0.17.19:
180 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
181 | engines: {node: '>=12'}
182 | cpu: [ia32]
183 | os: [linux]
184 | requiresBuild: true
185 | dev: true
186 | optional: true
187 |
188 | /@esbuild/linux-loong64@0.17.19:
189 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
190 | engines: {node: '>=12'}
191 | cpu: [loong64]
192 | os: [linux]
193 | requiresBuild: true
194 | dev: true
195 | optional: true
196 |
197 | /@esbuild/linux-mips64el@0.17.19:
198 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
199 | engines: {node: '>=12'}
200 | cpu: [mips64el]
201 | os: [linux]
202 | requiresBuild: true
203 | dev: true
204 | optional: true
205 |
206 | /@esbuild/linux-ppc64@0.17.19:
207 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
208 | engines: {node: '>=12'}
209 | cpu: [ppc64]
210 | os: [linux]
211 | requiresBuild: true
212 | dev: true
213 | optional: true
214 |
215 | /@esbuild/linux-riscv64@0.17.19:
216 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
217 | engines: {node: '>=12'}
218 | cpu: [riscv64]
219 | os: [linux]
220 | requiresBuild: true
221 | dev: true
222 | optional: true
223 |
224 | /@esbuild/linux-s390x@0.17.19:
225 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
226 | engines: {node: '>=12'}
227 | cpu: [s390x]
228 | os: [linux]
229 | requiresBuild: true
230 | dev: true
231 | optional: true
232 |
233 | /@esbuild/linux-x64@0.17.19:
234 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
235 | engines: {node: '>=12'}
236 | cpu: [x64]
237 | os: [linux]
238 | requiresBuild: true
239 | dev: true
240 | optional: true
241 |
242 | /@esbuild/netbsd-x64@0.17.19:
243 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
244 | engines: {node: '>=12'}
245 | cpu: [x64]
246 | os: [netbsd]
247 | requiresBuild: true
248 | dev: true
249 | optional: true
250 |
251 | /@esbuild/openbsd-x64@0.17.19:
252 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
253 | engines: {node: '>=12'}
254 | cpu: [x64]
255 | os: [openbsd]
256 | requiresBuild: true
257 | dev: true
258 | optional: true
259 |
260 | /@esbuild/sunos-x64@0.17.19:
261 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
262 | engines: {node: '>=12'}
263 | cpu: [x64]
264 | os: [sunos]
265 | requiresBuild: true
266 | dev: true
267 | optional: true
268 |
269 | /@esbuild/win32-arm64@0.17.19:
270 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
271 | engines: {node: '>=12'}
272 | cpu: [arm64]
273 | os: [win32]
274 | requiresBuild: true
275 | dev: true
276 | optional: true
277 |
278 | /@esbuild/win32-ia32@0.17.19:
279 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
280 | engines: {node: '>=12'}
281 | cpu: [ia32]
282 | os: [win32]
283 | requiresBuild: true
284 | dev: true
285 | optional: true
286 |
287 | /@esbuild/win32-x64@0.17.19:
288 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
289 | engines: {node: '>=12'}
290 | cpu: [x64]
291 | os: [win32]
292 | requiresBuild: true
293 | dev: true
294 | optional: true
295 |
296 | /@fastify/busboy@2.0.0:
297 | resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==}
298 | engines: {node: '>=14'}
299 | dev: true
300 |
301 | /acorn-walk@8.2.0:
302 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
303 | engines: {node: '>=0.4.0'}
304 | dev: true
305 |
306 | /acorn@8.10.0:
307 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
308 | engines: {node: '>=0.4.0'}
309 | hasBin: true
310 | dev: true
311 |
312 | /anymatch@3.1.3:
313 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
314 | engines: {node: '>= 8'}
315 | dependencies:
316 | normalize-path: 3.0.0
317 | picomatch: 2.3.1
318 | dev: true
319 |
320 | /as-table@1.0.55:
321 | resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==}
322 | dependencies:
323 | printable-characters: 1.0.42
324 | dev: true
325 |
326 | /binary-extensions@2.2.0:
327 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
328 | engines: {node: '>=8'}
329 | dev: true
330 |
331 | /blake3-wasm@2.1.5:
332 | resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
333 | dev: true
334 |
335 | /braces@3.0.2:
336 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
337 | engines: {node: '>=8'}
338 | dependencies:
339 | fill-range: 7.0.1
340 | dev: true
341 |
342 | /buffer-from@1.1.2:
343 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
344 | dev: true
345 |
346 | /capnp-ts@0.7.0:
347 | resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==}
348 | dependencies:
349 | debug: 4.3.4
350 | tslib: 2.6.2
351 | transitivePeerDependencies:
352 | - supports-color
353 | dev: true
354 |
355 | /chokidar@3.5.3:
356 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
357 | engines: {node: '>= 8.10.0'}
358 | dependencies:
359 | anymatch: 3.1.3
360 | braces: 3.0.2
361 | glob-parent: 5.1.2
362 | is-binary-path: 2.1.0
363 | is-glob: 4.0.3
364 | normalize-path: 3.0.0
365 | readdirp: 3.6.0
366 | optionalDependencies:
367 | fsevents: 2.3.3
368 | dev: true
369 |
370 | /cookie@0.5.0:
371 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
372 | engines: {node: '>= 0.6'}
373 | dev: true
374 |
375 | /data-uri-to-buffer@2.0.2:
376 | resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
377 | dev: true
378 |
379 | /debug@4.3.4:
380 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
381 | engines: {node: '>=6.0'}
382 | peerDependencies:
383 | supports-color: '*'
384 | peerDependenciesMeta:
385 | supports-color:
386 | optional: true
387 | dependencies:
388 | ms: 2.1.2
389 | dev: true
390 |
391 | /esbuild@0.17.19:
392 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
393 | engines: {node: '>=12'}
394 | hasBin: true
395 | requiresBuild: true
396 | optionalDependencies:
397 | '@esbuild/android-arm': 0.17.19
398 | '@esbuild/android-arm64': 0.17.19
399 | '@esbuild/android-x64': 0.17.19
400 | '@esbuild/darwin-arm64': 0.17.19
401 | '@esbuild/darwin-x64': 0.17.19
402 | '@esbuild/freebsd-arm64': 0.17.19
403 | '@esbuild/freebsd-x64': 0.17.19
404 | '@esbuild/linux-arm': 0.17.19
405 | '@esbuild/linux-arm64': 0.17.19
406 | '@esbuild/linux-ia32': 0.17.19
407 | '@esbuild/linux-loong64': 0.17.19
408 | '@esbuild/linux-mips64el': 0.17.19
409 | '@esbuild/linux-ppc64': 0.17.19
410 | '@esbuild/linux-riscv64': 0.17.19
411 | '@esbuild/linux-s390x': 0.17.19
412 | '@esbuild/linux-x64': 0.17.19
413 | '@esbuild/netbsd-x64': 0.17.19
414 | '@esbuild/openbsd-x64': 0.17.19
415 | '@esbuild/sunos-x64': 0.17.19
416 | '@esbuild/win32-arm64': 0.17.19
417 | '@esbuild/win32-ia32': 0.17.19
418 | '@esbuild/win32-x64': 0.17.19
419 | dev: true
420 |
421 | /escape-string-regexp@4.0.0:
422 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
423 | engines: {node: '>=10'}
424 | dev: true
425 |
426 | /estree-walker@0.6.1:
427 | resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
428 | dev: true
429 |
430 | /exit-hook@2.2.1:
431 | resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
432 | engines: {node: '>=6'}
433 | dev: true
434 |
435 | /fill-range@7.0.1:
436 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
437 | engines: {node: '>=8'}
438 | dependencies:
439 | to-regex-range: 5.0.1
440 | dev: true
441 |
442 | /fsevents@2.3.3:
443 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
444 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
445 | os: [darwin]
446 | requiresBuild: true
447 | dev: true
448 | optional: true
449 |
450 | /get-source@2.0.12:
451 | resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==}
452 | dependencies:
453 | data-uri-to-buffer: 2.0.2
454 | source-map: 0.6.1
455 | dev: true
456 |
457 | /glob-parent@5.1.2:
458 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
459 | engines: {node: '>= 6'}
460 | dependencies:
461 | is-glob: 4.0.3
462 | dev: true
463 |
464 | /glob-to-regexp@0.4.1:
465 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
466 | dev: true
467 |
468 | /hono@3.7.2:
469 | resolution: {integrity: sha512-5SWYrAQJlfjHggcDTnmKZd5zlUEXmoUiBjnmL6C1W8MX39/bUw6ZIvfEJZgpo7d7Z/vCJ5FRfkjIQPRH5yV/dQ==}
470 | engines: {node: '>=16.0.0'}
471 | dev: false
472 |
473 | /is-binary-path@2.1.0:
474 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
475 | engines: {node: '>=8'}
476 | dependencies:
477 | binary-extensions: 2.2.0
478 | dev: true
479 |
480 | /is-extglob@2.1.1:
481 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
482 | engines: {node: '>=0.10.0'}
483 | dev: true
484 |
485 | /is-glob@4.0.3:
486 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
487 | engines: {node: '>=0.10.0'}
488 | dependencies:
489 | is-extglob: 2.1.1
490 | dev: true
491 |
492 | /is-number@7.0.0:
493 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
494 | engines: {node: '>=0.12.0'}
495 | dev: true
496 |
497 | /magic-string@0.25.9:
498 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
499 | dependencies:
500 | sourcemap-codec: 1.4.8
501 | dev: true
502 |
503 | /mime@3.0.0:
504 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
505 | engines: {node: '>=10.0.0'}
506 | hasBin: true
507 | dev: true
508 |
509 | /mime@4.0.1:
510 | resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==}
511 | engines: {node: '>=16'}
512 | hasBin: true
513 | dev: false
514 |
515 | /miniflare@3.20230918.0:
516 | resolution: {integrity: sha512-Dd29HB7ZlT1CXB2tPH8nW6fBOOXi/m7qFZHjKm2jGS+1OaGfrv0PkT5UspWW5jQi8rWI87xtordAUiIJkwWqRw==}
517 | engines: {node: '>=16.13'}
518 | dependencies:
519 | acorn: 8.10.0
520 | acorn-walk: 8.2.0
521 | capnp-ts: 0.7.0
522 | exit-hook: 2.2.1
523 | glob-to-regexp: 0.4.1
524 | source-map-support: 0.5.21
525 | stoppable: 1.1.0
526 | undici: 5.26.4
527 | workerd: 1.20230904.0
528 | ws: 8.14.2
529 | youch: 3.3.2
530 | zod: 3.22.4
531 | transitivePeerDependencies:
532 | - bufferutil
533 | - supports-color
534 | - utf-8-validate
535 | dev: true
536 |
537 | /ms@2.1.2:
538 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
539 | dev: true
540 |
541 | /mustache@4.2.0:
542 | resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
543 | hasBin: true
544 | dev: true
545 |
546 | /nanoid@3.3.6:
547 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
548 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
549 | hasBin: true
550 | dev: true
551 |
552 | /node-forge@1.3.1:
553 | resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
554 | engines: {node: '>= 6.13.0'}
555 | dev: true
556 |
557 | /normalize-path@3.0.0:
558 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
559 | engines: {node: '>=0.10.0'}
560 | dev: true
561 |
562 | /path-to-regexp@6.2.1:
563 | resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
564 | dev: true
565 |
566 | /picomatch@2.3.1:
567 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
568 | engines: {node: '>=8.6'}
569 | dev: true
570 |
571 | /printable-characters@1.0.42:
572 | resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==}
573 | dev: true
574 |
575 | /readdirp@3.6.0:
576 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
577 | engines: {node: '>=8.10.0'}
578 | dependencies:
579 | picomatch: 2.3.1
580 | dev: true
581 |
582 | /rollup-plugin-inject@3.0.2:
583 | resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
584 | deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
585 | dependencies:
586 | estree-walker: 0.6.1
587 | magic-string: 0.25.9
588 | rollup-pluginutils: 2.8.2
589 | dev: true
590 |
591 | /rollup-plugin-node-polyfills@0.2.1:
592 | resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==}
593 | dependencies:
594 | rollup-plugin-inject: 3.0.2
595 | dev: true
596 |
597 | /rollup-pluginutils@2.8.2:
598 | resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
599 | dependencies:
600 | estree-walker: 0.6.1
601 | dev: true
602 |
603 | /selfsigned@2.1.1:
604 | resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==}
605 | engines: {node: '>=10'}
606 | dependencies:
607 | node-forge: 1.3.1
608 | dev: true
609 |
610 | /source-map-support@0.5.21:
611 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
612 | dependencies:
613 | buffer-from: 1.1.2
614 | source-map: 0.6.1
615 | dev: true
616 |
617 | /source-map@0.6.1:
618 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
619 | engines: {node: '>=0.10.0'}
620 | dev: true
621 |
622 | /sourcemap-codec@1.4.8:
623 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
624 | deprecated: Please use @jridgewell/sourcemap-codec instead
625 | dev: true
626 |
627 | /stacktracey@2.1.8:
628 | resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==}
629 | dependencies:
630 | as-table: 1.0.55
631 | get-source: 2.0.12
632 | dev: true
633 |
634 | /stoppable@1.1.0:
635 | resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==}
636 | engines: {node: '>=4', npm: '>=6'}
637 | dev: true
638 |
639 | /to-regex-range@5.0.1:
640 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
641 | engines: {node: '>=8.0'}
642 | dependencies:
643 | is-number: 7.0.0
644 | dev: true
645 |
646 | /tslib@2.6.2:
647 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
648 | dev: true
649 |
650 | /undici@5.26.4:
651 | resolution: {integrity: sha512-OG+QOf0fTLtazL9P9X7yqWxQ+Z0395Wk6DSkyTxtaq3wQEjIroVe7Y4asCX/vcCxYpNGMnwz8F0qbRYUoaQVMw==}
652 | engines: {node: '>=14.0'}
653 | dependencies:
654 | '@fastify/busboy': 2.0.0
655 | dev: true
656 |
657 | /workerd@1.20230904.0:
658 | resolution: {integrity: sha512-t9znszH0rQGK4mJGvF9L3nN0qKEaObAGx0JkywFtAwH8OkSn+YfQbHNZE+YsJ4qa1hOz1DCNEk08UDFRBaYq4g==}
659 | engines: {node: '>=16'}
660 | hasBin: true
661 | requiresBuild: true
662 | optionalDependencies:
663 | '@cloudflare/workerd-darwin-64': 1.20230904.0
664 | '@cloudflare/workerd-darwin-arm64': 1.20230904.0
665 | '@cloudflare/workerd-linux-64': 1.20230904.0
666 | '@cloudflare/workerd-linux-arm64': 1.20230904.0
667 | '@cloudflare/workerd-windows-64': 1.20230904.0
668 | dev: true
669 |
670 | /wrangler@3.9.0:
671 | resolution: {integrity: sha512-Ho1A76KxbqfcRgCsuN6xGar3BVPyn4oVWM9zx0HvEVhT9wQ7n/LvB6GlPdXKABqEBYhVe/oTH72S5TgWl0DgaA==}
672 | engines: {node: '>=16.13.0'}
673 | hasBin: true
674 | dependencies:
675 | '@cloudflare/kv-asset-handler': 0.2.0
676 | '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
677 | '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
678 | blake3-wasm: 2.1.5
679 | chokidar: 3.5.3
680 | esbuild: 0.17.19
681 | miniflare: 3.20230918.0
682 | nanoid: 3.3.6
683 | path-to-regexp: 6.2.1
684 | selfsigned: 2.1.1
685 | source-map: 0.6.1
686 | source-map-support: 0.5.21
687 | xxhash-wasm: 1.0.2
688 | optionalDependencies:
689 | fsevents: 2.3.3
690 | transitivePeerDependencies:
691 | - bufferutil
692 | - supports-color
693 | - utf-8-validate
694 | dev: true
695 |
696 | /ws@8.14.2:
697 | resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==}
698 | engines: {node: '>=10.0.0'}
699 | peerDependencies:
700 | bufferutil: ^4.0.1
701 | utf-8-validate: '>=5.0.2'
702 | peerDependenciesMeta:
703 | bufferutil:
704 | optional: true
705 | utf-8-validate:
706 | optional: true
707 | dev: true
708 |
709 | /xxhash-wasm@1.0.2:
710 | resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==}
711 | dev: true
712 |
713 | /youch@3.3.2:
714 | resolution: {integrity: sha512-9cwz/z7abtcHOIuH45nzmUFCZbyJA1nLqlirKvyNRx4wDMhqsBaifAJzBej7L4fsVPjFxYq3NK3GAcfvZsydFw==}
715 | dependencies:
716 | cookie: 0.5.0
717 | mustache: 4.2.0
718 | stacktracey: 2.1.8
719 | dev: true
720 |
721 | /zod@3.22.4:
722 | resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
723 | dev: true
724 |
--------------------------------------------------------------------------------