diff --git a/.changeset/smooth-bugs-admire.md b/.changeset/smooth-bugs-admire.md
new file mode 100644
index 000000000..a26c2a427
--- /dev/null
+++ b/.changeset/smooth-bugs-admire.md
@@ -0,0 +1,5 @@
+---
+"create-frames": minor
+---
+
+feat: introduce cli tool to bootstrap projects from templates
diff --git a/.scripts/package.json b/.scripts/package.json
new file mode 100644
index 000000000..aead43de3
--- /dev/null
+++ b/.scripts/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
\ No newline at end of file
diff --git a/.scripts/prepare-create-frames.js b/.scripts/prepare-create-frames.js
new file mode 100644
index 000000000..16dc6d54e
--- /dev/null
+++ b/.scripts/prepare-create-frames.js
@@ -0,0 +1,33 @@
+/**
+ * This script is used to prepare create-frames package for publishing.
+ *
+ * It copies the templates directory to the root of the package so that it can be used by the create-frames package.
+ */
+
+import { dirname, resolve } from "node:path";
+import { fileURLToPath } from "node:url";
+import glob from "fast-glob";
+import { cpSync, renameSync, rmSync } from 'node:fs';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+
+rmSync(resolve(__dirname, "../packages/create-frames/templates"), { force: true, recursive: true });
+
+cpSync(
+ resolve(__dirname, "../templates"),
+ resolve(__dirname, "../packages/create-frames/templates"),
+ {
+ recursive: true,
+ filter: (src) => !/(node_modules|\.turbo|\.next|next-env\.d\.ts)/.test(src),
+ }
+);
+
+const dotfiles = await glob(
+ resolve(__dirname, "../packages/create-frames/templates/**/.*")
+);
+
+// rename dotfiles to use underscore instead of dot so we can publish them to npm as is
+for (const doftile of dotfiles) {
+ renameSync(doftile, doftile.replace("/.", "/_"));
+}
diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx
index 570504f3f..d91135701 100644
--- a/docs/pages/index.mdx
+++ b/docs/pages/index.mdx
@@ -18,6 +18,12 @@ import { HomePage } from "vocs/components";
GitHub
+
+ Quickstart
+
+
+ GitHub
+
@@ -31,15 +37,25 @@ import { HomePage } from "vocs/components";
# Quickstart
-## 1. Clone the frames.js starter template (with local debugger)
+## Bootstrap the project from template using the CLI tool
-Run to clone the starter into a new folder called `framesjs-starter`
+Run one of the commands below based on your preferred package manager and then follow the steps in the terminal.
-```bash
-npx degit github:framesjs/frames.js/examples/framesjs-starter#main framesjs-starter
+:::code-group
+
+```bash [npm]
+npm init frames
+```
+
+```bash [yarn]
+yarn create frames
+```
+
+```bash [pnpm]
+pnpm create frames
```
-or [clone from github](https://github.com/framesjs/frames.js/tree/main/examples/framesjs-starter)
+:::
## Alternatively, add frames.js to your existing project manually
@@ -58,7 +74,12 @@ export async function generateMetadata() {
return {
title: "My page",
other: await fetchMetadata(
- new URL("/frames", process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000")
+ new URL(
+ "/frames",
+ process.env.VERCEL_URL
+ ? `https://${process.env.VERCEL_URL}`
+ : "http://localhost:3000"
+ )
),
};
}
diff --git a/examples/framesjs-starter/package.json b/examples/framesjs-starter/package.json
index b0a3b7491..ab28a3ce0 100644
--- a/examples/framesjs-starter/package.json
+++ b/examples/framesjs-starter/package.json
@@ -8,9 +8,7 @@
"dev:monorepo": "next dev",
"build": "next build",
"start": "next start",
- "lint": "next lint",
- "update-debugger": "npx degit github:framesjs/frames.js/examples/framesjs-starter/app/debug#main app/debug --force",
- "update-framesjs": "yarn upgrade frames.js@latest && yarn run update-debugger"
+ "lint": "next lint"
},
"dependencies": {
"@farcaster/core": "^0.14.3",
@@ -43,4 +41,4 @@
"tailwindcss": "^3.3.0",
"typescript": "^5.3.3"
}
-}
\ No newline at end of file
+}
diff --git a/package.json b/package.json
index bb93324a6..9ac3e3b6b 100644
--- a/package.json
+++ b/package.json
@@ -2,13 +2,13 @@
"name": "framesjs-monorepo",
"private": true,
"scripts": {
- "build": "turbo build",
- "build:ci": "turbo build --filter=!debugger --filter=!framesjs-starter --filter=!utils-starter --filter=!docs",
+ "build": "turbo build --filter=!./templates/* && node ./.scripts/prepare-create-frames.js",
+ "build:ci": "turbo build --filter=!debugger --filter=!framesjs-starter --filter=!utils-starter --filter=!docs --filter=!template-*",
"dev": "FJS_MONOREPO=true turbo dev --filter=framesjs-starter... --filter=debugger...",
"dev:custom-redirects": "turbo dev --filter=custom-redirects...",
"dev:utils-starter": "turbo dev --filter=utils-starter...",
"dev:all": "turbo dev",
- "lint": "turbo lint",
+ "lint": "turbo lint --filter=!template-*",
"test:ci": "jest --ci",
"test": "cd ./packages/frames.js && npm run test:watch",
"publish-packages": "turbo run build lint && changeset version && changeset publish && git push --follow-tags origin main",
@@ -23,9 +23,11 @@
"@framesjs/typescript-config": "*",
"@jest/globals": "^29.7.0",
"@types/jest": "^29.5.11",
+ "fast-glob": "^3.3.2",
"jest": "^29.7.0",
"nock": "beta",
"prettier": "^3.1.1",
+ "rimraf": "^5.0.5",
"turbo": "^1.12.2"
},
"engines": {
@@ -35,7 +37,8 @@
"workspaces": [
"docs",
"examples/*",
- "packages/*"
+ "packages/*",
+ "templates/*"
],
"version": "0.3.0-canary.0"
}
diff --git a/packages/create-frames/.gitignore b/packages/create-frames/.gitignore
new file mode 100644
index 000000000..f10e14abd
--- /dev/null
+++ b/packages/create-frames/.gitignore
@@ -0,0 +1 @@
+templates
\ No newline at end of file
diff --git a/packages/create-frames/.npmignore b/packages/create-frames/.npmignore
new file mode 100644
index 000000000..eb61e78f0
--- /dev/null
+++ b/packages/create-frames/.npmignore
@@ -0,0 +1 @@
+!templates
\ No newline at end of file
diff --git a/packages/create-frames/README.md b/packages/create-frames/README.md
new file mode 100644
index 000000000..2f5df6d52
--- /dev/null
+++ b/packages/create-frames/README.md
@@ -0,0 +1,48 @@
+# Create Frames.js app
+
+Create a new Frames.js app with a single command using predefined templates.
+
+## Creating a project
+
+### Using npm
+
+```sh
+npm init frames
+```
+
+### Using yarn
+
+```sh
+yarn create frames
+```
+
+### Using pnpm
+
+```sh
+pnpm create frames
+```
+
+## Installing globally (optional) and running from terminal
+
+You can also install this package globally and run it from your terminal.
+
+### Using npm
+
+```sh
+npm install -g create-frames
+create-frames
+```
+
+### Using yarn
+
+```sh
+yarn global add create-frames
+create-frames
+```
+
+### Using pnpm
+
+```sh
+pnpm add -g create-frames
+create-frames
+```
diff --git a/packages/create-frames/bin.js b/packages/create-frames/bin.js
new file mode 100755
index 000000000..e9b1d9161
--- /dev/null
+++ b/packages/create-frames/bin.js
@@ -0,0 +1,30 @@
+#!/usr/bin/env node
+import yargs from "yargs";
+import { hideBin } from "yargs/helpers";
+import { getTemplates } from "./utils/getTemplates.js";
+import { create } from "./create.js";
+
+// use only default command
+yargs(hideBin(process.argv))
+ .scriptName("create-frames")
+ .usage("Usage: $0 [options]")
+ .command(
+ "$0",
+ "Create a new project",
+ {
+ name: {
+ alias: "n",
+ describe: "Name of the project",
+ type: "string",
+ },
+ template: {
+ alias: "t",
+ describe: "Choose a template for the project",
+ choices: getTemplates(),
+ },
+ },
+ (args) => {
+ create(args);
+ }
+ )
+ .parse();
diff --git a/packages/create-frames/create.js b/packages/create-frames/create.js
new file mode 100644
index 000000000..e99674800
--- /dev/null
+++ b/packages/create-frames/create.js
@@ -0,0 +1,135 @@
+import { intro, log, outro, select, confirm, text } from "@clack/prompts";
+import { getTemplates } from "./utils/getTemplates.js";
+import { dirname, relative, resolve } from "node:path";
+import { fileURLToPath } from "node:url";
+import { spawnSync } from "node:child_process";
+import ignore from "ignore";
+import pc from "picocolors";
+import { detect as detectPackageManager } from "detect-package-manager";
+import {
+ cpSync,
+ readFileSync,
+ readdirSync,
+ renameSync,
+ writeFileSync,
+} from "node:fs";
+import { packageManagerRunCommand } from "./utils/packageManagerRunCommand.js";
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+/**
+ *
+ * @param {import('yargs').ArgumentsCamelCase<{ t?: string, n?: string }>} params
+ */
+export async function create(params) {
+ if (params.$0 !== "create-frames") {
+ throw new Error("Invalid command");
+ }
+
+ intro("Welcome to frames.js");
+
+ // if there is no -n argument (name, ask for the name of new project)
+ let projectName =
+ params.n ||
+ (await text({
+ message: "Enter the name of your project",
+ placeholder: "my-frames-app",
+ validate(input) {
+ if (!input) {
+ return "Project name is required";
+ }
+
+ return;
+ },
+ }));
+
+ const destDir = resolve(process.cwd(), projectName);
+
+ const template =
+ params.t ||
+ (await select({
+ message: "Choose a template for the project",
+ options: getTemplates().map((template) => ({
+ name: template,
+ value: template,
+ })),
+ defaultValue: "next",
+ validate(input) {
+ if (!input) {
+ return "Template is required";
+ }
+
+ return;
+ },
+ }));
+
+ const templateDir = resolve(__dirname, "./templates", template);
+ const ignoredPatterns = readFileSync(
+ resolve(templateDir, "_gitignore"),
+ "utf-8"
+ );
+ const ignored = ignore().add(ignoredPatterns);
+
+ cpSync(templateDir, destDir, {
+ force: true,
+ recursive: true,
+ filter(src) {
+ const path = relative(templateDir, src);
+
+ return !path || !ignored.ignores(path);
+ },
+ });
+
+ for (const file of readdirSync(destDir)) {
+ if (!file.startsWith("_")) continue;
+
+ renameSync(
+ resolve(destDir, file),
+ resolve(destDir, file.replace("_", "."))
+ );
+ }
+
+ const pkgJsonPath = resolve(destDir, "package.json");
+ const pkgJson = JSON.parse(readFileSync(pkgJsonPath, "utf-8"));
+ pkgJson.name = projectName;
+ writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2));
+
+ log.success(`Project successfully scaffolded in ${pc.blue(destDir)}!`);
+
+ const pkgManager = await detectPackageManager();
+
+ const wantsToInstallDependencies = await confirm({
+ message: `Do you want to install the dependencies using ${pkgManager}?`,
+ initialValue: true,
+ });
+
+ if (wantsToInstallDependencies) {
+ log.message(`Installing the dependencies...`);
+ const result = spawnSync(pkgManager, ["install"], {
+ cwd: destDir,
+ stdio: "ignore",
+ });
+
+ if (result.status !== 0) {
+ log.error(
+ `Failed to install the dependencies, please install them manually.`
+ );
+ process.exit(1);
+ }
+
+ log.success(`Dependencies installed!`);
+ }
+
+ log.message("Next steps:");
+ log.step(
+ `1. Go to the project directory by running: ${pc.blue(`cd ./${projectName}`)}`
+ );
+ log.step(
+ `2. Start the development server and run the app in debugger by running: ${pc.blue(await packageManagerRunCommand("dev"))}`
+ );
+ log.step(
+ `3. Open your browser and go to ${pc.blue(`http://localhost:3010`)} to see your app running in the debugger`
+ );
+
+ outro("Done! Your project has been set up! 🎉");
+}
diff --git a/packages/create-frames/package.json b/packages/create-frames/package.json
new file mode 100644
index 000000000..4f4310671
--- /dev/null
+++ b/packages/create-frames/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "create-frames",
+ "version": "0.0.0",
+ "type": "module",
+ "bin": "bin.js",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.17.0"
+ },
+ "engineStrict": true,
+ "dependencies": {
+ "@clack/prompts": "^0.7.0",
+ "detect-package-manager": "^3.0.1",
+ "ignore": "^5.3.1",
+ "picocolors": "^1.0.0",
+ "yargs": "^17.7.2"
+ },
+ "devDependencies": {
+ "@types/yargs": "^17.0.32"
+ },
+ "repository": "framesjs/frame.js"
+}
diff --git a/packages/create-frames/tsconfig.json b/packages/create-frames/tsconfig.json
new file mode 100644
index 000000000..51c114d05
--- /dev/null
+++ b/packages/create-frames/tsconfig.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "display": "Default",
+ "compilerOptions": {
+ "declaration": true,
+ "declarationMap": true,
+ "esModuleInterop": true,
+ "incremental": false,
+ "isolatedModules": true,
+ "lib": ["es2022", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "moduleDetection": "force",
+ "moduleResolution": "Bundler",
+ "noEmit": true,
+ "noUncheckedIndexedAccess": true,
+ "plugins": [
+ {
+ "name": "next",
+ },
+ ],
+ "jsx": "preserve",
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "target": "ES2022",
+ "allowJs": true,
+ },
+ "include": ["**/*.ts", "**/*.tsx", "**/*.js"],
+ "exclude": ["node_modules"],
+}
diff --git a/packages/create-frames/utils/getTemplates.js b/packages/create-frames/utils/getTemplates.js
new file mode 100644
index 000000000..f0e2fc987
--- /dev/null
+++ b/packages/create-frames/utils/getTemplates.js
@@ -0,0 +1,10 @@
+import { dirname, resolve } from "node:path";
+import { fileURLToPath } from "node:url";
+import { readdirSync } from "node:fs";
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+export function getTemplates() {
+ // make sure you build the frames.js first so templates are copied to templates directory
+ return readdirSync(resolve(__dirname, "../templates"));
+}
diff --git a/packages/create-frames/utils/packageManagerRunCommand.js b/packages/create-frames/utils/packageManagerRunCommand.js
new file mode 100644
index 000000000..c540090b6
--- /dev/null
+++ b/packages/create-frames/utils/packageManagerRunCommand.js
@@ -0,0 +1,16 @@
+import { detect } from "detect-package-manager";
+
+export async function packageManagerRunCommand(command) {
+ const pkgManager = await detect();
+
+ switch (pkgManager) {
+ case "bun":
+ return `bun run ${command}`;
+ case "pnpm":
+ return `pnpm ${command}`;
+ case "yarn":
+ return `yarn ${command}`;
+ default:
+ return `npm run ${command}`;
+ }
+}
diff --git a/templates/express/.gitignore b/templates/express/.gitignore
new file mode 100644
index 000000000..54f07af58
--- /dev/null
+++ b/templates/express/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
\ No newline at end of file
diff --git a/templates/express/README.md b/templates/express/README.md
new file mode 100644
index 000000000..6837f6b7a
--- /dev/null
+++ b/templates/express/README.md
@@ -0,0 +1,11 @@
+# Welcome to Express.js + Frames.js
+
+📖 See the [Express.js docs](https://expressjs.com) and [Frames.js docs](https://framesjs.org) for details on supported features.
+
+## Development
+
+Run the Frames.js debugger and Vite dev server:
+
+```shellscript
+npm run dev
+```
diff --git a/templates/express/index.html b/templates/express/index.html
new file mode 100644
index 000000000..fca754be5
--- /dev/null
+++ b/templates/express/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite + Frames.js + Express.js + TS
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/express/package.json b/templates/express/package.json
new file mode 100644
index 000000000..22ee30bb6
--- /dev/null
+++ b/templates/express/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "template-express",
+ "version": "0.0.0",
+ "type": "module",
+ "private": true,
+ "dependencies": {
+ "compression": "^1.7.4",
+ "express": "^4.19.1",
+ "frames.js": "^0.9.6",
+ "react": "^18.2.0",
+ "sirv": "^2.0.4"
+ },
+ "devDependencies": {
+ "@frames.js/debugger": "^0.1.9",
+ "@types/express": "^4.17.21",
+ "@types/node": "^18.17.0",
+ "@types/react": "^18.2.45",
+ "@vitejs/plugin-react": "^4.2.1",
+ "concurrently": "^8.2.2",
+ "cross-env": "^7.0.3",
+ "typescript": "^5.1.6",
+ "vite": "^5.1.0",
+ "vite-tsconfig-paths": "^4.2.1"
+ },
+ "engines": {
+ "node": ">=18.17.0"
+ },
+ "scripts": {
+ "dev": "concurrently --kill-others \"node server\" \"frames --url http://localhost:5173\"",
+ "build": "npm run build:client && npm run build:server",
+ "build:client": "vite build --ssrManifest --outDir dist/client",
+ "build:server": "vite build --ssr src/entry-server.tsx --outDir dist/server",
+ "preview": "cross-env NODE_ENV=production node server"
+ }
+}
diff --git a/templates/express/server.js b/templates/express/server.js
new file mode 100644
index 000000000..f83570458
--- /dev/null
+++ b/templates/express/server.js
@@ -0,0 +1,57 @@
+import express from "express";
+
+// Constants
+const isProduction = process.env.NODE_ENV === "production";
+const port = process.env.PORT || 5173;
+const base = process.env.BASE || "/";
+
+// Create http server
+const app = express();
+
+// Add Vite or respective production middlewares
+let vite;
+if (!isProduction) {
+ const { createServer } = await import("vite");
+ vite = await createServer({
+ server: { middlewareMode: true },
+ appType: "custom",
+ base,
+ });
+ app.use(vite.middlewares);
+} else {
+ const compression = (await import("compression")).default;
+ const sirv = (await import("sirv")).default;
+ app.use(compression());
+ app.use(base, sirv("./dist/client", { extensions: [] }));
+}
+
+// Serve HTML
+app.use("*", async (req, res) => {
+ try {
+ const url = req.originalUrl.replace(base, "");
+
+ /**
+ * @type {import('express').Handler}
+ */
+ let handleRequest;
+ if (!isProduction) {
+ // Always read fresh template in development
+ handleRequest = (await vite.ssrLoadModule("/src/entry-server.tsx"))
+ .handleRequest;
+ } else {
+ handleRequest = (await import("./dist/server/entry-server.js"))
+ .handleRequest;
+ }
+
+ handleRequest(req, res);
+ } catch (e) {
+ vite?.ssrFixStacktrace(e);
+ console.log(e.stack);
+ res.status(500).end(e.stack);
+ }
+});
+
+// Start http server
+app.listen(port, () => {
+ console.log(`Server started at http://localhost:${port}`);
+});
diff --git a/templates/express/src/entry-server.tsx b/templates/express/src/entry-server.tsx
new file mode 100644
index 000000000..fe5e89b6d
--- /dev/null
+++ b/templates/express/src/entry-server.tsx
@@ -0,0 +1,51 @@
+import { farcasterHubContext } from "frames.js/middleware";
+import { createFrames, Button } from 'frames.js/express';
+
+const frames = createFrames({
+ middleware: [
+ farcasterHubContext({
+ // remove if you aren't using @frames.js/debugger or you just don't want to use the debugger hub
+ ...(process.env.NODE_ENV === "production"
+ ? {}
+ : {
+ hubHttpUrl: "http://localhost:3010/hub",
+ }),
+ }),
+ ],
+});
+
+export const handleRequest = frames(async ctx => {
+ return {
+ image: ctx.message ? (
+
+ GM, {ctx.message.requesterUserData?.displayName}! Your FID is{" "}
+ {ctx.message.requesterFid}
+ {", "}
+ {ctx.message.requesterFid < 20_000
+ ? "you're OG!"
+ : "welcome to the Farcaster!"}
+
+ ) : (
+
+ Say GM
+
+ ),
+ buttons: !ctx.url.searchParams.has("saidGm")
+ ? [
+
+ Say GM
+ ,
+ ]
+ : [],
+ };
+});
\ No newline at end of file
diff --git a/templates/express/src/index.tsx b/templates/express/src/index.tsx
new file mode 100644
index 000000000..e69de29bb
diff --git a/templates/express/src/vite-env.d.ts b/templates/express/src/vite-env.d.ts
new file mode 100644
index 000000000..11f02fe2a
--- /dev/null
+++ b/templates/express/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/templates/express/tsconfig.json b/templates/express/tsconfig.json
new file mode 100644
index 000000000..97cbe737d
--- /dev/null
+++ b/templates/express/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "Bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/templates/express/tsconfig.node.json b/templates/express/tsconfig.node.json
new file mode 100644
index 000000000..1974ea683
--- /dev/null
+++ b/templates/express/tsconfig.node.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "allowSyntheticDefaultImports": true,
+ "jsx": "preserve"
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/templates/express/vite.config.ts b/templates/express/vite.config.ts
new file mode 100644
index 000000000..9cc50ead1
--- /dev/null
+++ b/templates/express/vite.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+});
diff --git a/templates/hono/.gitignore b/templates/hono/.gitignore
new file mode 100644
index 000000000..54f07af58
--- /dev/null
+++ b/templates/hono/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
\ No newline at end of file
diff --git a/templates/hono/README.md b/templates/hono/README.md
new file mode 100644
index 000000000..25a312857
--- /dev/null
+++ b/templates/hono/README.md
@@ -0,0 +1,11 @@
+# Welcome to Hono + Frames.js
+
+📖 See the [Hono docs](https://hono.dev) and [Frames.js docs](https://framesjs.org) for details on supported features.
+
+## Development
+
+Run the Frames.js debugger and Vite dev server:
+
+```shellscript
+npm run dev
+```
diff --git a/templates/hono/index.html b/templates/hono/index.html
new file mode 100644
index 000000000..e7c576e55
--- /dev/null
+++ b/templates/hono/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite + Frames.js + Hono + TS
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/hono/package.json b/templates/hono/package.json
new file mode 100644
index 000000000..564262d24
--- /dev/null
+++ b/templates/hono/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "template-hono",
+ "version": "0.0.0",
+ "type": "module",
+ "private": true,
+ "dependencies": {
+ "@hono/node-server": "^1.9.0",
+ "hono": "^4.1.3",
+ "frames.js": "^0.9.6",
+ "react": "^18.2.0"
+ },
+ "devDependencies": {
+ "@frames.js/debugger": "^0.1.9",
+ "@hono/vite-dev-server": "^0.10.0",
+ "@types/node": "^18.17.0",
+ "@types/react": "^18.2.45",
+ "@vitejs/plugin-react": "^4.2.1",
+ "concurrently": "^8.2.2",
+ "cross-env": "^7.0.3",
+ "typescript": "^5.1.6",
+ "vite": "^5.1.0",
+ "vite-tsconfig-paths": "^4.2.1"
+ },
+ "engines": {
+ "node": ">=18.17.0"
+ },
+ "scripts": {
+ "dev": "concurrently --kill-others \"vite\" \"frames --url http://localhost:5173\"",
+ "build": "npm run build:client && npm run build:server",
+ "build:client": "vite build --ssrManifest --outDir dist/client",
+ "build:server": "vite build --ssr src/server.tsx --outDir dist/server",
+ "preview": "cross-env-shell NODE_ENV=production \"npm run build && node dist/server/server.js\""
+ }
+}
diff --git a/templates/hono/src/index.tsx b/templates/hono/src/index.tsx
new file mode 100644
index 000000000..e69de29bb
diff --git a/templates/hono/src/server.tsx b/templates/hono/src/server.tsx
new file mode 100644
index 000000000..4a4d094b0
--- /dev/null
+++ b/templates/hono/src/server.tsx
@@ -0,0 +1,67 @@
+import { farcasterHubContext } from "frames.js/middleware";
+import { createFrames, Button } from 'frames.js/hono';
+import { Hono } from 'hono';
+import { serve } from "@hono/node-server";
+
+const app = new Hono();
+
+const frames = createFrames({
+ middleware: [
+ farcasterHubContext({
+ // remove if you aren't using @frames.js/debugger or you just don't want to use the debugger hub
+ ...(process.env.NODE_ENV === "production"
+ ? {}
+ : {
+ hubHttpUrl: "http://localhost:3010/hub",
+ }),
+ }),
+ ],
+});
+
+const handleRequest = frames(async ctx => {
+ return {
+ image: ctx.message ? (
+
+ GM, {ctx.message.requesterUserData?.displayName}! Your FID is{" "}
+ {ctx.message.requesterFid}
+ {", "}
+ {ctx.message.requesterFid < 20_000
+ ? "you're OG!"
+ : "welcome to the Farcaster!"}
+
+ ) : (
+
+ Say GM
+
+ ),
+ buttons: !ctx.url.searchParams.has("saidGm")
+ ? [
+
+ Say GM
+ ,
+ ]
+ : [],
+ };
+});
+
+app.get('/', handleRequest);
+app.post('/', handleRequest);
+
+// expose app for `@hono/vite-dev-server`
+export default app;
+
+if (process.env.NODE_ENV === 'production') {
+ serve({ ...app, port: 3000 }, info => {
+ console.log(`Server running on http://localhost:${info.port}`);
+ })
+}
\ No newline at end of file
diff --git a/templates/hono/tsconfig.json b/templates/hono/tsconfig.json
new file mode 100644
index 000000000..97cbe737d
--- /dev/null
+++ b/templates/hono/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "Bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/templates/hono/tsconfig.node.json b/templates/hono/tsconfig.node.json
new file mode 100644
index 000000000..1974ea683
--- /dev/null
+++ b/templates/hono/tsconfig.node.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "allowSyntheticDefaultImports": true,
+ "jsx": "preserve"
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/templates/hono/vite.config.ts b/templates/hono/vite.config.ts
new file mode 100644
index 000000000..33520be12
--- /dev/null
+++ b/templates/hono/vite.config.ts
@@ -0,0 +1,13 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import devServer from "@hono/vite-dev-server";
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [
+ react(),
+ devServer({
+ entry: "./src/server.tsx",
+ }),
+ ],
+});
diff --git a/templates/next-starter-with-examples/.env.sample b/templates/next-starter-with-examples/.env.sample
new file mode 100644
index 000000000..9b743ad15
--- /dev/null
+++ b/templates/next-starter-with-examples/.env.sample
@@ -0,0 +1,17 @@
+# Example: FARCASTER_DEVELOPER_MNEMONIC="candy gibraltar foxtrot kilo barnacles foxes ..."
+# (OPTIONAL) Needed for the debugger to create a real Farcaster signer. Get this by exporting your seed phrase from the Warpcast app. Don't share that seed phrase with anyone.
+FARCASTER_DEVELOPER_MNEMONIC=
+# (OPTIONAL) Only needed for the debugger to create a real Farcaster signer. Get this by visiting your Warpccast profile, pressing the kebab (three dots) menu and then "About" and then your fid should be there.
+# Example: FARCASTER_DEVELOPER_FID=1214
+FARCASTER_DEVELOPER_FID=
+# (OPTIONAL) Hub URL to use for the debugger. If not set, the debugger will use the default hub URL.
+DEBUG_HUB_HTTP_URL=
+
+NEXT_PUBLIC_HOST="http://localhost:3000"
+
+# OPTIONAL EXAMPLE KEYS
+# Optional, if you use this example
+KV_REST_API_URL=""
+KV_REST_API_TOKEN=""
+# Optional
+DEBUGGER_URL=""
\ No newline at end of file
diff --git a/templates/next-starter-with-examples/.eslintrc.js b/templates/next-starter-with-examples/.eslintrc.js
new file mode 100644
index 000000000..00e4aaad1
--- /dev/null
+++ b/templates/next-starter-with-examples/.eslintrc.js
@@ -0,0 +1,5 @@
+/** @type {import("eslint").Linter.Config} */
+module.exports = {
+ root: true,
+ extends: ["next"],
+};
diff --git a/templates/next-starter-with-examples/.gitignore b/templates/next-starter-with-examples/.gitignore
new file mode 100644
index 000000000..f96c7fc29
--- /dev/null
+++ b/templates/next-starter-with-examples/.gitignore
@@ -0,0 +1,39 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+.env
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
+
+mocks.json
diff --git a/templates/next-starter-with-examples/README.md b/templates/next-starter-with-examples/README.md
new file mode 100644
index 000000000..72fa5b720
--- /dev/null
+++ b/templates/next-starter-with-examples/README.md
@@ -0,0 +1,40 @@
+# Frames.js Starter Kit with examples
+
+This is a boilerplate template to get started quickly with `frames.js`
+
+## Quickstart
+
+If running from the frames.js repository itself:
+
+- Run `yarn` from the repository root
+- Run `cd templates/next-starter-with-examples`
+
+1. Install dependencies `yarn install`
+
+2. Run `yarn dev` to run the server and debugger, this will also open the debugger automatically in your browser.
+
+3. Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+4. Edit `app/page.tsx`
+
+5. Visit [http://localhost:3000/examples](http://localhost:3000/examples) to see the list of examples.
+
+6. (Optional) To use a real signer (costs warps), copy `.env.sample` to `.env` and fill in the env variables following the comments provided
+
+## Docs, Questions and Help
+
+- [Frames.js Documentation](https://framesjs.org)
+- [Awesome frames](https://github.com/davidfurlong/awesome-frames?tab=readme-ov-file)
+- Join the [/frames-dev](https://warpcast.com/~/channel/frames-devs) channel on Farcaster to ask questions
+
+## If you get stuck or have feedback, [Message @df please!](https://warpcast.com/df)
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy
+
+```bash
+vercel
+```
+
+more deployment links coming soon, PRs welcome!
diff --git a/templates/next-starter-with-examples/app/debug.ts b/templates/next-starter-with-examples/app/debug.ts
new file mode 100644
index 000000000..d91a3acec
--- /dev/null
+++ b/templates/next-starter-with-examples/app/debug.ts
@@ -0,0 +1,19 @@
+const DEFAULT_DEBUGGER_URL =
+ process.env.DEBUGGER_URL ?? "http://localhost:3010/";
+
+export const DEFAULT_DEBUGGER_HUB_URL =
+ process.env.NODE_ENV === "development"
+ ? new URL("/hub", DEFAULT_DEBUGGER_URL).toString()
+ : undefined;
+
+export function createDebugUrl(frameURL: string | URL): string {
+ try {
+ const url = new URL("/", DEFAULT_DEBUGGER_URL);
+
+ url.searchParams.set("url", frameURL.toString());
+
+ return url.toString();
+ } catch (error) {
+ return "#";
+ }
+}
diff --git a/templates/next-starter-with-examples/app/examples/custom-hub/frames/route.ts b/templates/next-starter-with-examples/app/examples/custom-hub/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/custom-hub/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/examples/custom-hub/page.tsx b/templates/next-starter-with-examples/app/examples/custom-hub/page.tsx
new file mode 100644
index 000000000..02803e8de
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/custom-hub/page.tsx
@@ -0,0 +1,117 @@
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ FrameInput,
+ FrameReducer,
+ NextServerPageProps,
+ getPreviousFrame,
+ useFramesReducer,
+ getFrameMessage,
+} from "frames.js/next/server";
+import Link from "next/link";
+import { getTokenUrl } from "frames.js";
+import { createDebugUrl } from "../../debug";
+import { currentURL } from "../../utils";
+
+type State = {
+ active: string;
+ total_button_presses: number;
+};
+
+const initialState = { active: "1", total_button_presses: 0 };
+
+const reducer: FrameReducer = (state, action) => {
+ return {
+ total_button_presses: state.total_button_presses + 1,
+ active: action.postBody?.untrustedData.buttonIndex
+ ? String(action.postBody?.untrustedData.buttonIndex)
+ : "1",
+ };
+};
+
+// This is a react server component only
+export default async function Home({ searchParams }: NextServerPageProps) {
+ const url = currentURL("/examples/custom-hub");
+ const previousFrame = getPreviousFrame(searchParams);
+
+ const frameMessage = await getFrameMessage(previousFrame.postBody, {
+ hubHttpUrl: "https://hub.freefarcasterhub.com:3281",
+ fetchHubContext: true,
+ });
+
+ if (frameMessage && !frameMessage?.isValid) {
+ throw new Error("Invalid frame payload");
+ }
+
+ const [state, dispatch] = useFramesReducer(
+ reducer,
+ initialState,
+ previousFrame
+ );
+
+ // Here: do a server side side effect either sync or async (using await), such as minting an NFT if you want.
+ // example: load the users credentials & check they have an NFT
+
+ console.log("info: state is:", state);
+
+ if (frameMessage) {
+ const {
+ isValid,
+ buttonIndex,
+ inputText,
+ castId,
+ requesterFid,
+ casterFollowsRequester,
+ requesterFollowsCaster,
+ likedCast,
+ recastedCast,
+ requesterVerifiedAddresses,
+ requesterUserData,
+ } = frameMessage;
+
+ console.log("info: frameMessage is:", frameMessage);
+ }
+
+ // then, when done, return next frame
+ return (
+
+ frames.js starter kit.{" "}
+
+ Debug
+
+
+ {/* */}
+
+
+ {frameMessage?.inputText ? frameMessage.inputText : "Hello world"}
+
+
+
+
+ {state?.active === "1" ? "Active" : "Inactive"}
+
+
+ {state?.active === "2" ? "Active" : "Inactive"}
+
+
+ Mint
+
+
+ External
+
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/mint-button/frames/route.ts b/templates/next-starter-with-examples/app/examples/mint-button/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/mint-button/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/examples/mint-button/page.tsx b/templates/next-starter-with-examples/app/examples/mint-button/page.tsx
new file mode 100644
index 000000000..bf712d793
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/mint-button/page.tsx
@@ -0,0 +1,89 @@
+import { getTokenUrl } from "frames.js";
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ FrameReducer,
+ NextServerPageProps,
+ getPreviousFrame,
+ useFramesReducer,
+} from "frames.js/next/server";
+import Link from "next/link";
+import { zora } from "viem/chains";
+import { currentURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+
+type State = {
+ pageIndex: number;
+};
+
+const nfts: {
+ src: string;
+ tokenUrl: string;
+}[] = [
+ {
+ src: "https://ipfs.decentralized-content.com/ipfs/bafybeifs7vasy5zbmnpixt7tb6efi35kcrmpoz53d3vg5pwjz52q7fl6pq/cook.png",
+ tokenUrl: getTokenUrl({
+ address: "0x99de131ff1223c4f47316c0bb50e42f356dafdaa",
+ chain: zora,
+ tokenId: "2",
+ }),
+ },
+ {
+ src: "https://remote-image.decentralized-content.com/image?url=https%3A%2F%2Fipfs.decentralized-content.com%2Fipfs%2Fbafybeiegrnialwu66u3nwzkn4gik4i2x2h4ip7y3w2dlymzlpxb5lrqbom&w=1920&q=75",
+ tokenUrl: getTokenUrl({
+ address: "0x060f3edd18c47f59bd23d063bbeb9aa4a8fec6df",
+ chain: zora,
+ tokenId: "1",
+ }),
+ },
+ {
+ src: "https://remote-image.decentralized-content.com/image?url=https%3A%2F%2Fipfs.decentralized-content.com%2Fipfs%2Fbafybeidc6e5t3qmyckqh4fr2ewrov5asmeuv4djycopvo3ro366nd3bfpu&w=1920&q=75",
+ tokenUrl: getTokenUrl({
+ address: "0x8f5ed2503b71e8492badd21d5aaef75d65ac0042",
+ chain: zora,
+ tokenId: "3",
+ }),
+ },
+];
+const initialState: State = { pageIndex: 0 };
+
+const reducer: FrameReducer = (state, action) => {
+ const buttonIndex = action.postBody?.untrustedData.buttonIndex;
+
+ return {
+ pageIndex: buttonIndex
+ ? (state.pageIndex + (buttonIndex === 2 ? 1 : -1)) % nfts.length
+ : state.pageIndex,
+ };
+};
+
+// This is a react server component only
+export default async function Home({ searchParams }: NextServerPageProps) {
+ const url = currentURL("/examples/mint-button");
+ const previousFrame = getPreviousFrame(searchParams);
+ const [state] = useFramesReducer(reducer, initialState, previousFrame);
+
+ // then, when done, return next frame
+ return (
+
+ Mint button example Debug
+
+
+ ←
+ →
+
+ Mint
+
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/multi-page/frames/route.ts b/templates/next-starter-with-examples/app/examples/multi-page/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/multi-page/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/examples/multi-page/page.tsx b/templates/next-starter-with-examples/app/examples/multi-page/page.tsx
new file mode 100644
index 000000000..03e133526
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/multi-page/page.tsx
@@ -0,0 +1,61 @@
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ FrameReducer,
+ NextServerPageProps,
+ getPreviousFrame,
+ useFramesReducer,
+} from "frames.js/next/server";
+import Link from "next/link";
+import { currentURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+
+type State = {
+ pageIndex: number;
+};
+
+const totalPages = 5;
+const initialState: State = { pageIndex: 0 };
+
+const reducer: FrameReducer = (state, action) => {
+ const buttonIndex = action.postBody?.untrustedData.buttonIndex;
+
+ return {
+ pageIndex: buttonIndex
+ ? (state.pageIndex + (buttonIndex === 2 ? 1 : -1)) % totalPages
+ : state.pageIndex,
+ };
+};
+
+// This is a react server component only
+export default async function Home({ searchParams }: NextServerPageProps) {
+ const url = currentURL("/examples/multi-page");
+ const previousFrame = getPreviousFrame(searchParams);
+ const [state] = useFramesReducer(reducer, initialState, previousFrame);
+ const imageUrl = `https://picsum.photos/seed/frames.js-${state.pageIndex}/1146/600`;
+
+ // then, when done, return next frame
+ return (
+
+ Multi-page example
Debug
+
+
+
+
+
+ This is slide {state.pageIndex + 1} / {totalPages}
+
+
+
+ ←
+ →
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/multi-protocol/frames/route.ts b/templates/next-starter-with-examples/app/examples/multi-protocol/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/multi-protocol/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/examples/multi-protocol/page.tsx b/templates/next-starter-with-examples/app/examples/multi-protocol/page.tsx
new file mode 100644
index 000000000..9668674f8
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/multi-protocol/page.tsx
@@ -0,0 +1,83 @@
+import { ClientProtocolId } from "frames.js";
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ NextServerPageProps,
+ getFrameMessage,
+ getPreviousFrame,
+} from "frames.js/next/server";
+import { getXmtpFrameMessage, isXmtpFrameActionPayload } from "frames.js/xmtp";
+import { currentURL } from "../../utils";
+import { DEFAULT_DEBUGGER_HUB_URL, createDebugUrl } from "../../debug";
+import Link from "next/link";
+
+const acceptedProtocols: ClientProtocolId[] = [
+ {
+ id: "xmtp",
+ version: "vNext",
+ },
+ {
+ id: "farcaster",
+ version: "vNext",
+ },
+];
+
+// This is a react server component only
+export default async function Home({ searchParams }: NextServerPageProps) {
+ const url = currentURL("/examples/multi-protocol");
+ const previousFrame = getPreviousFrame(searchParams);
+
+ let fid: number | undefined;
+ let walletAddress: string | undefined;
+
+ if (
+ previousFrame.postBody &&
+ isXmtpFrameActionPayload(previousFrame.postBody)
+ ) {
+ const frameMessage = await getXmtpFrameMessage(previousFrame.postBody);
+ walletAddress = frameMessage?.verifiedWalletAddress;
+ } else {
+ const frameMessage = await getFrameMessage(previousFrame.postBody, {
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ });
+
+ if (frameMessage && frameMessage?.isValid) {
+ fid = frameMessage?.requesterFid;
+ walletAddress =
+ frameMessage?.requesterCustodyAddress.length > 0
+ ? frameMessage?.requesterCustodyAddress
+ : frameMessage.requesterCustodyAddress;
+ }
+ }
+
+ return (
+
+ Multi-protocol example{" "}
+
+ Debug
+
+
+
+
+
+ This frame gets the interactor's wallet address or FID
+ depending on the client protocol.
+
+ {fid &&
FID: {fid}
}
+ {walletAddress && (
+
Wallet Address: {walletAddress}
+ )}
+
+
+ Check
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-cache-control/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-cache-control/frames/route.tsx
new file mode 100644
index 000000000..ee6293fa3
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-cache-control/frames/route.tsx
@@ -0,0 +1,28 @@
+/* eslint-disable react/jsx-key */
+import { Button } from "frames.js/next";
+import { createFrames } from "frames.js/next";
+
+const frames = createFrames({
+ basePath: "/examples/new-api-cache-control",
+});
+
+const handleRequest = frames(async (ctx) => {
+ return {
+ image: (
+
+ The current time is {new Date().toLocaleString()}
+
+ ),
+ imageOptions: {
+ aspectRatio: "1:1",
+ },
+ buttons: [Refresh ],
+ headers: {
+ // Max cache age in seconds
+ "Cache-Control": "max-age=5",
+ },
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-cache-control/page.tsx b/templates/next-starter-with-examples/app/examples/new-api-cache-control/page.tsx
new file mode 100644
index 000000000..e0053b7b0
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-cache-control/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api-cache-control/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api-cache-control");
+
+ return (
+
+ Cache control example{" "}
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-mint-button/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-mint-button/frames/route.tsx
new file mode 100644
index 000000000..23ee9ccf8
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-mint-button/frames/route.tsx
@@ -0,0 +1,76 @@
+/* eslint-disable react/jsx-key */
+import { Button, createFrames } from "frames.js/next";
+import { getTokenUrl } from "frames.js";
+import { zora } from "viem/chains";
+
+const nfts: {
+ src: string;
+ tokenUrl: string;
+}[] = [
+ {
+ src: "https://ipfs.decentralized-content.com/ipfs/bafybeifs7vasy5zbmnpixt7tb6efi35kcrmpoz53d3vg5pwjz52q7fl6pq/cook.png",
+ tokenUrl: getTokenUrl({
+ address: "0x99de131ff1223c4f47316c0bb50e42f356dafdaa",
+ chain: zora,
+ tokenId: "2",
+ }),
+ },
+ {
+ src: "https://remote-image.decentralized-content.com/image?url=https%3A%2F%2Fipfs.decentralized-content.com%2Fipfs%2Fbafybeiegrnialwu66u3nwzkn4gik4i2x2h4ip7y3w2dlymzlpxb5lrqbom&w=1920&q=75",
+ tokenUrl: getTokenUrl({
+ address: "0x060f3edd18c47f59bd23d063bbeb9aa4a8fec6df",
+ chain: zora,
+ tokenId: "1",
+ }),
+ },
+ {
+ src: "https://remote-image.decentralized-content.com/image?url=https%3A%2F%2Fipfs.decentralized-content.com%2Fipfs%2Fbafybeidc6e5t3qmyckqh4fr2ewrov5asmeuv4djycopvo3ro366nd3bfpu&w=1920&q=75",
+ tokenUrl: getTokenUrl({
+ address: "0x8f5ed2503b71e8492badd21d5aaef75d65ac0042",
+ chain: zora,
+ tokenId: "3",
+ }),
+ },
+];
+
+const frames = createFrames({
+ basePath: "/examples/new-api-mint-button/frames",
+});
+
+const handleRequest = frames(async (ctx) => {
+ const page = Number(ctx.searchParams?.pageIndex ?? 0);
+ return {
+ image: nfts[page]!.src,
+ imageOptions: {
+ aspectRatio: "1:1",
+ },
+ buttons: [
+
+ ←
+ ,
+
+ →
+ ,
+
+ Mint
+ ,
+ ],
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-mint-button/page.tsx b/templates/next-starter-with-examples/app/examples/new-api-mint-button/page.tsx
new file mode 100644
index 000000000..7ab663d32
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-mint-button/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api-mint-button/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api-mint-button");
+
+ return (
+
+ New api mint button example.{" "}
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-multi-page/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-multi-page/frames/route.tsx
new file mode 100644
index 000000000..8973e65f0
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-multi-page/frames/route.tsx
@@ -0,0 +1,47 @@
+/* eslint-disable react/jsx-key */
+import { createFrames, Button } from "frames.js/next";
+
+const totalPages = 5;
+
+const frames = createFrames({
+ basePath: "/examples/new-api-multi-page/frames",
+});
+
+const handleRequest = frames(async (ctx) => {
+ const pageIndex = Number(ctx.searchParams.pageIndex || 0);
+
+ const imageUrl = `https://picsum.photos/seed/frames.js-${pageIndex}/300/200`;
+
+ return {
+ image: (
+
+
+
+ This is slide {pageIndex + 1} / {totalPages}
+
+
+ ),
+ buttons: [
+
+ ←
+ ,
+
+ →
+ ,
+ ],
+ textInput: "Type something!",
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-multi-page/page.tsx b/templates/next-starter-with-examples/app/examples/new-api-multi-page/page.tsx
new file mode 100644
index 000000000..7c92dee31
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-multi-page/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api-multi-page/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api-multi-page");
+
+ return (
+
+ Multi-page example
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/frames.ts b/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/frames.ts
new file mode 100644
index 000000000..0234c8657
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/frames.ts
@@ -0,0 +1,34 @@
+/* eslint-disable react/jsx-key */
+import { farcasterHubContext, openframes } from "frames.js/middleware";
+import { createFrames } from "frames.js/next";
+import { getXmtpFrameMessage, isXmtpFrameActionPayload } from "frames.js/xmtp";
+import { DEFAULT_DEBUGGER_HUB_URL } from "../../debug";
+
+export const frames = createFrames({
+ basePath: "/examples/new-api-multi-protocol",
+ initialState: {
+ pageIndex: 0,
+ },
+ middleware: [
+ farcasterHubContext({
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ }),
+ openframes({
+ clientProtocol: {
+ id: "xmtp",
+ version: "2024-02-09",
+ },
+ handler: {
+ isValidPayload: (body: JSON) => isXmtpFrameActionPayload(body),
+ getFrameMessage: async (body: JSON) => {
+ if (!isXmtpFrameActionPayload(body)) {
+ return undefined;
+ }
+ const result = await getXmtpFrameMessage(body);
+
+ return { ...result };
+ },
+ },
+ }),
+ ],
+});
diff --git a/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/frames/route.tsx
new file mode 100644
index 000000000..07043b99d
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/frames/route.tsx
@@ -0,0 +1,20 @@
+import { Button } from "frames.js/next";
+import { frames } from "../frames";
+
+const handleRequest = frames(async (ctx) => {
+ return {
+ image: (
+
+ ),
+ buttons: [
+
+ Who am I?
+ ,
+ ],
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/page.tsx b/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/page.tsx
new file mode 100644
index 000000000..4051f3eb4
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api-multi-protocol/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api-multi-protocol");
+
+ return (
+
+ Multi-protocol example
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/who-am-i/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/who-am-i/route.tsx
new file mode 100644
index 000000000..ca633b088
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-multi-protocol/who-am-i/route.tsx
@@ -0,0 +1,14 @@
+import { frames } from "../frames";
+
+export const POST = frames(async (ctx) => {
+ return {
+ image: (
+
+ You are{" "}
+ {ctx.message?.requesterCustodyAddress ||
+ ctx.message?.verifiedWalletAddress}{" "}
+ from {ctx.clientProtocol?.id}
+
+ ),
+ };
+});
diff --git a/templates/next-starter-with-examples/app/examples/new-api-only-followers-can-mint/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-only-followers-can-mint/frames/route.tsx
new file mode 100644
index 000000000..31cc4f6a5
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-only-followers-can-mint/frames/route.tsx
@@ -0,0 +1,65 @@
+/* eslint-disable react/jsx-key */
+import { getTokenUrl } from "frames.js";
+import { farcasterHubContext } from "frames.js/middleware";
+import { Button, createFrames } from "frames.js/next";
+import { zora } from "viem/chains";
+import { DEFAULT_DEBUGGER_HUB_URL } from "../../../debug";
+
+const frames = createFrames({
+ basePath: "/examples/new-api-only-followers-can-mint/frames",
+ middleware: [
+ farcasterHubContext({
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ }),
+ ],
+});
+
+const handleRequest = frames(async (ctx) => {
+ const page = ctx.searchParams?.page ?? "initial";
+ if (page === "initial")
+ return {
+ image: (
+
+
+ You can mint if you follow the caster.
+
+
+ ),
+ buttons: [
+
+ Am I?
+ ,
+ ],
+ };
+ return {
+ image: (
+
+ {ctx.message?.requesterFollowsCaster
+ ? "You are following the caster."
+ : "You are not following the caster"}
+
+ ),
+ buttons: [
+ ctx.message?.requesterFollowsCaster ? (
+
+ Mint
+
+ ) : (
+
+ Check again
+
+ ),
+ ],
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-only-followers-can-mint/page.tsx b/templates/next-starter-with-examples/app/examples/new-api-only-followers-can-mint/page.tsx
new file mode 100644
index 000000000..411c881cb
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-only-followers-can-mint/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api-only-followers-can-mint/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api-only-followers-can-mint");
+
+ return (
+
+ New api example only followers can mint.{" "}
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-post-redirect/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-post-redirect/frames/route.tsx
new file mode 100644
index 000000000..b478f04b1
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-post-redirect/frames/route.tsx
@@ -0,0 +1,28 @@
+/* eslint-disable react/jsx-key */
+import { createFrames, Button } from "frames.js/next";
+import { redirect } from "frames.js/core";
+
+const frames = createFrames({
+ basePath: "/examples/new-api-post-redirect/frames",
+});
+
+const handleRequest = frames(async (ctx) => {
+ if (ctx.pressedButton?.action === "post_redirect") {
+ // Do something with the POST
+
+ // when post_redirect button is clicked you must return a redirect response
+ return redirect("https://google.com");
+ }
+
+ return {
+ image: (
+
+
Post redirect example
+
+ ),
+ buttons: [Google ],
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-post-redirect/page.tsx b/templates/next-starter-with-examples/app/examples/new-api-post-redirect/page.tsx
new file mode 100644
index 000000000..ac5b9b54c
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-post-redirect/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api-post-redirect/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api-post-redirect");
+
+ return (
+
+ Post redirect example
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-slow-request/README.md b/templates/next-starter-with-examples/app/examples/new-api-slow-request/README.md
new file mode 100644
index 000000000..0f563d1d5
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-slow-request/README.md
@@ -0,0 +1,6 @@
+# Step 1
+
+Setup a key value store
+https://vercel.com/docs/storage/vercel-kv/quickstart
+
+or follow the steps in this PR to set it up locally using Docker: https://github.com/vercel/storage/issues/281#issuecomment-1650439329
diff --git a/templates/next-starter-with-examples/app/examples/new-api-slow-request/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-slow-request/frames/route.tsx
new file mode 100644
index 000000000..a9944f032
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-slow-request/frames/route.tsx
@@ -0,0 +1,126 @@
+import { kv } from "@vercel/kv";
+import { types } from "frames.js/core";
+import { createFrames, Button } from "frames.js/next";
+import { RandomNumberRequestStateValue } from "../slow-fetch/types";
+
+const frames = createFrames({
+ basePath: "/examples/new-api-slow-request/frames",
+});
+
+const handleRequest = frames(async (ctx) => {
+ const initialFrame = {
+ image: (
+
+ This random number generator takes 10 seconds to respond
+
+ ),
+ buttons: [
+
+ Generate
+ ,
+ ],
+ } satisfies types.FrameDefinition;
+
+ const checkStatusFrame = {
+ image: (
+
+ Loading...
+
+ ),
+ buttons: [
+
+ Check status
+ ,
+ ],
+ } satisfies types.FrameDefinition;
+
+ if (!ctx.message) {
+ return initialFrame;
+ }
+
+ const { requesterFid } = ctx.message;
+ const uniqueId = `fid:${requesterFid}`;
+
+ const existingRequest = await kv.get(uniqueId);
+
+ if (existingRequest) {
+ switch (existingRequest.status) {
+ case "pending":
+ return checkStatusFrame;
+ case "success": {
+ if (ctx.url.searchParams.get("reset") === "true") {
+ // reset to initial state
+ await kv.del(uniqueId);
+ }
+
+ return {
+ image: (
+
+ The number is {existingRequest.data}
+
+ ),
+ buttons: [
+
+ Reset
+ ,
+ ],
+ } satisfies types.FrameDefinition;
+ }
+ case "error": {
+ if (ctx.url.searchParams.get("retry") === "true") {
+ // reset to initial state
+ await kv.del(uniqueId);
+
+ return initialFrame;
+ } else {
+ return {
+ image: {existingRequest.error} ,
+ buttons: [
+
+ Retry
+ ,
+ ],
+ } satisfies types.FrameDefinition;
+ }
+ }
+ }
+ } else {
+ await kv.set(
+ uniqueId,
+ {
+ status: "pending",
+ timestamp: new Date().getTime(),
+ },
+ // set as pending for one minute
+ { ex: 60 }
+ );
+
+ // start request, don't await it! Return a loading page, let this run in the background
+ fetch(
+ new URL(
+ "/examples/new-api-slow-request/slow-fetch",
+ process.env.NEXT_PUBLIC_HOST
+ ).toString(),
+ {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(await ctx.request.clone().json()),
+ }
+ );
+ }
+
+ return initialFrame;
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-slow-request/page.tsx b/templates/next-starter-with-examples/app/examples/new-api-slow-request/page.tsx
new file mode 100644
index 000000000..40022d793
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-slow-request/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api-slow-request/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api-slow-request");
+
+ return (
+
+ Slow request example
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-slow-request/slow-fetch/route.ts b/templates/next-starter-with-examples/app/examples/new-api-slow-request/slow-fetch/route.ts
new file mode 100644
index 000000000..138b20a98
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-slow-request/slow-fetch/route.ts
@@ -0,0 +1,53 @@
+import { getFrameMessage } from "frames.js";
+import { NextRequest, NextResponse } from "next/server";
+import { kv } from "@vercel/kv";
+import { RandomNumberRequestStateValue } from "./types";
+import { DEFAULT_DEBUGGER_HUB_URL } from "../../../debug";
+
+const MAXIMUM_KV_RESULT_LIFETIME_IN_SECONDS = 2 * 60; // 2 minutes
+
+export async function POST(req: NextRequest) {
+ const body = await req.json();
+
+ // verify independently
+ const frameMessage = await getFrameMessage(body, {
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ });
+
+ const uniqueId = `fid:${frameMessage.requesterFid}`;
+
+ // Wait 10 seconds
+ await new Promise((resolve) => setTimeout(resolve, 10000));
+
+ try {
+ const randomNumber = Math.random();
+
+ await kv.set(
+ uniqueId,
+ {
+ data: randomNumber,
+ status: "success",
+ timestamp: new Date().getTime(),
+ },
+ { ex: MAXIMUM_KV_RESULT_LIFETIME_IN_SECONDS }
+ );
+
+ return NextResponse.json({
+ data: randomNumber,
+ status: "success",
+ timestamp: new Date().getTime(),
+ });
+ } catch (e) {
+ await kv.set(
+ uniqueId,
+ {
+ error: String(e),
+ status: "error",
+ timestamp: new Date().getTime(),
+ },
+ { ex: MAXIMUM_KV_RESULT_LIFETIME_IN_SECONDS }
+ );
+ // Handle errors
+ return NextResponse.json({ message: e }, { status: 500 });
+ }
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-slow-request/slow-fetch/types.ts b/templates/next-starter-with-examples/app/examples/new-api-slow-request/slow-fetch/types.ts
new file mode 100644
index 000000000..72fa08eeb
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-slow-request/slow-fetch/types.ts
@@ -0,0 +1,15 @@
+export type RandomNumberRequestStateValue =
+ | {
+ error: string;
+ status: "error";
+ timestamp: number;
+ }
+ | {
+ data: number;
+ status: "success";
+ timestamp: number;
+ }
+ | {
+ status: "pending";
+ timestamp: number;
+ };
diff --git a/templates/next-starter-with-examples/app/examples/new-api-transaction/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api-transaction/frames/route.tsx
new file mode 100644
index 000000000..8a1587891
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-transaction/frames/route.tsx
@@ -0,0 +1,49 @@
+/* eslint-disable react/jsx-key */
+import { Button } from "frames.js/next";
+import { createFrames } from "frames.js/next";
+
+const frames = createFrames({
+ basePath: "/examples/new-api-transaction",
+});
+
+const handleRequest = frames(async (ctx) => {
+ if (ctx.message?.transactionId) {
+ return {
+ image: (
+
+ Transaction submitted! {ctx.message.transactionId}
+
+ ),
+ imageOptions: {
+ aspectRatio: "1:1",
+ },
+ buttons: [
+
+ View on block explorer
+ ,
+ ],
+ };
+ }
+
+ return {
+ image: (
+
+ Rent farcaster storage
+
+ ),
+ imageOptions: {
+ aspectRatio: "1:1",
+ },
+ buttons: [
+
+ Buy a unit
+ ,
+ ],
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-transaction/page.tsx b/templates/next-starter-with-examples/app/examples/new-api-transaction/page.tsx
new file mode 100644
index 000000000..97fd5987f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-transaction/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api-transaction/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api-transaction");
+
+ return (
+
+ Rent farcaster storage example{" "}
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api-transaction/txdata/contracts/storage-registry.ts b/templates/next-starter-with-examples/app/examples/new-api-transaction/txdata/contracts/storage-registry.ts
new file mode 100644
index 000000000..3f7e362b3
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-transaction/txdata/contracts/storage-registry.ts
@@ -0,0 +1,814 @@
+export const storageRegistryABI = [
+ {
+ inputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "_priceFeed",
+ type: "address",
+ },
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "_uptimeFeed",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "_initialUsdUnitPrice",
+ type: "uint256",
+ },
+ { internalType: "uint256", name: "_initialMaxUnits", type: "uint256" },
+ { internalType: "address", name: "_initialVault", type: "address" },
+ { internalType: "address", name: "_initialRoleAdmin", type: "address" },
+ { internalType: "address", name: "_initialOwner", type: "address" },
+ { internalType: "address", name: "_initialOperator", type: "address" },
+ { internalType: "address", name: "_initialTreasurer", type: "address" },
+ ],
+ stateMutability: "nonpayable",
+ type: "constructor",
+ },
+ { inputs: [], name: "CallFailed", type: "error" },
+ { inputs: [], name: "ContractDeprecated", type: "error" },
+ { inputs: [], name: "ExceedsCapacity", type: "error" },
+ { inputs: [], name: "GracePeriodNotOver", type: "error" },
+ { inputs: [], name: "IncompleteRound", type: "error" },
+ { inputs: [], name: "InvalidAddress", type: "error" },
+ { inputs: [], name: "InvalidAmount", type: "error" },
+ { inputs: [], name: "InvalidBatchInput", type: "error" },
+ { inputs: [], name: "InvalidDeprecationTimestamp", type: "error" },
+ { inputs: [], name: "InvalidFixedPrice", type: "error" },
+ { inputs: [], name: "InvalidMaxAnswer", type: "error" },
+ { inputs: [], name: "InvalidMinAnswer", type: "error" },
+ { inputs: [], name: "InvalidPayment", type: "error" },
+ { inputs: [], name: "InvalidPrice", type: "error" },
+ { inputs: [], name: "InvalidRangeInput", type: "error" },
+ { inputs: [], name: "InvalidRoundTimestamp", type: "error" },
+ { inputs: [], name: "NotOperator", type: "error" },
+ { inputs: [], name: "NotOwner", type: "error" },
+ { inputs: [], name: "NotTreasurer", type: "error" },
+ { inputs: [], name: "PriceOutOfBounds", type: "error" },
+ { inputs: [], name: "SequencerDown", type: "error" },
+ { inputs: [], name: "StaleAnswer", type: "error" },
+ { inputs: [], name: "Unauthorized", type: "error" },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "Paused",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "payer",
+ type: "address",
+ },
+ { indexed: true, internalType: "uint256", name: "fid", type: "uint256" },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "units",
+ type: "uint256",
+ },
+ ],
+ name: "Rent",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: "bytes32", name: "role", type: "bytes32" },
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "previousAdminRole",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "newAdminRole",
+ type: "bytes32",
+ },
+ ],
+ name: "RoleAdminChanged",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: "bytes32", name: "role", type: "bytes32" },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "sender",
+ type: "address",
+ },
+ ],
+ name: "RoleGranted",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: "bytes32", name: "role", type: "bytes32" },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "sender",
+ type: "address",
+ },
+ ],
+ name: "RoleRevoked",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldDuration",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newDuration",
+ type: "uint256",
+ },
+ ],
+ name: "SetCacheDuration",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldTimestamp",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newTimestamp",
+ type: "uint256",
+ },
+ ],
+ name: "SetDeprecationTimestamp",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPrice",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPrice",
+ type: "uint256",
+ },
+ ],
+ name: "SetFixedEthUsdPrice",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPeriod",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPeriod",
+ type: "uint256",
+ },
+ ],
+ name: "SetGracePeriod",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldAge",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newAge",
+ type: "uint256",
+ },
+ ],
+ name: "SetMaxAge",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPrice",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPrice",
+ type: "uint256",
+ },
+ ],
+ name: "SetMaxAnswer",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldMax",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newMax",
+ type: "uint256",
+ },
+ ],
+ name: "SetMaxUnits",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPrice",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPrice",
+ type: "uint256",
+ },
+ ],
+ name: "SetMinAnswer",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPrice",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPrice",
+ type: "uint256",
+ },
+ ],
+ name: "SetPrice",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "oldFeed",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "address",
+ name: "newFeed",
+ type: "address",
+ },
+ ],
+ name: "SetPriceFeed",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "oldFeed",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "address",
+ name: "newFeed",
+ type: "address",
+ },
+ ],
+ name: "SetUptimeFeed",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "oldVault",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "address",
+ name: "newVault",
+ type: "address",
+ },
+ ],
+ name: "SetVault",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "Unpaused",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: "address", name: "to", type: "address" },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ ],
+ name: "Withdraw",
+ type: "event",
+ },
+ {
+ inputs: [],
+ name: "DEFAULT_ADMIN_ROLE",
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "VERSION",
+ outputs: [{ internalType: "string", name: "", type: "string" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256[]", name: "fids", type: "uint256[]" },
+ { internalType: "uint256", name: "units", type: "uint256" },
+ ],
+ name: "batchCredit",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256[]", name: "fids", type: "uint256[]" },
+ { internalType: "uint256[]", name: "units", type: "uint256[]" },
+ ],
+ name: "batchRent",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "start", type: "uint256" },
+ { internalType: "uint256", name: "end", type: "uint256" },
+ { internalType: "uint256", name: "units", type: "uint256" },
+ ],
+ name: "continuousCredit",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "fid", type: "uint256" },
+ { internalType: "uint256", name: "units", type: "uint256" },
+ ],
+ name: "credit",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "deprecationTimestamp",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "ethUsdPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "fixedEthUsdPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "bytes32", name: "role", type: "bytes32" }],
+ name: "getRoleAdmin",
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "uint256", name: "index", type: "uint256" },
+ ],
+ name: "getRoleMember",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "bytes32", name: "role", type: "bytes32" }],
+ name: "getRoleMemberCount",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "address", name: "account", type: "address" },
+ ],
+ name: "grantRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "address", name: "account", type: "address" },
+ ],
+ name: "hasRole",
+ outputs: [{ internalType: "bool", name: "", type: "bool" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "lastPriceFeedUpdateBlock",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "lastPriceFeedUpdateTime",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "maxUnits",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "pause",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "paused",
+ outputs: [{ internalType: "bool", name: "", type: "bool" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "prevEthUsdPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "units", type: "uint256" }],
+ name: "price",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeed",
+ outputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeedCacheDuration",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeedMaxAge",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeedMaxAnswer",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeedMinAnswer",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "refreshPrice",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "address", name: "account", type: "address" },
+ ],
+ name: "renounceRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "fid", type: "uint256" },
+ { internalType: "uint256", name: "units", type: "uint256" },
+ ],
+ name: "rent",
+ outputs: [
+ { internalType: "uint256", name: "overpayment", type: "uint256" },
+ ],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "rentedUnits",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "address", name: "account", type: "address" },
+ ],
+ name: "revokeRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "duration", type: "uint256" }],
+ name: "setCacheDuration",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "timestamp", type: "uint256" }],
+ name: "setDeprecationTimestamp",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "fixedPrice", type: "uint256" }],
+ name: "setFixedEthUsdPrice",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "period", type: "uint256" }],
+ name: "setGracePeriod",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "age", type: "uint256" }],
+ name: "setMaxAge",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "maxPrice", type: "uint256" }],
+ name: "setMaxAnswer",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "max", type: "uint256" }],
+ name: "setMaxUnits",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "minPrice", type: "uint256" }],
+ name: "setMinAnswer",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "usdPrice", type: "uint256" }],
+ name: "setPrice",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "feed",
+ type: "address",
+ },
+ ],
+ name: "setPriceFeed",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "feed",
+ type: "address",
+ },
+ ],
+ name: "setUptimeFeed",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "address", name: "vaultAddr", type: "address" }],
+ name: "setVault",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "bytes4", name: "interfaceId", type: "bytes4" }],
+ name: "supportsInterface",
+ outputs: [{ internalType: "bool", name: "", type: "bool" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "unitPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "unpause",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "uptimeFeed",
+ outputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "uptimeFeedGracePeriod",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "usdUnitPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "vault",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "amount", type: "uint256" }],
+ name: "withdraw",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+] as const;
diff --git a/templates/next-starter-with-examples/app/examples/new-api-transaction/txdata/route.ts b/templates/next-starter-with-examples/app/examples/new-api-transaction/txdata/route.ts
new file mode 100644
index 000000000..c574ab85c
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api-transaction/txdata/route.ts
@@ -0,0 +1,58 @@
+import { STORAGE_REGISTRY_ADDRESS } from "@farcaster/core";
+import { TransactionTargetResponse } from "frames.js";
+import { getFrameMessage } from "frames.js/next/server";
+import { NextRequest, NextResponse } from "next/server";
+import {
+ Abi,
+ createPublicClient,
+ encodeFunctionData,
+ getContract,
+ http,
+} from "viem";
+import { optimism } from "viem/chains";
+import { storageRegistryABI } from "./contracts/storage-registry";
+
+export async function POST(
+ req: NextRequest
+): Promise> {
+ const json = await req.json();
+
+ const frameMessage = await getFrameMessage(json);
+
+ if (!frameMessage) {
+ throw new Error("No frame message");
+ }
+
+ // Get current storage price
+ const units = 1n;
+
+ const calldata = encodeFunctionData({
+ abi: storageRegistryABI,
+ functionName: "rent",
+ args: [BigInt(frameMessage.requesterFid), units],
+ });
+
+ const publicClient = createPublicClient({
+ chain: optimism,
+ transport: http(),
+ });
+
+ const storageRegistry = getContract({
+ address: STORAGE_REGISTRY_ADDRESS,
+ abi: storageRegistryABI,
+ client: publicClient,
+ });
+
+ const unitPrice = await storageRegistry.read.price([units]);
+
+ return NextResponse.json({
+ chainId: "eip155:10", // OP Mainnet 10
+ method: "eth_sendTransaction",
+ params: {
+ abi: storageRegistryABI as Abi,
+ to: STORAGE_REGISTRY_ADDRESS,
+ data: calldata,
+ value: unitPrice.toString(),
+ },
+ });
+}
diff --git a/templates/next-starter-with-examples/app/examples/new-api/frames/frames.ts b/templates/next-starter-with-examples/app/examples/new-api/frames/frames.ts
new file mode 100644
index 000000000..3fdf38d47
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api/frames/frames.ts
@@ -0,0 +1,5 @@
+import { createFrames } from "frames.js/next";
+
+export const frames = createFrames({
+ basePath: "/examples/new-api/frames",
+});
diff --git a/templates/next-starter-with-examples/app/examples/new-api/frames/next/route.tsx b/templates/next-starter-with-examples/app/examples/new-api/frames/next/route.tsx
new file mode 100644
index 000000000..9c6ab573a
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api/frames/next/route.tsx
@@ -0,0 +1,21 @@
+/* eslint-disable react/jsx-key */
+import { Button } from "frames.js/next";
+import { frames } from "../frames";
+
+const handleRequest = frames(async (ctx) => {
+ return {
+ image: (
+
+ This is next frame and you clicked button:{" "}
+ {ctx.pressedButton ? "✅" : "❌"}
+
+ ),
+ buttons: [
+
+ Previous frame
+ ,
+ ],
+ };
+});
+
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api/frames/route.tsx b/templates/next-starter-with-examples/app/examples/new-api/frames/route.tsx
new file mode 100644
index 000000000..4caad2833
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api/frames/route.tsx
@@ -0,0 +1,24 @@
+/* eslint-disable react/jsx-key */
+import { Button } from "frames.js/next";
+import { frames } from "./frames";
+
+const handleRequest = frames(async (ctx) => {
+ return {
+ image: (
+
+ Hello there: {ctx.pressedButton ? "✅" : "❌"}
+ {ctx.message?.inputText ? `, Typed: ${ctx.message?.inputText}` : ""}
+
+ ),
+ buttons: [
+ Click me ,
+
+ Next frame
+ ,
+ ],
+ textInput: "Type something!",
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next-starter-with-examples/app/examples/new-api/page.tsx b/templates/next-starter-with-examples/app/examples/new-api/page.tsx
new file mode 100644
index 000000000..b8a5aef52
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/new-api/page.tsx
@@ -0,0 +1,33 @@
+import Link from "next/link";
+import { currentURL, vercelURL } from "../../utils";
+import { createDebugUrl } from "../../debug";
+import type { Metadata } from "next";
+import { fetchMetadata } from "frames.js/next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "New api example",
+ description: "This is a new api example",
+ other: {
+ ...(await fetchMetadata(
+ new URL(
+ "/examples/new-api/frames",
+ vercelURL() || "http://localhost:3000"
+ )
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ const url = currentURL("/examples/new-api");
+
+ return (
+
+ New api example.{" "}
+
+ Debug
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/only-followers-can-mint/frames/route.ts b/templates/next-starter-with-examples/app/examples/only-followers-can-mint/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/only-followers-can-mint/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/examples/only-followers-can-mint/page.tsx b/templates/next-starter-with-examples/app/examples/only-followers-can-mint/page.tsx
new file mode 100644
index 000000000..7b0787184
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/only-followers-can-mint/page.tsx
@@ -0,0 +1,115 @@
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ FrameReducer,
+ NextServerPageProps,
+ getFrameMessage,
+ getPreviousFrame,
+ useFramesReducer,
+} from "frames.js/next/server";
+import Link from "next/link";
+import { getTokenUrl } from "frames.js";
+import { zora } from "viem/chains";
+import { DEFAULT_DEBUGGER_HUB_URL, createDebugUrl } from "../../debug";
+import { currentURL } from "../../utils";
+
+type State =
+ | {
+ page: "initial";
+ }
+ | { page: "result" };
+
+const initialState: State = { page: "initial" };
+
+const reducer: FrameReducer = (state, action) => {
+ const buttonIndex = action.postBody?.untrustedData.buttonIndex;
+
+ switch (state.page) {
+ case "initial":
+ return buttonIndex === 1 ? { page: "result" } : state;
+ case "result":
+ return buttonIndex === 1 ? { page: "initial" } : state;
+ default:
+ return { page: "initial" };
+ }
+};
+
+// This is a react server component only
+export default async function Home({
+ params,
+ searchParams,
+}: NextServerPageProps) {
+ const url = currentURL("/examples/slow-request");
+
+ const previousFrame = getPreviousFrame(searchParams);
+
+ const frameMessage = await getFrameMessage(previousFrame.postBody, {
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ });
+
+ console.log("info: frameMessage is:", frameMessage);
+
+ if (frameMessage && !frameMessage?.isValid) {
+ throw new Error("Invalid frame payload");
+ }
+
+ const [state, dispatch] = useFramesReducer(
+ reducer,
+ initialState,
+ previousFrame
+ );
+
+ // Here: do a server side side effect either sync or async (using await), such as minting an NFT if you want.
+ // example: load the users credentials & check they have an NFT
+ console.log("info: state is:", state);
+
+ const initialPage = [
+
+
+ You can mint if you follow the caster.
+
+ ,
+ Am I? ,
+ ];
+
+ const resultPage = [
+
+
+ {frameMessage?.requesterFollowsCaster
+ ? "You are following the caster."
+ : "You are not following the caster"}
+
+ ,
+ ← ,
+ frameMessage?.requesterFollowsCaster ? (
+
+ Mint
+
+ ) : null,
+ ];
+
+ // then, when done, return next frame
+ return (
+
+ Only followers can mint example.{" "}
+ Debug
+
+ {state.page === "initial" ? initialPage : resultPage}
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/page.tsx b/templates/next-starter-with-examples/app/examples/page.tsx
new file mode 100644
index 000000000..6e83231f7
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/page.tsx
@@ -0,0 +1,112 @@
+import Link from "next/link";
+
+export default function ExamplesIndexPage() {
+ return (
+
+
Frames.js v0.9
+
+
+
+ Basic
+
+
+
+
+ Transactions
+
+
+
+
+ Multi Page
+
+
+
+
+ Mint button
+
+
+
+
+ Only followers can mint
+
+
+
+
+ Post redirect
+
+
+
+
+ Open Frames
+
+
+
+
+ Caching
+
+
+
+
+ Slow requests
+
+
+
+
Frames.js v0.8 and below
+
+
+
+ Basic
+
+
+
+
+ Transactions
+
+
+
+
+ Custom Hub
+
+
+
+
+ Mint button
+
+
+
+
+ Multi page
+
+
+
+
+ Multi protocol
+
+
+
+
+ Only followers can mint
+
+
+
+
+ Slow request
+
+
+
+
+ User data
+
+
+
+
+ Page router
+
+
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/slow-request/README.md b/templates/next-starter-with-examples/app/examples/slow-request/README.md
new file mode 100644
index 000000000..0f563d1d5
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/slow-request/README.md
@@ -0,0 +1,6 @@
+# Step 1
+
+Setup a key value store
+https://vercel.com/docs/storage/vercel-kv/quickstart
+
+or follow the steps in this PR to set it up locally using Docker: https://github.com/vercel/storage/issues/281#issuecomment-1650439329
diff --git a/templates/next-starter-with-examples/app/examples/slow-request/frames/route.ts b/templates/next-starter-with-examples/app/examples/slow-request/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/slow-request/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/examples/slow-request/page.tsx b/templates/next-starter-with-examples/app/examples/slow-request/page.tsx
new file mode 100644
index 000000000..7f8ea62f4
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/slow-request/page.tsx
@@ -0,0 +1,178 @@
+import { kv } from "@vercel/kv";
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ NextServerPageProps,
+ getFrameMessage,
+ getPreviousFrame,
+} from "frames.js/next/server";
+import Link from "next/link";
+import { RandomNumberRequestStateValue } from "./slow-fetch/types";
+import { currentURL } from "../../utils";
+import { DEFAULT_DEBUGGER_HUB_URL, createDebugUrl } from "../../debug";
+
+type State = {};
+
+const initialState: State = {} as const;
+
+// This is a react server component only
+export default async function Home({ searchParams }: NextServerPageProps) {
+ const url = currentURL("/examples/slow-request");
+ const previousFrame = getPreviousFrame(searchParams);
+
+ const frameMessage = await getFrameMessage(previousFrame.postBody, {
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ });
+
+ if (frameMessage && !frameMessage?.isValid) {
+ throw new Error("Invalid frame payload");
+ }
+
+ let frame: React.ReactElement;
+
+ const intialFrame = (
+
+
+
+ This random number generator takes 10 seconds to respond
+
+
+ Generate
+
+ );
+
+ const checkStatusFrame = (
+
+
+
+ Loading...
+
+
+ Check status
+
+ );
+
+ const errorFrame = (error: string) => (
+
+ {error}
+
+ Retry
+
+
+ );
+
+ if (frameMessage) {
+ const { requesterFid } = frameMessage;
+
+ const uniqueId = `fid:${requesterFid}`;
+
+ const existingRequest =
+ await kv.get(uniqueId);
+
+ if (existingRequest) {
+ switch (existingRequest.status) {
+ case "pending":
+ frame = checkStatusFrame;
+ break;
+ case "success":
+ // if retry is true, then try to generate again and show checkStatusFrame
+ if (searchParams?.reset === "true") {
+ // reset to initial state
+ await kv.del(uniqueId);
+
+ frame = intialFrame;
+ } else {
+ frame = (
+
+
+
+ The number is {existingRequest.data}
+
+
+
+ Reset
+
+
+ );
+ }
+ break;
+ case "error":
+ // if retry is true, then try to generate again and show checkStatusFrame
+ if (searchParams?.retry === "true") {
+ // reset to initial state
+ await kv.del(uniqueId);
+
+ frame = intialFrame;
+ } else {
+ frame = errorFrame(existingRequest.error);
+ }
+ break;
+ }
+ } else {
+ await kv.set(
+ uniqueId,
+ {
+ status: "pending",
+ timestamp: new Date().getTime(),
+ },
+ // set as pending for one minute
+ { ex: 60 }
+ );
+
+ // start request, don't await it! Return a loading page, let this run in the background
+ fetch(
+ new URL(
+ "/examples/slow-request/slow-fetch",
+ process.env.NEXT_PUBLIC_HOST
+ ).toString(),
+ {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ postBody: JSON.parse(searchParams?.postBody as string),
+ }),
+ }
+ );
+
+ frame = checkStatusFrame;
+ }
+ } else {
+ frame = intialFrame;
+ }
+
+ // then, when done, return next frame
+ return (
+
+ frames.js starter kit with slow requests.{" "}
+
+ Debug
+
+ {frame}
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/slow-request/slow-fetch/route.ts b/templates/next-starter-with-examples/app/examples/slow-request/slow-fetch/route.ts
new file mode 100644
index 000000000..22d594015
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/slow-request/slow-fetch/route.ts
@@ -0,0 +1,53 @@
+import { getFrameMessage } from "frames.js";
+import { NextRequest, NextResponse } from "next/server";
+import { kv } from "@vercel/kv";
+import { RandomNumberRequestStateValue } from "./types";
+import { DEFAULT_DEBUGGER_HUB_URL } from "../../../debug";
+
+const MAXIMUM_KV_RESULT_LIFETIME_IN_SECONDS = 2 * 60; // 2 minutes
+
+export async function POST(req: NextRequest) {
+ const body = await req.json();
+
+ // verify independently
+ const frameMessage = await getFrameMessage(body.postBody, {
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ });
+
+ const uniqueId = `fid:${frameMessage.requesterFid}`;
+
+ // Wait 10 seconds
+ await new Promise((resolve) => setTimeout(resolve, 10000));
+
+ try {
+ const randomNumber = Math.random();
+
+ await kv.set(
+ uniqueId,
+ {
+ data: randomNumber,
+ status: "success",
+ timestamp: new Date().getTime(),
+ },
+ { ex: MAXIMUM_KV_RESULT_LIFETIME_IN_SECONDS }
+ );
+
+ return NextResponse.json({
+ data: randomNumber,
+ status: "success",
+ timestamp: new Date().getTime(),
+ });
+ } catch (e) {
+ await kv.set(
+ uniqueId,
+ {
+ error: String(e),
+ status: "error",
+ timestamp: new Date().getTime(),
+ },
+ { ex: MAXIMUM_KV_RESULT_LIFETIME_IN_SECONDS }
+ );
+ // Handle errors
+ return NextResponse.json({ message: e }, { status: 500 });
+ }
+}
diff --git a/templates/next-starter-with-examples/app/examples/slow-request/slow-fetch/types.ts b/templates/next-starter-with-examples/app/examples/slow-request/slow-fetch/types.ts
new file mode 100644
index 000000000..72fa08eeb
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/slow-request/slow-fetch/types.ts
@@ -0,0 +1,15 @@
+export type RandomNumberRequestStateValue =
+ | {
+ error: string;
+ status: "error";
+ timestamp: number;
+ }
+ | {
+ data: number;
+ status: "success";
+ timestamp: number;
+ }
+ | {
+ status: "pending";
+ timestamp: number;
+ };
diff --git a/templates/next-starter-with-examples/app/examples/transaction/frames/route.ts b/templates/next-starter-with-examples/app/examples/transaction/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/transaction/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/examples/transaction/page.tsx b/templates/next-starter-with-examples/app/examples/transaction/page.tsx
new file mode 100644
index 000000000..560f73953
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/transaction/page.tsx
@@ -0,0 +1,83 @@
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ FrameReducer,
+ NextServerPageProps,
+ getFrameMessage,
+ getPreviousFrame,
+ useFramesReducer,
+} from "frames.js/next/server";
+import Link from "next/link";
+import { currentURL } from "../../utils";
+import { DEFAULT_DEBUGGER_HUB_URL, createDebugUrl } from "../../debug";
+
+type State = {
+ pageIndex: number;
+};
+
+const initialState: State = { pageIndex: 0 };
+
+const reducer: FrameReducer = (state, action) => {
+ return {
+ pageIndex: 0,
+ };
+};
+
+// This is a react server component only
+export default async function Home({ searchParams }: NextServerPageProps) {
+ const url = currentURL("/examples/transaction");
+ const previousFrame = getPreviousFrame(searchParams);
+
+ const [state] = useFramesReducer(reducer, initialState, previousFrame);
+
+ const frameMessage = await getFrameMessage(previousFrame.postBody, {
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ });
+
+ if (frameMessage?.transactionId) {
+ return (
+
+
+
+ Transaction submitted! {frameMessage.transactionId}
+
+
+
+ View on block explorer
+
+
+ );
+ }
+
+ // then, when done, return next frame
+ return (
+
+ Rent farcaster storage example{" "}
+
Debug
+
+
+
+ Rent farcaster storage
+
+
+
+ Buy a unit
+
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/examples/transaction/txdata/contracts/storage-registry.ts b/templates/next-starter-with-examples/app/examples/transaction/txdata/contracts/storage-registry.ts
new file mode 100644
index 000000000..3f7e362b3
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/transaction/txdata/contracts/storage-registry.ts
@@ -0,0 +1,814 @@
+export const storageRegistryABI = [
+ {
+ inputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "_priceFeed",
+ type: "address",
+ },
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "_uptimeFeed",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "_initialUsdUnitPrice",
+ type: "uint256",
+ },
+ { internalType: "uint256", name: "_initialMaxUnits", type: "uint256" },
+ { internalType: "address", name: "_initialVault", type: "address" },
+ { internalType: "address", name: "_initialRoleAdmin", type: "address" },
+ { internalType: "address", name: "_initialOwner", type: "address" },
+ { internalType: "address", name: "_initialOperator", type: "address" },
+ { internalType: "address", name: "_initialTreasurer", type: "address" },
+ ],
+ stateMutability: "nonpayable",
+ type: "constructor",
+ },
+ { inputs: [], name: "CallFailed", type: "error" },
+ { inputs: [], name: "ContractDeprecated", type: "error" },
+ { inputs: [], name: "ExceedsCapacity", type: "error" },
+ { inputs: [], name: "GracePeriodNotOver", type: "error" },
+ { inputs: [], name: "IncompleteRound", type: "error" },
+ { inputs: [], name: "InvalidAddress", type: "error" },
+ { inputs: [], name: "InvalidAmount", type: "error" },
+ { inputs: [], name: "InvalidBatchInput", type: "error" },
+ { inputs: [], name: "InvalidDeprecationTimestamp", type: "error" },
+ { inputs: [], name: "InvalidFixedPrice", type: "error" },
+ { inputs: [], name: "InvalidMaxAnswer", type: "error" },
+ { inputs: [], name: "InvalidMinAnswer", type: "error" },
+ { inputs: [], name: "InvalidPayment", type: "error" },
+ { inputs: [], name: "InvalidPrice", type: "error" },
+ { inputs: [], name: "InvalidRangeInput", type: "error" },
+ { inputs: [], name: "InvalidRoundTimestamp", type: "error" },
+ { inputs: [], name: "NotOperator", type: "error" },
+ { inputs: [], name: "NotOwner", type: "error" },
+ { inputs: [], name: "NotTreasurer", type: "error" },
+ { inputs: [], name: "PriceOutOfBounds", type: "error" },
+ { inputs: [], name: "SequencerDown", type: "error" },
+ { inputs: [], name: "StaleAnswer", type: "error" },
+ { inputs: [], name: "Unauthorized", type: "error" },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "Paused",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "payer",
+ type: "address",
+ },
+ { indexed: true, internalType: "uint256", name: "fid", type: "uint256" },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "units",
+ type: "uint256",
+ },
+ ],
+ name: "Rent",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: "bytes32", name: "role", type: "bytes32" },
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "previousAdminRole",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "newAdminRole",
+ type: "bytes32",
+ },
+ ],
+ name: "RoleAdminChanged",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: "bytes32", name: "role", type: "bytes32" },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "sender",
+ type: "address",
+ },
+ ],
+ name: "RoleGranted",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: "bytes32", name: "role", type: "bytes32" },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "sender",
+ type: "address",
+ },
+ ],
+ name: "RoleRevoked",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldDuration",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newDuration",
+ type: "uint256",
+ },
+ ],
+ name: "SetCacheDuration",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldTimestamp",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newTimestamp",
+ type: "uint256",
+ },
+ ],
+ name: "SetDeprecationTimestamp",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPrice",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPrice",
+ type: "uint256",
+ },
+ ],
+ name: "SetFixedEthUsdPrice",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPeriod",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPeriod",
+ type: "uint256",
+ },
+ ],
+ name: "SetGracePeriod",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldAge",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newAge",
+ type: "uint256",
+ },
+ ],
+ name: "SetMaxAge",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPrice",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPrice",
+ type: "uint256",
+ },
+ ],
+ name: "SetMaxAnswer",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldMax",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newMax",
+ type: "uint256",
+ },
+ ],
+ name: "SetMaxUnits",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPrice",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPrice",
+ type: "uint256",
+ },
+ ],
+ name: "SetMinAnswer",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "oldPrice",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "newPrice",
+ type: "uint256",
+ },
+ ],
+ name: "SetPrice",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "oldFeed",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "address",
+ name: "newFeed",
+ type: "address",
+ },
+ ],
+ name: "SetPriceFeed",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "oldFeed",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "address",
+ name: "newFeed",
+ type: "address",
+ },
+ ],
+ name: "SetUptimeFeed",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "oldVault",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "address",
+ name: "newVault",
+ type: "address",
+ },
+ ],
+ name: "SetVault",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "Unpaused",
+ type: "event",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: "address", name: "to", type: "address" },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ ],
+ name: "Withdraw",
+ type: "event",
+ },
+ {
+ inputs: [],
+ name: "DEFAULT_ADMIN_ROLE",
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "VERSION",
+ outputs: [{ internalType: "string", name: "", type: "string" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256[]", name: "fids", type: "uint256[]" },
+ { internalType: "uint256", name: "units", type: "uint256" },
+ ],
+ name: "batchCredit",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256[]", name: "fids", type: "uint256[]" },
+ { internalType: "uint256[]", name: "units", type: "uint256[]" },
+ ],
+ name: "batchRent",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "start", type: "uint256" },
+ { internalType: "uint256", name: "end", type: "uint256" },
+ { internalType: "uint256", name: "units", type: "uint256" },
+ ],
+ name: "continuousCredit",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "fid", type: "uint256" },
+ { internalType: "uint256", name: "units", type: "uint256" },
+ ],
+ name: "credit",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "deprecationTimestamp",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "ethUsdPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "fixedEthUsdPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "bytes32", name: "role", type: "bytes32" }],
+ name: "getRoleAdmin",
+ outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "uint256", name: "index", type: "uint256" },
+ ],
+ name: "getRoleMember",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "bytes32", name: "role", type: "bytes32" }],
+ name: "getRoleMemberCount",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "address", name: "account", type: "address" },
+ ],
+ name: "grantRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "address", name: "account", type: "address" },
+ ],
+ name: "hasRole",
+ outputs: [{ internalType: "bool", name: "", type: "bool" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "lastPriceFeedUpdateBlock",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "lastPriceFeedUpdateTime",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "maxUnits",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "pause",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "paused",
+ outputs: [{ internalType: "bool", name: "", type: "bool" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "prevEthUsdPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "units", type: "uint256" }],
+ name: "price",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeed",
+ outputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeedCacheDuration",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeedMaxAge",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeedMaxAnswer",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "priceFeedMinAnswer",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "refreshPrice",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "address", name: "account", type: "address" },
+ ],
+ name: "renounceRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "fid", type: "uint256" },
+ { internalType: "uint256", name: "units", type: "uint256" },
+ ],
+ name: "rent",
+ outputs: [
+ { internalType: "uint256", name: "overpayment", type: "uint256" },
+ ],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "rentedUnits",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "role", type: "bytes32" },
+ { internalType: "address", name: "account", type: "address" },
+ ],
+ name: "revokeRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "duration", type: "uint256" }],
+ name: "setCacheDuration",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "timestamp", type: "uint256" }],
+ name: "setDeprecationTimestamp",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "fixedPrice", type: "uint256" }],
+ name: "setFixedEthUsdPrice",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "period", type: "uint256" }],
+ name: "setGracePeriod",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "age", type: "uint256" }],
+ name: "setMaxAge",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "maxPrice", type: "uint256" }],
+ name: "setMaxAnswer",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "max", type: "uint256" }],
+ name: "setMaxUnits",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "minPrice", type: "uint256" }],
+ name: "setMinAnswer",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "usdPrice", type: "uint256" }],
+ name: "setPrice",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "feed",
+ type: "address",
+ },
+ ],
+ name: "setPriceFeed",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "feed",
+ type: "address",
+ },
+ ],
+ name: "setUptimeFeed",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "address", name: "vaultAddr", type: "address" }],
+ name: "setVault",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "bytes4", name: "interfaceId", type: "bytes4" }],
+ name: "supportsInterface",
+ outputs: [{ internalType: "bool", name: "", type: "bool" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "unitPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "unpause",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "uptimeFeed",
+ outputs: [
+ {
+ internalType: "contract AggregatorV3Interface",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "uptimeFeedGracePeriod",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "usdUnitPrice",
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "vault",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "amount", type: "uint256" }],
+ name: "withdraw",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+] as const;
diff --git a/templates/next-starter-with-examples/app/examples/transaction/txdata/route.ts b/templates/next-starter-with-examples/app/examples/transaction/txdata/route.ts
new file mode 100644
index 000000000..c574ab85c
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/transaction/txdata/route.ts
@@ -0,0 +1,58 @@
+import { STORAGE_REGISTRY_ADDRESS } from "@farcaster/core";
+import { TransactionTargetResponse } from "frames.js";
+import { getFrameMessage } from "frames.js/next/server";
+import { NextRequest, NextResponse } from "next/server";
+import {
+ Abi,
+ createPublicClient,
+ encodeFunctionData,
+ getContract,
+ http,
+} from "viem";
+import { optimism } from "viem/chains";
+import { storageRegistryABI } from "./contracts/storage-registry";
+
+export async function POST(
+ req: NextRequest
+): Promise> {
+ const json = await req.json();
+
+ const frameMessage = await getFrameMessage(json);
+
+ if (!frameMessage) {
+ throw new Error("No frame message");
+ }
+
+ // Get current storage price
+ const units = 1n;
+
+ const calldata = encodeFunctionData({
+ abi: storageRegistryABI,
+ functionName: "rent",
+ args: [BigInt(frameMessage.requesterFid), units],
+ });
+
+ const publicClient = createPublicClient({
+ chain: optimism,
+ transport: http(),
+ });
+
+ const storageRegistry = getContract({
+ address: STORAGE_REGISTRY_ADDRESS,
+ abi: storageRegistryABI,
+ client: publicClient,
+ });
+
+ const unitPrice = await storageRegistry.read.price([units]);
+
+ return NextResponse.json({
+ chainId: "eip155:10", // OP Mainnet 10
+ method: "eth_sendTransaction",
+ params: {
+ abi: storageRegistryABI as Abi,
+ to: STORAGE_REGISTRY_ADDRESS,
+ data: calldata,
+ value: unitPrice.toString(),
+ },
+ });
+}
diff --git a/templates/next-starter-with-examples/app/examples/user-data/frames/route.ts b/templates/next-starter-with-examples/app/examples/user-data/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/user-data/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/examples/user-data/page.tsx b/templates/next-starter-with-examples/app/examples/user-data/page.tsx
new file mode 100644
index 000000000..2c347dfcf
--- /dev/null
+++ b/templates/next-starter-with-examples/app/examples/user-data/page.tsx
@@ -0,0 +1,93 @@
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ FrameReducer,
+ NextServerPageProps,
+ getFrameMessage,
+ getPreviousFrame,
+ useFramesReducer,
+} from "frames.js/next/server";
+import Link from "next/link";
+import { currentURL } from "../../utils";
+import { DEFAULT_DEBUGGER_HUB_URL, createDebugUrl } from "../../debug";
+
+type State = {
+ saidGm: boolean;
+};
+
+const initialState: State = { saidGm: false };
+
+const reducer: FrameReducer = (state, action) => {
+ return {
+ saidGm: true,
+ };
+};
+
+// This is a react server component only
+export default async function Home({
+ params,
+ searchParams,
+}: NextServerPageProps) {
+ const url = currentURL("/examples/user-data");
+ const previousFrame = getPreviousFrame(searchParams);
+
+ const frameMessage = await getFrameMessage(previousFrame.postBody, {
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ });
+
+ if (frameMessage && !frameMessage?.isValid) {
+ throw new Error("Invalid frame payload");
+ }
+
+ const [state, dispatch] = useFramesReducer(
+ reducer,
+ initialState,
+ previousFrame
+ );
+
+ // Here: do a server side side effect either sync or async (using await), such as minting an NFT if you want.
+ // example: load the users credentials & check they have an NFT
+ console.log("info: state is:", state);
+
+ // then, when done, return next frame
+ return (
+
+ GM user data example.
Debug
+
+
+ {frameMessage ? (
+
+ GM, {frameMessage.requesterUserData?.displayName}! Your FID is{" "}
+ {frameMessage.requesterFid}
+ {", "}
+ {frameMessage.requesterFid < 20_000
+ ? "you're OG!"
+ : "welcome to the Farcaster!"}
+
+ ) : (
+
+ Say GM
+
+ )}
+
+ {!state.saidGm ? Say GM : null}
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/frames/route.ts b/templates/next-starter-with-examples/app/frames/route.ts
new file mode 100644
index 000000000..2b10a621f
--- /dev/null
+++ b/templates/next-starter-with-examples/app/frames/route.ts
@@ -0,0 +1 @@
+export { POST } from "frames.js/next/server";
diff --git a/templates/next-starter-with-examples/app/globals.css b/templates/next-starter-with-examples/app/globals.css
new file mode 100644
index 000000000..6a7572500
--- /dev/null
+++ b/templates/next-starter-with-examples/app/globals.css
@@ -0,0 +1,76 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 222.2 84% 4.9%;
+
+ --card: 0 0% 100%;
+ --card-foreground: 222.2 84% 4.9%;
+
+ --popover: 0 0% 100%;
+ --popover-foreground: 222.2 84% 4.9%;
+
+ --primary: 222.2 47.4% 11.2%;
+ --primary-foreground: 210 40% 98%;
+
+ --secondary: 210 40% 96.1%;
+ --secondary-foreground: 222.2 47.4% 11.2%;
+
+ --muted: 210 40% 96.1%;
+ --muted-foreground: 215.4 16.3% 46.9%;
+
+ --accent: 210 40% 96.1%;
+ --accent-foreground: 222.2 47.4% 11.2%;
+
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 210 40% 98%;
+
+ --border: 214.3 31.8% 91.4%;
+ --input: 214.3 31.8% 91.4%;
+ --ring: 222.2 84% 4.9%;
+
+ --radius: 0.5rem;
+ }
+
+ .dark {
+ --background: 222.2 84% 4.9%;
+ --foreground: 210 40% 98%;
+
+ --card: 222.2 84% 4.9%;
+ --card-foreground: 210 40% 98%;
+
+ --popover: 222.2 84% 4.9%;
+ --popover-foreground: 210 40% 98%;
+
+ --primary: 210 40% 98%;
+ --primary-foreground: 222.2 47.4% 11.2%;
+
+ --secondary: 217.2 32.6% 17.5%;
+ --secondary-foreground: 210 40% 98%;
+
+ --muted: 217.2 32.6% 17.5%;
+ --muted-foreground: 215 20.2% 65.1%;
+
+ --accent: 217.2 32.6% 17.5%;
+ --accent-foreground: 210 40% 98%;
+
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 210 40% 98%;
+
+ --border: 217.2 32.6% 17.5%;
+ --input: 217.2 32.6% 17.5%;
+ --ring: 212.7 26.8% 83.9%;
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
\ No newline at end of file
diff --git a/templates/next-starter-with-examples/app/layout.tsx b/templates/next-starter-with-examples/app/layout.tsx
new file mode 100644
index 000000000..e9a31acbb
--- /dev/null
+++ b/templates/next-starter-with-examples/app/layout.tsx
@@ -0,0 +1,20 @@
+import type { Metadata } from "next";
+import "./globals.css";
+
+export const metadata: Metadata = {
+ // without a title, warpcast won't validate your frame
+ title: "frames.js starter",
+ description: "...",
+};
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/page.tsx b/templates/next-starter-with-examples/app/page.tsx
new file mode 100644
index 000000000..c34727389
--- /dev/null
+++ b/templates/next-starter-with-examples/app/page.tsx
@@ -0,0 +1,118 @@
+import {
+ FrameButton,
+ FrameContainer,
+ FrameImage,
+ FrameInput,
+ FrameReducer,
+ NextServerPageProps,
+ getFrameMessage,
+ getPreviousFrame,
+ useFramesReducer,
+} from "frames.js/next/server";
+import Link from "next/link";
+import { DEFAULT_DEBUGGER_HUB_URL, createDebugUrl } from "./debug";
+import { currentURL } from "./utils";
+
+type State = {
+ active: string;
+ total_button_presses: number;
+};
+
+const initialState = { active: "1", total_button_presses: 0 };
+
+const reducer: FrameReducer = (state, action) => {
+ return {
+ total_button_presses: state.total_button_presses + 1,
+ active: action.postBody?.untrustedData.buttonIndex
+ ? String(action.postBody?.untrustedData.buttonIndex)
+ : "1",
+ };
+};
+
+// This is a react server component only
+export default async function Home({ searchParams }: NextServerPageProps) {
+ const url = currentURL("/");
+ const previousFrame = getPreviousFrame(searchParams);
+
+ const frameMessage = await getFrameMessage(previousFrame.postBody, {
+ hubHttpUrl: DEFAULT_DEBUGGER_HUB_URL,
+ });
+
+ if (frameMessage && !frameMessage?.isValid) {
+ throw new Error("Invalid frame payload");
+ }
+
+ const [state, dispatch] = useFramesReducer(
+ reducer,
+ initialState,
+ previousFrame
+ );
+
+ // Here: do a server side side effect either sync or async (using await), such as minting an NFT if you want.
+ // example: load the users credentials & check they have an NFT
+
+ console.log("info: state is:", state);
+
+ // then, when done, return next frame
+ return (
+
+ frames.js starter kit. The Template Frame is on this page, it's in
+ the html meta tags (inspect source).{" "}
+
+ Debug
+ {" "}
+ or see{" "}
+
+ other examples
+
+
+ {/* */}
+
+
+
+ {frameMessage?.inputText ? frameMessage.inputText : "Hello world"}
+
+ {frameMessage && (
+
+
+ Requester is @{frameMessage.requesterUserData?.username}{" "}
+
+
+ Requester follows caster:{" "}
+ {frameMessage.requesterFollowsCaster ? "true" : "false"}
+
+
+ Caster follows requester:{" "}
+ {frameMessage.casterFollowsRequester ? "true" : "false"}
+
+
+ Requester liked cast:{" "}
+ {frameMessage.likedCast ? "true" : "false"}
+
+
+ Requester recasted cast:{" "}
+ {frameMessage.recastedCast ? "true" : "false"}
+
+
+ )}
+
+
+
+
+ {state?.active === "1" ? "Active" : "Inactive"}
+
+
+ {state?.active === "2" ? "Active" : "Inactive"}
+
+
+ External
+
+
+
+ );
+}
diff --git a/templates/next-starter-with-examples/app/utils.ts b/templates/next-starter-with-examples/app/utils.ts
new file mode 100644
index 000000000..8b2edf9b5
--- /dev/null
+++ b/templates/next-starter-with-examples/app/utils.ts
@@ -0,0 +1,19 @@
+import { headers } from "next/headers";
+
+export function currentURL(pathname: string): URL {
+ const headersList = headers();
+ const host = headersList.get("x-forwarded-host") || headersList.get("host");
+ const protocol = headersList.get("x-forwarded-proto") || "http";
+
+ try {
+ return new URL(pathname, `${protocol}://${host}`);
+ } catch (error) {
+ return new URL("http://localhost:3000");
+ }
+}
+
+export function vercelURL() {
+ return process.env.VERCEL_URL
+ ? `https://${process.env.VERCEL_URL}`
+ : undefined;
+}
diff --git a/templates/next-starter-with-examples/next.config.mjs b/templates/next-starter-with-examples/next.config.mjs
new file mode 100644
index 000000000..8f885aef1
--- /dev/null
+++ b/templates/next-starter-with-examples/next.config.mjs
@@ -0,0 +1,19 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ // prevent double render on dev mode, which causes 2 frames to exist
+ reactStrictMode: false,
+ images: {
+ remotePatterns: [
+ {
+ hostname: "*",
+ protocol: "http",
+ },
+ {
+ hostname: "*",
+ protocol: "https",
+ },
+ ],
+ },
+};
+
+export default nextConfig;
diff --git a/templates/next-starter-with-examples/package.json b/templates/next-starter-with-examples/package.json
new file mode 100644
index 000000000..e650af8f4
--- /dev/null
+++ b/templates/next-starter-with-examples/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "template-next-starter-with-examples",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "concurrently --kill-others \"next dev\" \"frames --url http://localhost:3000\"",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@farcaster/core": "^0.14.3",
+ "@noble/ed25519": "^2.0.0",
+ "@vercel/kv": "^1.0.1",
+ "@xmtp/frames-validator": "^0.5.0",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.0",
+ "frames.js": "^0.9.3",
+ "lucide-react": "^0.331.0",
+ "next": "^14.1.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "tailwindcss-animate": "^1.0.7"
+ },
+ "engines": {
+ "node": ">=18.17.0"
+ },
+ "devDependencies": {
+ "@frames.js/debugger": "^0.1.9",
+ "@types/node": "^18.17.0",
+ "@types/react": "^18.2.0",
+ "@types/react-dom": "^18.2.0",
+ "autoprefixer": "^10.0.1",
+ "concurrently": "^8.2.2",
+ "dotenv": "^16.4.5",
+ "eslint": "^8.56.0",
+ "eslint-config-next": "^14.1.0",
+ "postcss": "^8",
+ "tailwindcss": "^3.3.0",
+ "typescript": "^5.3.3"
+ }
+}
diff --git a/templates/next-starter-with-examples/postcss.config.js b/templates/next-starter-with-examples/postcss.config.js
new file mode 100644
index 000000000..12a703d90
--- /dev/null
+++ b/templates/next-starter-with-examples/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/templates/next-starter-with-examples/public/Inter-Regular.ttf b/templates/next-starter-with-examples/public/Inter-Regular.ttf
new file mode 100644
index 000000000..5e4851f0a
Binary files /dev/null and b/templates/next-starter-with-examples/public/Inter-Regular.ttf differ
diff --git a/templates/next-starter-with-examples/public/next.svg b/templates/next-starter-with-examples/public/next.svg
new file mode 100644
index 000000000..5174b28c5
--- /dev/null
+++ b/templates/next-starter-with-examples/public/next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/templates/next-starter-with-examples/public/vercel.svg b/templates/next-starter-with-examples/public/vercel.svg
new file mode 100644
index 000000000..d2f842227
--- /dev/null
+++ b/templates/next-starter-with-examples/public/vercel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/templates/next-starter-with-examples/tailwind.config.ts b/templates/next-starter-with-examples/tailwind.config.ts
new file mode 100644
index 000000000..2c80f0c3f
--- /dev/null
+++ b/templates/next-starter-with-examples/tailwind.config.ts
@@ -0,0 +1,90 @@
+import type { Config } from "tailwindcss";
+
+const config = {
+ darkMode: ["class"],
+ content: [
+ "./pages/**/*.{ts,tsx}",
+ "./components/**/*.{ts,tsx}",
+ "./app/**/*.{ts,tsx}",
+ "./@/**/*.{ts,tsx}",
+ "./src/**/*.{ts,tsx}",
+ // js files primarily because in dist
+ "./node_modules/frames.js/dist/render/next/*.{ts,tsx,js,css}",
+ "./node_modules/frames.js/dist/render/*.{ts,tsx,js,css}",
+ "./node_modules/frames.js/dist/**/*.{ts,tsx,js,css}",
+
+ // monorepo weirdness
+ "../../node_modules/frames.js/dist/render/next/*.{ts,tsx,js,css}",
+ "../../node_modules/frames.js/dist/render/*.{ts,tsx,js,css}",
+ "../../node_modules/frames.js/dist/**/*.{ts,tsx,js,css}",
+ ],
+ prefix: "",
+ theme: {
+ container: {
+ center: true,
+ padding: "2rem",
+ screens: {
+ "2xl": "1400px",
+ },
+ },
+ extend: {
+ colors: {
+ border: "hsl(var(--border))",
+ input: "hsl(var(--input))",
+ ring: "hsl(var(--ring))",
+ background: "hsl(var(--background))",
+ foreground: "hsl(var(--foreground))",
+ primary: {
+ DEFAULT: "hsl(var(--primary))",
+ foreground: "hsl(var(--primary-foreground))",
+ },
+ secondary: {
+ DEFAULT: "hsl(var(--secondary))",
+ foreground: "hsl(var(--secondary-foreground))",
+ },
+ destructive: {
+ DEFAULT: "hsl(var(--destructive))",
+ foreground: "hsl(var(--destructive-foreground))",
+ },
+ muted: {
+ DEFAULT: "hsl(var(--muted))",
+ foreground: "hsl(var(--muted-foreground))",
+ },
+ accent: {
+ DEFAULT: "hsl(var(--accent))",
+ foreground: "hsl(var(--accent-foreground))",
+ },
+ popover: {
+ DEFAULT: "hsl(var(--popover))",
+ foreground: "hsl(var(--popover-foreground))",
+ },
+ card: {
+ DEFAULT: "hsl(var(--card))",
+ foreground: "hsl(var(--card-foreground))",
+ },
+ },
+ borderRadius: {
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
+ },
+ keyframes: {
+ "accordion-down": {
+ from: { height: "0" },
+ to: { height: "var(--radix-accordion-content-height)" },
+ },
+ "accordion-up": {
+ from: { height: "var(--radix-accordion-content-height)" },
+ to: { height: "0" },
+ },
+ },
+ animation: {
+ "accordion-down": "accordion-down 0.2s ease-out",
+ "accordion-up": "accordion-up 0.2s ease-out",
+ },
+ },
+ },
+ plugins: [require("tailwindcss-animate")],
+} satisfies Config;
+
+export default config;
diff --git a/templates/next-starter-with-examples/tsconfig.json b/templates/next-starter-with-examples/tsconfig.json
new file mode 100644
index 000000000..26e4c0865
--- /dev/null
+++ b/templates/next-starter-with-examples/tsconfig.json
@@ -0,0 +1,47 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "display": "Default",
+ "compilerOptions": {
+ "declaration": true,
+ "declarationMap": true,
+ "esModuleInterop": true,
+ "incremental": false,
+ "isolatedModules": true,
+ "lib": [
+ "es2022",
+ "DOM",
+ "DOM.Iterable"
+ ],
+ "module": "ESNext",
+ "moduleDetection": "force",
+ "moduleResolution": "Bundler",
+ "noEmit": true,
+ "noUncheckedIndexedAccess": true,
+ "plugins": [
+ {
+ "name": "next",
+ },
+ ],
+ "paths": {
+ "@/*": [
+ "./@/*"
+ ]
+ },
+ "jsx": "preserve",
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "target": "ES2022",
+ "allowJs": true,
+ },
+ "include": [
+ "next-env.d.ts",
+ "next.config.js",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ ],
+ "exclude": [
+ "node_modules"
+ ],
+}
\ No newline at end of file
diff --git a/templates/next-utils-starter/.env.sample b/templates/next-utils-starter/.env.sample
new file mode 100644
index 000000000..c85e4f5b8
--- /dev/null
+++ b/templates/next-utils-starter/.env.sample
@@ -0,0 +1 @@
+NEXT_PUBLIC_HOST="http://localhost:3000"
\ No newline at end of file
diff --git a/templates/next-utils-starter/.eslintrc.js b/templates/next-utils-starter/.eslintrc.js
new file mode 100644
index 000000000..00e4aaad1
--- /dev/null
+++ b/templates/next-utils-starter/.eslintrc.js
@@ -0,0 +1,5 @@
+/** @type {import("eslint").Linter.Config} */
+module.exports = {
+ root: true,
+ extends: ["next"],
+};
diff --git a/templates/next-utils-starter/.gitignore b/templates/next-utils-starter/.gitignore
new file mode 100644
index 000000000..574e5471e
--- /dev/null
+++ b/templates/next-utils-starter/.gitignore
@@ -0,0 +1,36 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+.next
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
\ No newline at end of file
diff --git a/templates/next-utils-starter/README.md b/templates/next-utils-starter/README.md
new file mode 100644
index 000000000..415ff4eff
--- /dev/null
+++ b/templates/next-utils-starter/README.md
@@ -0,0 +1,30 @@
+## Getting Started
+
+First, run the development server and debugger:
+
+```bash
+yarn dev
+```
+
+This will also open the debugger in your browser.
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
+
+To create [API routes](https://nextjs.org/docs/app/building-your-application/routing/router-handlers) add an `api/` directory to the `app/` directory with a `route.ts` file. For individual endpoints, create a subfolder in the `api` directory, like `api/hello/route.ts` would map to [http://localhost:3000/api/hello](http://localhost:3000/api/hello).
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn/foundations/about-nextjs) - an interactive Next.js tutorial.
+
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_source=github.com&utm_medium=referral&utm_campaign=turborepo-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
diff --git a/templates/next-utils-starter/app/api/frame/route.ts b/templates/next-utils-starter/app/api/frame/route.ts
new file mode 100644
index 000000000..28c07aff6
--- /dev/null
+++ b/templates/next-utils-starter/app/api/frame/route.ts
@@ -0,0 +1,55 @@
+import {
+ Frame,
+ getFrameHtml,
+ getFrameMessageFromRequestBody,
+ validateFrameMessage,
+} from "frames.js";
+import { NextRequest, NextResponse } from "next/server";
+import { HOST, framePostUrl } from "../../constants";
+
+export async function POST(request: NextRequest) {
+ const body = await request.json();
+
+ const untrustedMessage = getFrameMessageFromRequestBody(body);
+
+ if (untrustedMessage.data?.frameActionBody?.buttonIndex === 2) {
+ const resp = NextResponse.redirect(`${HOST}/redirect`, 302);
+ return resp;
+ }
+
+ const result = await validateFrameMessage(body);
+
+ const { isValid, message } = result;
+ if (!isValid || !message) {
+ return new Response("Invalid message", { status: 400 });
+ }
+
+ const randomInt = Math.floor(Math.random() * 100);
+ const imageUrl = `https://picsum.photos/seed/${randomInt}/1146/600`;
+
+ const frame: Frame = {
+ version: "vNext",
+ image: imageUrl,
+ buttons: [
+ {
+ label: `Next (pressed by ${message?.data.fid})`,
+ action: "post",
+ },
+ {
+ label: "Visit frames.js",
+ action: "post_redirect",
+ },
+ ],
+ ogImage: imageUrl,
+ postUrl: framePostUrl,
+ };
+
+ const html = getFrameHtml(frame);
+
+ return new Response(html, {
+ headers: {
+ "Content-Type": "text/html",
+ },
+ status: 200,
+ });
+}
diff --git a/templates/next-utils-starter/app/constants.ts b/templates/next-utils-starter/app/constants.ts
new file mode 100644
index 000000000..05758ac4b
--- /dev/null
+++ b/templates/next-utils-starter/app/constants.ts
@@ -0,0 +1,6 @@
+export const HOST = process.env["NEXT_PUBLIC_HOST"] || "http://localhost:3000";
+
+export const ogImage = `${HOST}/image.png`;
+export const frameImage = `${HOST}/image_frame.png`;
+export const frameImageFlipped = `${HOST}/image_frame_flipped.png`;
+export const framePostUrl = `${HOST}/api/frame`;
diff --git a/templates/next-utils-starter/app/favicon.ico b/templates/next-utils-starter/app/favicon.ico
new file mode 100644
index 000000000..3f804c026
Binary files /dev/null and b/templates/next-utils-starter/app/favicon.ico differ
diff --git a/templates/next-utils-starter/app/layout.tsx b/templates/next-utils-starter/app/layout.tsx
new file mode 100644
index 000000000..80399e5c8
--- /dev/null
+++ b/templates/next-utils-starter/app/layout.tsx
@@ -0,0 +1,67 @@
+import { type FrameFlattened, getFrameFlattened } from "frames.js";
+import type { Metadata } from "next";
+import { Inter } from "next/font/google";
+import { framePostUrl } from "./constants";
+
+const inter = Inter({ subsets: ["latin"] });
+
+const imageUrl = "https://picsum.photos/seed/frames.js/1146/600";
+
+/**
+ * Stripes undefined values from a `FrameFlattened` object and returns a new object with only the defined values
+ */
+function convertFlattenedFrameToMetadata(
+ frame: FrameFlattened
+): Metadata["other"] {
+ const metadata: Metadata["other"] = {};
+
+ for (const [key, value] of Object.entries(frame)) {
+ if (value != null) {
+ metadata[key] = value;
+ }
+ }
+
+ return metadata;
+}
+
+export const metadata: Metadata = {
+ title: "Random Image Frame",
+ description: "This is an example of a simple frame using frames.js",
+ openGraph: {
+ images: [
+ {
+ url: imageUrl,
+ },
+ ],
+ },
+ other: convertFlattenedFrameToMetadata(
+ getFrameFlattened({
+ image: imageUrl,
+ version: "vNext",
+ buttons: [
+ {
+ label: "Next",
+ action: "post",
+ },
+ {
+ label: "Visit frames.js",
+ action: "post_redirect",
+ },
+ ],
+ inputText: "Type something",
+ postUrl: framePostUrl,
+ })
+ ),
+};
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}): JSX.Element {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/templates/next-utils-starter/app/page.module.css b/templates/next-utils-starter/app/page.module.css
new file mode 100644
index 000000000..98481c6a2
--- /dev/null
+++ b/templates/next-utils-starter/app/page.module.css
@@ -0,0 +1,335 @@
+.main {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ padding: 6rem;
+ min-height: 100vh;
+}
+
+.vercelLogo {
+ filter: invert(1);
+}
+
+.description {
+ display: inherit;
+ justify-content: inherit;
+ align-items: inherit;
+ font-size: 0.85rem;
+ max-width: var(--max-width);
+ width: 100%;
+ z-index: 2;
+ font-family: var(--font-mono);
+}
+
+.description a {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+.description p {
+ position: relative;
+ margin: 0;
+ padding: 1rem;
+ background-color: rgba(var(--callout-rgb), 0.5);
+ border: 1px solid rgba(var(--callout-border-rgb), 0.3);
+ border-radius: var(--border-radius);
+}
+
+.code {
+ font-weight: 700;
+ font-family: var(--font-mono);
+}
+
+.hero {
+ display: flex;
+ position: relative;
+ place-items: center;
+}
+
+.heroContent {
+ display: flex;
+ position: relative;
+ z-index: 0;
+ padding-bottom: 4rem;
+ flex-direction: column;
+ gap: 2rem;
+ justify-content: space-between;
+ align-items: center;
+ width: auto;
+ font-family: system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial,
+ "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
+ "Segoe UI Symbol", "Noto Color Emoji";
+ padding-top: 48px;
+
+ @media (min-width: 768px) {
+ padding-top: 4rem;
+ padding-bottom: 6rem;
+ }
+ @media (min-width: 1024px) {
+ padding-top: 5rem;
+ padding-bottom: 8rem;
+ }
+}
+
+.logos {
+ display: flex;
+ z-index: 50;
+ justify-content: center;
+ align-items: center;
+ width: 100%;
+}
+
+.grid {
+ display: grid;
+ grid-template-columns: repeat(4, minmax(25%, auto));
+ max-width: 100%;
+ width: var(--max-width);
+}
+
+.card {
+ padding: 1rem 1.2rem;
+ border-radius: var(--border-radius);
+ background: rgba(var(--card-rgb), 0);
+ border: 1px solid rgba(var(--card-border-rgb), 0);
+ transition: background 200ms, border 200ms;
+}
+
+.card span {
+ display: inline-block;
+ transition: transform 200ms;
+}
+
+.card h2 {
+ font-weight: 600;
+ margin-bottom: 0.7rem;
+}
+
+.card p {
+ margin: 0;
+ opacity: 0.6;
+ font-size: 0.9rem;
+ line-height: 1.5;
+ max-width: 30ch;
+}
+
+@media (prefers-reduced-motion) {
+ .card:hover span {
+ transform: none;
+ }
+}
+
+/* Mobile */
+@media (max-width: 700px) {
+ .content {
+ padding: 4rem;
+ }
+
+ .grid {
+ grid-template-columns: 1fr;
+ margin-bottom: 120px;
+ max-width: 320px;
+ text-align: center;
+ }
+
+ .card {
+ padding: 1rem 2.5rem;
+ }
+
+ .card h2 {
+ margin-bottom: 0.5rem;
+ }
+
+ .center {
+ padding: 8rem 0 6rem;
+ }
+
+ .center::before {
+ transform: none;
+ height: 300px;
+ }
+
+ .description {
+ font-size: 0.8rem;
+ }
+
+ .description a {
+ padding: 1rem;
+ }
+
+ .description p,
+ .description div {
+ display: flex;
+ justify-content: center;
+ position: fixed;
+ width: 100%;
+ }
+
+ .description p {
+ align-items: center;
+ inset: 0 0 auto;
+ padding: 2rem 1rem 1.4rem;
+ border-radius: 0;
+ border: none;
+ border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
+ background: linear-gradient(
+ to bottom,
+ rgba(var(--background-start-rgb), 1),
+ rgba(var(--callout-rgb), 0.5)
+ );
+ background-clip: padding-box;
+ backdrop-filter: blur(24px);
+ }
+
+ .description div {
+ align-items: flex-end;
+ pointer-events: none;
+ inset: auto 0 0;
+ padding: 2rem;
+ height: 200px;
+ background: linear-gradient(
+ to bottom,
+ transparent 0%,
+ rgb(var(--background-end-rgb)) 40%
+ );
+ z-index: 1;
+ }
+}
+
+/* Enable hover only on non-touch devices */
+@media (hover: hover) and (pointer: fine) {
+ .card:hover {
+ background: rgba(var(--card-rgb), 0.1);
+ border: 1px solid rgba(var(--card-border-rgb), 0.15);
+ }
+
+ .card:hover span {
+ transform: translateX(4px);
+ }
+}
+
+.circles {
+ position: absolute;
+ min-width: 614px;
+ min-height: 614px;
+ pointer-events: none;
+}
+
+.logo {
+ z-index: 50;
+ width: 120px;
+ height: 120px;
+}
+
+.logoGradientContainer {
+ display: flex;
+ position: absolute;
+ z-index: 50;
+ justify-content: center;
+ align-items: center;
+ width: 16rem;
+ height: 16rem;
+}
+
+.turborepoWordmarkContainer {
+ display: flex;
+ z-index: 50;
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+ flex-direction: column;
+ gap: 1.25rem;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+
+ @media (min-width: 1024px) {
+ gap: 1.5rem;
+ }
+}
+
+.turborepoWordmark {
+ width: 160px;
+ fill: white;
+
+ @media (min-width: 768px) {
+ width: 200px;
+ }
+}
+
+.code {
+ font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
+ monospace;
+ font-weight: 700;
+}
+
+/* Tablet and Smaller Desktop */
+@media (min-width: 701px) and (max-width: 1120px) {
+ .grid {
+ grid-template-columns: repeat(2, 50%);
+ }
+}
+
+/* Gradients */
+.gradient {
+ position: absolute;
+ mix-blend-mode: normal;
+ will-change: filter;
+ pointer-events: none;
+}
+
+.gradientSmall {
+ filter: blur(32px);
+}
+
+.gradientLarge {
+ filter: blur(75px);
+}
+
+.glowConic {
+ background-image: var(--glow-conic);
+}
+
+.logoGradient {
+ opacity: 0.9;
+ width: 120px;
+ height: 120px;
+}
+
+.backgroundGradient {
+ top: -500px;
+ width: 1000px;
+ height: 1000px;
+ opacity: 0.15;
+}
+
+.button {
+ background-color: #ffffff;
+ border-radius: 8px;
+ border-style: none;
+ box-sizing: border-box;
+ color: #000000;
+ cursor: pointer;
+ display: inline-block;
+ font-size: 16px;
+ height: 40px;
+ line-height: 20px;
+ list-style: none;
+ margin: 0;
+ outline: none;
+ padding: 10px 16px;
+ position: relative;
+ text-align: center;
+ text-decoration: none;
+ transition: color 100ms;
+ vertical-align: baseline;
+ user-select: none;
+ -webkit-user-select: none;
+ touch-action: manipulation;
+}
+
+.button:hover,
+.button:focus {
+ background-color: #e5e4e2;
+}
diff --git a/templates/next-utils-starter/app/page.tsx b/templates/next-utils-starter/app/page.tsx
new file mode 100644
index 000000000..c4d0364a1
--- /dev/null
+++ b/templates/next-utils-starter/app/page.tsx
@@ -0,0 +1,3 @@
+export default function Page(): JSX.Element {
+ return Example
;
+}
diff --git a/templates/next-utils-starter/next.config.js b/templates/next-utils-starter/next.config.js
new file mode 100644
index 000000000..d1e4e084a
--- /dev/null
+++ b/templates/next-utils-starter/next.config.js
@@ -0,0 +1,2 @@
+/** @type {import('next').NextConfig} */
+module.exports = {};
diff --git a/templates/next-utils-starter/package.json b/templates/next-utils-starter/package.json
new file mode 100644
index 000000000..f24b8c90d
--- /dev/null
+++ b/templates/next-utils-starter/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "template-next-utils-starter",
+ "version": "",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "concurrently --kill-others \"next dev\" \"frames --url http://localhost:3000\"",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "frames.js": "^0.9.6",
+ "next": "^14.0.4",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@next/eslint-plugin-next": "^14.0.4",
+ "@frames.js/debugger": "^0.1.9",
+ "@types/eslint": "^8.56.1",
+ "@types/node": "^20.10.6",
+ "@types/react": "^18.2.46",
+ "@types/react-dom": "^18.2.18",
+ "concurrently": "^8.2.2",
+ "eslint": "^8.56.0",
+ "typescript": "^5.3.3"
+ },
+ "engines": {
+ "node": ">=18.17.0"
+ }
+}
diff --git a/templates/next-utils-starter/public/image.png b/templates/next-utils-starter/public/image.png
new file mode 100644
index 000000000..91777b90e
Binary files /dev/null and b/templates/next-utils-starter/public/image.png differ
diff --git a/templates/next-utils-starter/public/image_frame.png b/templates/next-utils-starter/public/image_frame.png
new file mode 100644
index 000000000..96171a796
Binary files /dev/null and b/templates/next-utils-starter/public/image_frame.png differ
diff --git a/templates/next-utils-starter/public/image_frame_flipped.png b/templates/next-utils-starter/public/image_frame_flipped.png
new file mode 100644
index 000000000..b2cab28d8
Binary files /dev/null and b/templates/next-utils-starter/public/image_frame_flipped.png differ
diff --git a/templates/next-utils-starter/tsconfig.json b/templates/next-utils-starter/tsconfig.json
new file mode 100644
index 000000000..d0b91a2c3
--- /dev/null
+++ b/templates/next-utils-starter/tsconfig.json
@@ -0,0 +1,39 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "display": "Default",
+ "compilerOptions": {
+ "declaration": true,
+ "declarationMap": true,
+ "esModuleInterop": true,
+ "incremental": false,
+ "isolatedModules": true,
+ "lib": ["es2022", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "moduleDetection": "force",
+ "moduleResolution": "Bundler",
+ "noEmit": true,
+ "noUncheckedIndexedAccess": true,
+ "plugins": [
+ {
+ "name": "next",
+ },
+ ],
+ "paths": {
+ "@/*": ["./@/*"],
+ },
+ "jsx": "preserve",
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "target": "ES2022",
+ "allowJs": true,
+ },
+ "include": [
+ "next-env.d.ts",
+ "next.config.js",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ ],
+ "exclude": ["node_modules"],
+}
diff --git a/templates/next/.gitignore b/templates/next/.gitignore
new file mode 100644
index 000000000..574e5471e
--- /dev/null
+++ b/templates/next/.gitignore
@@ -0,0 +1,36 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+.next
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
\ No newline at end of file
diff --git a/templates/next/README.md b/templates/next/README.md
new file mode 100644
index 000000000..1354bd541
--- /dev/null
+++ b/templates/next/README.md
@@ -0,0 +1,17 @@
+# Frames.js Next example
+
+Simple Frames.js app using Next.js.
+
+### Installation
+
+```sh
+npm install
+```
+
+### Run in Debugger
+
+Following command will open frames debugger and also run the app in development mode.
+
+```sh
+npm run dev
+```
diff --git a/templates/next/app/frames/route.tsx b/templates/next/app/frames/route.tsx
new file mode 100644
index 000000000..77dfeb590
--- /dev/null
+++ b/templates/next/app/frames/route.tsx
@@ -0,0 +1,54 @@
+import { farcasterHubContext } from "frames.js/middleware";
+import { createFrames, Button } from "frames.js/next";
+
+const frames = createFrames({
+ middleware: [
+ farcasterHubContext({
+ // remove if you aren't using @frames.js/debugger or you just don't want to use the debugger hub
+ ...(process.env.NODE_ENV === "production"
+ ? {}
+ : {
+ hubHttpUrl: "http://localhost:3010/hub",
+ }),
+ }),
+ ],
+});
+
+const handleRequest = frames(async (ctx) => {
+ return {
+ image: ctx.message ? (
+
+ GM, {ctx.message.requesterUserData?.displayName}! Your FID is{" "}
+ {ctx.message.requesterFid}
+ {", "}
+ {ctx.message.requesterFid < 20_000
+ ? "you're OG!"
+ : "welcome to the Farcaster!"}
+
+ ) : (
+
+ Say GM
+
+ ),
+ buttons: !ctx.url.searchParams.has("saidGm")
+ ? [
+
+ Say GM
+ ,
+ ]
+ : [],
+ };
+});
+
+export const GET = handleRequest;
+export const POST = handleRequest;
diff --git a/templates/next/app/globals.css b/templates/next/app/globals.css
new file mode 100644
index 000000000..8e0bb857b
--- /dev/null
+++ b/templates/next/app/globals.css
@@ -0,0 +1,11 @@
+* {
+ box-sizing: border-box;
+ padding: 0;
+ margin: 0;
+}
+
+html,
+body {
+ max-width: 100vw;
+ overflow-x: hidden;
+}
\ No newline at end of file
diff --git a/templates/next/app/layout.tsx b/templates/next/app/layout.tsx
new file mode 100644
index 000000000..3314e4780
--- /dev/null
+++ b/templates/next/app/layout.tsx
@@ -0,0 +1,22 @@
+import type { Metadata } from "next";
+import { Inter } from "next/font/google";
+import "./globals.css";
+
+const inter = Inter({ subsets: ["latin"] });
+
+export const metadata: Metadata = {
+ title: "Create Next App",
+ description: "Generated by create next app",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/templates/next/app/page.tsx b/templates/next/app/page.tsx
new file mode 100644
index 000000000..0c8f292b2
--- /dev/null
+++ b/templates/next/app/page.tsx
@@ -0,0 +1,17 @@
+import { fetchMetadata } from "frames.js/next";
+import { Metadata } from "next";
+
+export async function generateMetadata(): Promise {
+ return {
+ title: "Frames Next.js Example",
+ other: {
+ ...(await fetchMetadata(
+ new URL("/frames", process.env.VERCEL_URL || "http://localhost:3000")
+ )),
+ },
+ };
+}
+
+export default async function Home() {
+ return GM user data example.
;
+}
diff --git a/templates/next/next.config.js b/templates/next/next.config.js
new file mode 100644
index 000000000..4678774e6
--- /dev/null
+++ b/templates/next/next.config.js
@@ -0,0 +1,4 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {};
+
+export default nextConfig;
diff --git a/templates/next/package.json b/templates/next/package.json
new file mode 100644
index 000000000..ec8f7c6c1
--- /dev/null
+++ b/templates/next/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "template-next",
+ "version": "0.0.0",
+ "private": true,
+ "type": "module",
+ "dependencies": {
+ "frames.js": "^0.9.6",
+ "next": "^14.1.2",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@types/node": "^18.17.0",
+ "@types/react": "^18.2.0",
+ "@types/react-dom": "^18.2.0",
+ "@frames.js/debugger": "^",
+ "concurrently": "^8.2.2",
+ "typescript": "^5.3.3"
+ },
+ "scripts": {
+ "dev": "concurrently \"next dev\" \"frames --url http://localhost:3000\"",
+ "start": "next start",
+ "build": "next build",
+ "lint": "next lint"
+ },
+ "engines": {
+ "node": ">=18.17.0"
+ }
+}
diff --git a/templates/next/public/next.svg b/templates/next/public/next.svg
new file mode 100644
index 000000000..5174b28c5
--- /dev/null
+++ b/templates/next/public/next.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/templates/next/public/vercel.svg b/templates/next/public/vercel.svg
new file mode 100644
index 000000000..d2f842227
--- /dev/null
+++ b/templates/next/public/vercel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/templates/next/tsconfig.json b/templates/next/tsconfig.json
new file mode 100644
index 000000000..862143548
--- /dev/null
+++ b/templates/next/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next",
+ },
+ ],
+ "paths": {
+ "@/*": ["./*"],
+ },
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"],
+}
diff --git a/templates/remix/.gitignore b/templates/remix/.gitignore
new file mode 100644
index 000000000..70583999f
--- /dev/null
+++ b/templates/remix/.gitignore
@@ -0,0 +1,5 @@
+node_modules
+
+/.cache
+/build
+.env
\ No newline at end of file
diff --git a/templates/remix/README.md b/templates/remix/README.md
new file mode 100644
index 000000000..875e2bf91
--- /dev/null
+++ b/templates/remix/README.md
@@ -0,0 +1,36 @@
+# Welcome to Remix + Frames.js + Vite!
+
+📖 See the [Remix docs](https://remix.run/docs), the [Remix Vite docs](https://remix.run/docs/en/main/future/vite) and [Frames.js docs](https://framesjs.org) for details on supported features.
+
+## Development
+
+Run the Frames.js debugger and Vite dev server:
+
+```shellscript
+npm run dev
+```
+
+## Deployment
+
+First, build your app for production:
+
+```sh
+npm run build
+```
+
+Then run the app in production mode:
+
+```sh
+npm start
+```
+
+Now you'll need to pick a host to deploy it to.
+
+### DIY
+
+If you're familiar with deploying Node applications, the built-in Remix app server is production-ready.
+
+Make sure to deploy the output of `npm run build`
+
+- `build/server`
+- `build/client`
diff --git a/templates/remix/app/entry.client.tsx b/templates/remix/app/entry.client.tsx
new file mode 100644
index 000000000..03b0ef097
--- /dev/null
+++ b/templates/remix/app/entry.client.tsx
@@ -0,0 +1,18 @@
+/**
+ * By default, Remix will handle hydrating your app on the client for you.
+ * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
+ * For more information, see https://remix.run/file-conventions/entry.client
+ */
+
+import { RemixBrowser } from "@remix-run/react";
+import { startTransition, StrictMode } from "react";
+import { hydrateRoot } from "react-dom/client";
+
+startTransition(() => {
+ hydrateRoot(
+ document,
+
+
+
+ );
+});
\ No newline at end of file
diff --git a/templates/remix/app/entry.server.tsx b/templates/remix/app/entry.server.tsx
new file mode 100644
index 000000000..2dc2e5a4a
--- /dev/null
+++ b/templates/remix/app/entry.server.tsx
@@ -0,0 +1,140 @@
+/**
+ * By default, Remix will handle generating the HTTP Response for you.
+ * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
+ * For more information, see https://remix.run/file-conventions/entry.server
+ */
+
+import { PassThrough } from "node:stream";
+
+import type { AppLoadContext, EntryContext } from "@remix-run/node";
+import { createReadableStreamFromReadable } from "@remix-run/node";
+import { RemixServer } from "@remix-run/react";
+import { isbot } from "isbot";
+import { renderToPipeableStream } from "react-dom/server";
+
+const ABORT_DELAY = 5_000;
+
+export default function handleRequest(
+ request: Request,
+ responseStatusCode: number,
+ responseHeaders: Headers,
+ remixContext: EntryContext,
+ // This is ignored so we can keep it in the template for visibility. Feel
+ // free to delete this parameter in your app if you're not using it!
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ loadContext: AppLoadContext
+) {
+ return isbot(request.headers.get("user-agent") || "")
+ ? handleBotRequest(
+ request,
+ responseStatusCode,
+ responseHeaders,
+ remixContext
+ )
+ : handleBrowserRequest(
+ request,
+ responseStatusCode,
+ responseHeaders,
+ remixContext
+ );
+}
+
+function handleBotRequest(
+ request: Request,
+ responseStatusCode: number,
+ responseHeaders: Headers,
+ remixContext: EntryContext
+) {
+ return new Promise((resolve, reject) => {
+ let shellRendered = false;
+ const { pipe, abort } = renderToPipeableStream(
+ ,
+ {
+ onAllReady() {
+ shellRendered = true;
+ const body = new PassThrough();
+ const stream = createReadableStreamFromReadable(body);
+
+ responseHeaders.set("Content-Type", "text/html");
+
+ resolve(
+ new Response(stream, {
+ headers: responseHeaders,
+ status: responseStatusCode,
+ })
+ );
+
+ pipe(body);
+ },
+ onShellError(error: unknown) {
+ reject(error);
+ },
+ onError(error: unknown) {
+ responseStatusCode = 500;
+ // Log streaming rendering errors from inside the shell. Don't log
+ // errors encountered during initial shell rendering since they'll
+ // reject and get logged in handleDocumentRequest.
+ if (shellRendered) {
+ console.error(error);
+ }
+ },
+ }
+ );
+
+ setTimeout(abort, ABORT_DELAY);
+ });
+}
+
+function handleBrowserRequest(
+ request: Request,
+ responseStatusCode: number,
+ responseHeaders: Headers,
+ remixContext: EntryContext
+) {
+ return new Promise((resolve, reject) => {
+ let shellRendered = false;
+ const { pipe, abort } = renderToPipeableStream(
+ ,
+ {
+ onShellReady() {
+ shellRendered = true;
+ const body = new PassThrough();
+ const stream = createReadableStreamFromReadable(body);
+
+ responseHeaders.set("Content-Type", "text/html");
+
+ resolve(
+ new Response(stream, {
+ headers: responseHeaders,
+ status: responseStatusCode,
+ })
+ );
+
+ pipe(body);
+ },
+ onShellError(error: unknown) {
+ reject(error);
+ },
+ onError(error: unknown) {
+ responseStatusCode = 500;
+ // Log streaming rendering errors from inside the shell. Don't log
+ // errors encountered during initial shell rendering since they'll
+ // reject and get logged in handleDocumentRequest.
+ if (shellRendered) {
+ console.error(error);
+ }
+ },
+ }
+ );
+
+ setTimeout(abort, ABORT_DELAY);
+ });
+}
\ No newline at end of file
diff --git a/templates/remix/app/root.tsx b/templates/remix/app/root.tsx
new file mode 100644
index 000000000..4bdba274a
--- /dev/null
+++ b/templates/remix/app/root.tsx
@@ -0,0 +1,29 @@
+import {
+ Links,
+ Meta,
+ Outlet,
+ Scripts,
+ ScrollRestoration,
+} from "@remix-run/react";
+
+export function Layout({ children }: { children: React.ReactNode }) {
+ return (
+
+
+
+
+
+
+
+
+ {children}
+
+
+
+
+ );
+}
+
+export default function App() {
+ return ;
+}
\ No newline at end of file
diff --git a/templates/remix/app/routes/_index.tsx b/templates/remix/app/routes/_index.tsx
new file mode 100644
index 000000000..fd60a1f50
--- /dev/null
+++ b/templates/remix/app/routes/_index.tsx
@@ -0,0 +1,40 @@
+import { fetchMetadata } from 'frames.js/remix';
+import type { LoaderFunctionArgs, MetaFunction } from "@remix-run/node";
+
+export async function loader({ request}: LoaderFunctionArgs) {
+ return {
+ metadata: await fetchMetadata(new URL('/frames', request.url)),
+ }
+}
+
+export const meta: MetaFunction = ({ data }) => {
+ return [
+ { title: "New Remix App" },
+ { name: "description", content: "Welcome to Remix!" },
+ ...(data?.metadata ?? [])
+ ];
+};
+
+export default function Index() {
+ return (
+
+
Welcome to Remix + Frames.js
+
+
+ );
+}
\ No newline at end of file
diff --git a/templates/remix/app/routes/frames._index.tsx b/templates/remix/app/routes/frames._index.tsx
new file mode 100644
index 000000000..bc3764670
--- /dev/null
+++ b/templates/remix/app/routes/frames._index.tsx
@@ -0,0 +1,55 @@
+import { farcasterHubContext } from "frames.js/middleware";
+import { createFrames, Button } from "frames.js/remix";
+
+const frames = createFrames({
+ basePath: '/frames',
+ middleware: [
+ farcasterHubContext({
+ // remove if you aren't using @frames.js/debugger or you just don't want to use the debugger hub
+ ...(process.env.NODE_ENV === "production"
+ ? {}
+ : {
+ hubHttpUrl: "http://localhost:3010/hub",
+ }),
+ }),
+ ],
+});
+
+const handleRequest = frames(async (ctx) => {
+ return {
+ image: ctx.message ? (
+
+ GM, {ctx.message.requesterUserData?.displayName}! Your FID is{" "}
+ {ctx.message.requesterFid}
+ {", "}
+ {ctx.message.requesterFid < 20_000
+ ? "you're OG!"
+ : "welcome to the Farcaster!"}
+
+ ) : (
+
+ Say GM
+
+ ),
+ buttons: !ctx.url.searchParams.has("saidGm")
+ ? [
+
+ Say GM
+ ,
+ ]
+ : [],
+ };
+});
+
+export const action = handleRequest;
+export const loader = handleRequest;
diff --git a/templates/remix/package.json b/templates/remix/package.json
new file mode 100644
index 000000000..8a87821b3
--- /dev/null
+++ b/templates/remix/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "template-remix",
+ "version": "0.0.0",
+ "private": true,
+ "type": "module",
+ "engines": {
+ "node": ">=18.17.0"
+ },
+ "dependencies": {
+ "@remix-run/node": "^2.8.1",
+ "@remix-run/react": "^2.8.1",
+ "@remix-run/serve": "^2.8.1",
+ "frames.js": "^0.9.6",
+ "isbot": "^4.1.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@frames.js/debugger": "^0.1.9",
+ "@remix-run/dev": "^2.8.1",
+ "@types/react": "^18.2.20",
+ "@types/react-dom": "^18.2.7",
+ "@typescript-eslint/eslint-plugin": "^6.7.4",
+ "@typescript-eslint/parser": "^6.7.4",
+ "concurrently": "^8.2.2",
+ "typescript": "^5.1.6",
+ "vite": "^5.1.0",
+ "vite-tsconfig-paths": "^4.2.1"
+ },
+ "scripts": {
+ "build": "remix vite:build",
+ "dev": "concurrently \"remix vite:dev\" \"frames --url http://localhost:5173\"",
+ "start": "remix-serve ./build/server/index.js",
+ "typecheck": "tsc"
+ }
+}
diff --git a/templates/remix/tsconfig.json b/templates/remix/tsconfig.json
new file mode 100644
index 000000000..9d87dd378
--- /dev/null
+++ b/templates/remix/tsconfig.json
@@ -0,0 +1,32 @@
+{
+ "include": [
+ "**/*.ts",
+ "**/*.tsx",
+ "**/.server/**/*.ts",
+ "**/.server/**/*.tsx",
+ "**/.client/**/*.ts",
+ "**/.client/**/*.tsx"
+ ],
+ "compilerOptions": {
+ "lib": ["DOM", "DOM.Iterable", "ES2022"],
+ "types": ["@remix-run/node", "vite/client"],
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "jsx": "react-jsx",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "resolveJsonModule": true,
+ "target": "ES2022",
+ "strict": true,
+ "allowJs": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": ".",
+ "paths": {
+ "~/*": ["./app/*"]
+ },
+
+ // Vite takes care of building everything, not tsc.
+ "noEmit": true
+ }
+}
diff --git a/templates/remix/vite.config.ts b/templates/remix/vite.config.ts
new file mode 100644
index 000000000..2b6aff987
--- /dev/null
+++ b/templates/remix/vite.config.ts
@@ -0,0 +1,10 @@
+import { vitePlugin as remix } from "@remix-run/dev";
+import { installGlobals } from "@remix-run/node";
+import { defineConfig } from "vite";
+import tsconfigPaths from "vite-tsconfig-paths";
+
+installGlobals();
+
+export default defineConfig({
+ plugins: [remix(), tsconfigPaths()],
+});
diff --git a/turbo.json b/turbo.json
index 0b9281649..21ba5d5de 100644
--- a/turbo.json
+++ b/turbo.json
@@ -15,6 +15,7 @@
}
},
"globalEnv": [
+ "NODE_ENV",
"NEXT_PUBLIC_HOST",
"FARCASTER_DEVELOPER_FID",
"FARCASTER_DEVELOPER_MNEMONIC"
diff --git a/yarn.lock b/yarn.lock
index 1782f060c..c68988c96 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -38,7 +38,7 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742"
integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==
-"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.7", "@babel/core@^7.22.11", "@babel/core@^7.23.3", "@babel/core@^7.23.9":
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.7", "@babel/core@^7.21.8", "@babel/core@^7.22.11", "@babel/core@^7.23.3", "@babel/core@^7.23.5", "@babel/core@^7.23.9":
version "7.24.3"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.3.tgz#568864247ea10fbd4eff04dda1e05f9e2ea985c3"
integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==
@@ -68,7 +68,7 @@
eslint-visitor-keys "^2.1.0"
semver "^6.3.1"
-"@babel/generator@^7.24.1", "@babel/generator@^7.7.2":
+"@babel/generator@^7.21.5", "@babel/generator@^7.24.1", "@babel/generator@^7.7.2":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0"
integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==
@@ -78,6 +78,13 @@
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^2.5.1"
+"@babel/helper-annotate-as-pure@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
+ integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-compilation-targets@^7.23.6":
version "7.23.6"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
@@ -89,6 +96,21 @@
lru-cache "^5.1.1"
semver "^6.3.1"
+"@babel/helper-create-class-features-plugin@^7.24.1":
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz#db58bf57137b623b916e24874ab7188d93d7f68f"
+ integrity sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-member-expression-to-functions" "^7.23.0"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.24.1"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ semver "^6.3.1"
+
"@babel/helper-environment-visitor@^7.22.20":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
@@ -109,6 +131,13 @@
dependencies:
"@babel/types" "^7.22.5"
+"@babel/helper-member-expression-to-functions@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366"
+ integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==
+ dependencies:
+ "@babel/types" "^7.23.0"
+
"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15":
version "7.24.3"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128"
@@ -127,11 +156,27 @@
"@babel/helper-split-export-declaration" "^7.22.6"
"@babel/helper-validator-identifier" "^7.22.20"
+"@babel/helper-optimise-call-expression@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e"
+ integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0":
version "7.24.0"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
+"@babel/helper-replace-supers@^7.24.1":
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1"
+ integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-member-expression-to-functions" "^7.23.0"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+
"@babel/helper-simple-access@^7.22.5":
version "7.22.5"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
@@ -139,6 +184,13 @@
dependencies:
"@babel/types" "^7.22.5"
+"@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847"
+ integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
"@babel/helper-split-export-declaration@^7.22.6":
version "7.22.6"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
@@ -180,7 +232,7 @@
js-tokens "^4.0.0"
picocolors "^1.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1":
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.8", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a"
integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==
@@ -206,6 +258,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.12.13"
+"@babel/plugin-syntax-decorators@^7.22.10":
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz#71d9ad06063a6ac5430db126b5df48c70ee885fa"
+ integrity sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.0"
+
"@babel/plugin-syntax-import-meta@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
@@ -220,7 +279,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.7.2":
+"@babel/plugin-syntax-jsx@^7.21.4", "@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10"
integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==
@@ -276,13 +335,22 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2":
+"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.24.1", "@babel/plugin-syntax-typescript@^7.7.2":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844"
integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==
dependencies:
"@babel/helper-plugin-utils" "^7.24.0"
+"@babel/plugin-transform-modules-commonjs@^7.24.1":
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9"
+ integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helper-plugin-utils" "^7.24.0"
+ "@babel/helper-simple-access" "^7.22.5"
+
"@babel/plugin-transform-react-jsx-self@^7.23.3":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz#a21d866d8167e752c6a7c4555dba8afcdfce6268"
@@ -297,6 +365,27 @@
dependencies:
"@babel/helper-plugin-utils" "^7.24.0"
+"@babel/plugin-transform-typescript@^7.24.1":
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz#5c05e28bb76c7dfe7d6c5bed9951324fd2d3ab07"
+ integrity sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-create-class-features-plugin" "^7.24.1"
+ "@babel/helper-plugin-utils" "^7.24.0"
+ "@babel/plugin-syntax-typescript" "^7.24.1"
+
+"@babel/preset-typescript@^7.21.5":
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec"
+ integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.0"
+ "@babel/helper-validator-option" "^7.23.5"
+ "@babel/plugin-syntax-jsx" "^7.24.1"
+ "@babel/plugin-transform-modules-commonjs" "^7.24.1"
+ "@babel/plugin-transform-typescript" "^7.24.1"
+
"@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.1", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.0", "@babel/runtime@^7.5.5":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57"
@@ -313,7 +402,7 @@
"@babel/parser" "^7.24.0"
"@babel/types" "^7.24.0"
-"@babel/traverse@^7.24.1":
+"@babel/traverse@^7.23.2", "@babel/traverse@^7.24.1":
version "7.24.1"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c"
integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==
@@ -559,6 +648,31 @@
picocolors "^1.0.0"
sisteransi "^1.0.5"
+"@cloudflare/workerd-darwin-64@1.20240320.1":
+ version "1.20240320.1"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240320.1.tgz#3cedf21172f54fad6d0e668e60152603968f3adc"
+ integrity sha512-ioG5k2M17xyiAlK/k3L21NZLMVeSHMjwlmGtZyCyzSLL5/zGINcgZ5yPLV0UuWiysw07/6Jjzm5Sx94hzMVybg==
+
+"@cloudflare/workerd-darwin-arm64@1.20240320.1":
+ version "1.20240320.1"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240320.1.tgz#e90828f5ef2ec4b27f5b75178d21490aba631a72"
+ integrity sha512-Ga6RDdnFEIsN4WuWsaP9bLGvK9K7pEIVoSIgmw6vweVlD8UK/a2MPGrsF1ogwdeCTCOMY8wUh9poL/Yu48IPpg==
+
+"@cloudflare/workerd-linux-64@1.20240320.1":
+ version "1.20240320.1"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240320.1.tgz#45fbece24a51c6e7ed314e9a87a04c8dc4cb6891"
+ integrity sha512-KFof5H8eU0NXv+pUAU7Lk/OLtOmfsioTJqu0v6kPL7QsTGsgzj5sEQNcQ8DONSze549Yflu5W00qpA2cPz9eWQ==
+
+"@cloudflare/workerd-linux-arm64@1.20240320.1":
+ version "1.20240320.1"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240320.1.tgz#43f487d1a59019c9636fc31558f0e6ebcdbe4c5e"
+ integrity sha512-t+kGc6dGdkKvVMGcHCPhlCsUZF5dj8xbAFvLB7DAJ8T79ys30rmY2Lu/C8vKlhjH9TJhbzgKmPaJ0wC/K4euvw==
+
+"@cloudflare/workerd-windows-64@1.20240320.1":
+ version "1.20240320.1"
+ resolved "https://registry.yarnpkg.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240320.1.tgz#c2c5e6e82056a49453ce06133f106c504273ac20"
+ integrity sha512-9xDylCOsuzWqGuANkuUByiJ5RHeMqgw37FiI7rn8I6zdGAc/alOB9B4Bh7B73WC2uEpFL+XCEjcHZ6NmsO4NaQ==
+
"@coinbase/wallet-sdk@3.9.1":
version "3.9.1"
resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.1.tgz#503a14671bb392d653623ef2340934e213ac971f"
@@ -574,6 +688,13 @@
preact "^10.16.0"
sha.js "^2.4.11"
+"@cspotcode/source-map-support@0.8.1":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
+ integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+ dependencies:
+ "@jridgewell/trace-mapping" "0.3.9"
+
"@emotion/babel-plugin@^11.11.0":
version "11.11.0"
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c"
@@ -691,6 +812,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537"
integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==
+"@esbuild/android-arm64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.6.tgz#b11bd4e4d031bb320c93c83c137797b2be5b403b"
+ integrity sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==
+
"@esbuild/android-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4"
@@ -701,6 +827,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9"
integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==
+"@esbuild/android-arm@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.6.tgz#ac6b5674da2149997f6306b3314dae59bbe0ac26"
+ integrity sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==
+
"@esbuild/android-arm@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824"
@@ -711,6 +842,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995"
integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==
+"@esbuild/android-x64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.6.tgz#18c48bf949046638fc209409ff684c6bb35a5462"
+ integrity sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==
+
"@esbuild/android-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d"
@@ -721,6 +857,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98"
integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==
+"@esbuild/darwin-arm64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.6.tgz#b3fe19af1e4afc849a07c06318124e9c041e0646"
+ integrity sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==
+
"@esbuild/darwin-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e"
@@ -731,6 +872,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb"
integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==
+"@esbuild/darwin-x64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.6.tgz#f4dacd1ab21e17b355635c2bba6a31eba26ba569"
+ integrity sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==
+
"@esbuild/darwin-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd"
@@ -741,6 +887,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0"
integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==
+"@esbuild/freebsd-arm64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.6.tgz#ea4531aeda70b17cbe0e77b0c5c36298053855b4"
+ integrity sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==
+
"@esbuild/freebsd-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487"
@@ -751,6 +902,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911"
integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==
+"@esbuild/freebsd-x64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.6.tgz#1896170b3c9f63c5e08efdc1f8abc8b1ed7af29f"
+ integrity sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==
+
"@esbuild/freebsd-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c"
@@ -761,6 +917,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c"
integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==
+"@esbuild/linux-arm64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.6.tgz#967dfb951c6b2de6f2af82e96e25d63747f75079"
+ integrity sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==
+
"@esbuild/linux-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b"
@@ -771,6 +932,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5"
integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==
+"@esbuild/linux-arm@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.6.tgz#097a0ee2be39fed3f37ea0e587052961e3bcc110"
+ integrity sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==
+
"@esbuild/linux-arm@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef"
@@ -781,6 +947,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c"
integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==
+"@esbuild/linux-ia32@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.6.tgz#a38a789d0ed157495a6b5b4469ec7868b59e5278"
+ integrity sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==
+
"@esbuild/linux-ia32@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601"
@@ -791,6 +962,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa"
integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==
+"@esbuild/linux-loong64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.6.tgz#ae3983d0fb4057883c8246f57d2518c2af7cf2ad"
+ integrity sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==
+
"@esbuild/linux-loong64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299"
@@ -801,6 +977,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5"
integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==
+"@esbuild/linux-mips64el@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.6.tgz#15fbbe04648d944ec660ee5797febdf09a9bd6af"
+ integrity sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==
+
"@esbuild/linux-mips64el@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec"
@@ -811,6 +992,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa"
integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==
+"@esbuild/linux-ppc64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.6.tgz#38210094e8e1a971f2d1fd8e48462cc65f15ef19"
+ integrity sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==
+
"@esbuild/linux-ppc64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8"
@@ -821,6 +1007,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20"
integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==
+"@esbuild/linux-riscv64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.6.tgz#bc3c66d5578c3b9951a6ed68763f2a6856827e4a"
+ integrity sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==
+
"@esbuild/linux-riscv64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf"
@@ -831,6 +1022,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300"
integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==
+"@esbuild/linux-s390x@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.6.tgz#d7ba7af59285f63cfce6e5b7f82a946f3e6d67fc"
+ integrity sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==
+
"@esbuild/linux-s390x@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8"
@@ -841,6 +1037,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685"
integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==
+"@esbuild/linux-x64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.6.tgz#ba51f8760a9b9370a2530f98964be5f09d90fed0"
+ integrity sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==
+
"@esbuild/linux-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78"
@@ -851,6 +1052,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff"
integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==
+"@esbuild/netbsd-x64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.6.tgz#e84d6b6fdde0261602c1e56edbb9e2cb07c211b9"
+ integrity sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==
+
"@esbuild/netbsd-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b"
@@ -861,6 +1067,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6"
integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==
+"@esbuild/openbsd-x64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.6.tgz#cf4b9fb80ce6d280a673d54a731d9c661f88b083"
+ integrity sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==
+
"@esbuild/openbsd-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0"
@@ -871,6 +1082,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf"
integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==
+"@esbuild/sunos-x64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.6.tgz#a6838e246079b24d962b9dcb8d208a3785210a73"
+ integrity sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==
+
"@esbuild/sunos-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30"
@@ -881,6 +1097,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f"
integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==
+"@esbuild/win32-arm64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.6.tgz#ace0186e904d109ea4123317a3ba35befe83ac21"
+ integrity sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==
+
"@esbuild/win32-arm64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae"
@@ -891,6 +1112,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90"
integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==
+"@esbuild/win32-ia32@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.6.tgz#7fb3f6d4143e283a7f7dffc98a6baf31bb365c7e"
+ integrity sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==
+
"@esbuild/win32-ia32@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67"
@@ -901,6 +1127,11 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23"
integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==
+"@esbuild/win32-x64@0.17.6":
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.6.tgz#563ff4277f1230a006472664fa9278a83dd124da"
+ integrity sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==
+
"@esbuild/win32-x64@0.19.12":
version "0.19.12"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae"
@@ -1027,11 +1258,68 @@
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2"
integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==
+"@frames.js/debugger@^":
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/@frames.js/debugger/-/debugger-0.1.9.tgz#d3d45ec1f565b5facfd87d41eb8c3b8e9e2ad2e1"
+ integrity sha512-g7019xfCLMNHoTyaI+TY2L0ZxZnZH2DEvZQAlIeMmRHW0zhwXoKrgGa8QmO0MQtcB6XA3smaO4bM/7U0Yij0pA==
+ dependencies:
+ "@farcaster/core" "^0.14.7"
+ "@noble/ed25519" "^2.0.0"
+ "@radix-ui/react-accordion" "^1.1.2"
+ "@radix-ui/react-checkbox" "^1.0.4"
+ "@radix-ui/react-hover-card" "^1.0.7"
+ "@radix-ui/react-popover" "^1.0.7"
+ "@radix-ui/react-slot" "^1.0.2"
+ "@radix-ui/react-switch" "^1.0.3"
+ "@radix-ui/react-tabs" "^1.0.4"
+ "@rainbow-me/rainbowkit" "^2.0.2"
+ "@tanstack/react-query" "^5.22.2"
+ "@types/node" "^18.17.0"
+ "@types/react" "^18.2.0"
+ "@types/react-dom" "^18.2.0"
+ "@types/yargs" "^17.0.32"
+ "@xmtp/frames-validator" "^0.5.2"
+ autoprefixer "^10.0.1"
+ class-variance-authority "^0.7.0"
+ clsx "^2.1.0"
+ eslint "^8.56.0"
+ eslint-config-next "^14.1.0"
+ frames.js "^0.9.0"
+ is-port-reachable "^4.0.0"
+ lucide-react "^0.344.0"
+ next "^14.1.3"
+ open "^10.0.3"
+ postcss "^8"
+ qrcode.react "^3.1.0"
+ react "^18.2.0"
+ react-dom "^18.2.0"
+ tailwind-merge "^2.2.1"
+ tailwindcss "^3.3.0"
+ tailwindcss-animate "^1.0.7"
+ typescript "^5.3.3"
+ viem "^2.7.12"
+ wagmi "^2.5.7"
+ yargs "^17.7.2"
+
"@hono/node-server@^1.2.3":
version "1.8.2"
resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.8.2.tgz#940b3a0dbd7adbc510b79b626f3603258493354b"
integrity sha512-h8l2TBLCPHZBUrrkosZ6L5CpBLj6zdESyF4B+zngiCDF7aZFQJ0alVbLx7jn8PCVi9EyoFf8a4hOZFi1tD95EA==
+"@hono/node-server@^1.8.2", "@hono/node-server@^1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.9.0.tgz#b3f0fb41e40bbc46c9e940f43d6c917455eaeb59"
+ integrity sha512-oJjk7WXBlENeHhWiMqSyxPIZ3Kmf5ZYxqdlcSIXyN8Rn50bNJsPl99G4POBS03Jxh56FdfRJ0SEnC8mAVIiavQ==
+
+"@hono/vite-dev-server@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/@hono/vite-dev-server/-/vite-dev-server-0.10.0.tgz#0e79ab02132cac4ffb62b6ca029d11bad8f0a0bb"
+ integrity sha512-JWqdgH59x/PKDrwVCS5EW4eOL4fV+JOuzlKgaHk5eQUgE9vkPwyWwmf8f8rXjsXt5zxOKS3XMlf8sZeglFg3hw==
+ dependencies:
+ "@hono/node-server" "^1.8.2"
+ miniflare "^3.20231218.2"
+ minimatch "^9.0.3"
+
"@humanwhocodes/config-array@^0.11.14":
version "0.11.14"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
@@ -1287,7 +1575,7 @@
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.24"
-"@jridgewell/resolve-uri@^3.1.0":
+"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
@@ -1302,6 +1590,14 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+"@jridgewell/trace-mapping@0.3.9":
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+ integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.0.3"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+
"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
version "0.3.25"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
@@ -1310,6 +1606,11 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@jspm/core@^2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@jspm/core/-/core-2.0.1.tgz#3f08c59c60a5f5e994523ed6b0b665ec80adc94e"
+ integrity sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==
+
"@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz#353ce4a76c83fadec272ea5674ede767650762fd"
@@ -1344,6 +1645,29 @@
globby "^11.0.0"
read-yaml-file "^1.1.0"
+"@mdx-js/mdx@^2.3.0":
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-2.3.0.tgz#d65d8c3c28f3f46bb0e7cb3bf7613b39980671a9"
+ integrity sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/mdx" "^2.0.0"
+ estree-util-build-jsx "^2.0.0"
+ estree-util-is-identifier-name "^2.0.0"
+ estree-util-to-js "^1.1.0"
+ estree-walker "^3.0.0"
+ hast-util-to-estree "^2.0.0"
+ markdown-extensions "^1.0.0"
+ periscopic "^3.0.0"
+ remark-mdx "^2.0.0"
+ remark-parse "^10.0.0"
+ remark-rehype "^10.0.0"
+ unified "^10.0.0"
+ unist-util-position-from-estree "^1.0.0"
+ unist-util-stringify-position "^3.0.0"
+ unist-util-visit "^4.0.0"
+ vfile "^5.0.0"
+
"@mdx-js/mdx@^3.0.0":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.0.1.tgz#617bd2629ae561fdca1bb88e3badd947f5a82191"
@@ -1767,6 +2091,47 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@npmcli/fs@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e"
+ integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==
+ dependencies:
+ semver "^7.3.5"
+
+"@npmcli/git@^4.1.0":
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6"
+ integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==
+ dependencies:
+ "@npmcli/promise-spawn" "^6.0.0"
+ lru-cache "^7.4.4"
+ npm-pick-manifest "^8.0.0"
+ proc-log "^3.0.0"
+ promise-inflight "^1.0.1"
+ promise-retry "^2.0.1"
+ semver "^7.3.5"
+ which "^3.0.0"
+
+"@npmcli/package-json@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-4.0.1.tgz#1a07bf0e086b640500791f6bf245ff43cc27fa37"
+ integrity sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==
+ dependencies:
+ "@npmcli/git" "^4.1.0"
+ glob "^10.2.2"
+ hosted-git-info "^6.1.1"
+ json-parse-even-better-errors "^3.0.0"
+ normalize-package-data "^5.0.0"
+ proc-log "^3.0.0"
+ semver "^7.5.3"
+
+"@npmcli/promise-spawn@^6.0.0":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2"
+ integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==
+ dependencies:
+ which "^3.0.0"
+
"@open-frames/proxy-client@^0.2.0":
version "0.2.1"
resolved "https://registry.yarnpkg.com/@open-frames/proxy-client/-/proxy-client-0.2.1.tgz#876c5a1cdf5acfe85b56d656f4cc73d15c9843a9"
@@ -1886,6 +2251,11 @@
resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31"
integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
+"@polka/url@^1.0.0-next.24":
+ version "1.0.0-next.25"
+ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817"
+ integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==
+
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -2350,7 +2720,73 @@
dependencies:
merge-options "^3.0.4"
-"@remix-run/node@^2.8.1":
+"@remix-run/dev@^2.8.1":
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/@remix-run/dev/-/dev-2.8.1.tgz#472b411499009e985999cc483e5853127896ed5f"
+ integrity sha512-qFt4jAsAJeIOyg6ngeSnTG/9Z5N9QJfeThP/8wRHc1crqYgTiEtcI3DZ8WlAXjVSF5emgn/ZZKqzLAI02OgMfQ==
+ dependencies:
+ "@babel/core" "^7.21.8"
+ "@babel/generator" "^7.21.5"
+ "@babel/parser" "^7.21.8"
+ "@babel/plugin-syntax-decorators" "^7.22.10"
+ "@babel/plugin-syntax-jsx" "^7.21.4"
+ "@babel/preset-typescript" "^7.21.5"
+ "@babel/traverse" "^7.23.2"
+ "@babel/types" "^7.22.5"
+ "@mdx-js/mdx" "^2.3.0"
+ "@npmcli/package-json" "^4.0.1"
+ "@remix-run/node" "2.8.1"
+ "@remix-run/router" "1.15.3-pre.0"
+ "@remix-run/server-runtime" "2.8.1"
+ "@types/mdx" "^2.0.5"
+ "@vanilla-extract/integration" "^6.2.0"
+ arg "^5.0.1"
+ cacache "^17.1.3"
+ chalk "^4.1.2"
+ chokidar "^3.5.1"
+ cross-spawn "^7.0.3"
+ dotenv "^16.0.0"
+ es-module-lexer "^1.3.1"
+ esbuild "0.17.6"
+ esbuild-plugins-node-modules-polyfill "^1.6.0"
+ execa "5.1.1"
+ exit-hook "2.2.1"
+ express "^4.17.1"
+ fs-extra "^10.0.0"
+ get-port "^5.1.1"
+ gunzip-maybe "^1.4.2"
+ jsesc "3.0.2"
+ json5 "^2.2.2"
+ lodash "^4.17.21"
+ lodash.debounce "^4.0.8"
+ minimatch "^9.0.0"
+ ora "^5.4.1"
+ picocolors "^1.0.0"
+ picomatch "^2.3.1"
+ pidtree "^0.6.0"
+ postcss "^8.4.19"
+ postcss-discard-duplicates "^5.1.0"
+ postcss-load-config "^4.0.1"
+ postcss-modules "^6.0.0"
+ prettier "^2.7.1"
+ pretty-ms "^7.0.1"
+ react-refresh "^0.14.0"
+ remark-frontmatter "4.0.1"
+ remark-mdx-frontmatter "^1.0.1"
+ semver "^7.3.7"
+ set-cookie-parser "^2.6.0"
+ tar-fs "^2.1.1"
+ tsconfig-paths "^4.0.0"
+ ws "^7.4.5"
+
+"@remix-run/express@2.8.1":
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/@remix-run/express/-/express-2.8.1.tgz#d12c94354f8a3a5641c1b6f2f6b915f8dd51bff1"
+ integrity sha512-p1eo8uwZk8uLihSDpUnPOPsTDfghWikVPQfa+e0ZMk6tnJCjcpHAyENKDFtn9vDh9h7YNUg6A7+19CStHgxd7Q==
+ dependencies:
+ "@remix-run/node" "2.8.1"
+
+"@remix-run/node@2.8.1", "@remix-run/node@^2.8.1":
version "2.8.1"
resolved "https://registry.yarnpkg.com/@remix-run/node/-/node-2.8.1.tgz#0244ead9a0267663cd394f3d462d4baaccaf5960"
integrity sha512-ddCwBVlfLvRxTQJHPcaM1lhfMjsFYG3EGmYpWJIWnnzDX5EbX9pUNHBWisMuH1eA0c7pbw0PbW0UtCttKYx2qg==
@@ -2364,11 +2800,40 @@
source-map-support "^0.5.21"
stream-slice "^0.1.2"
+"@remix-run/react@^2.8.1":
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/@remix-run/react/-/react-2.8.1.tgz#89d7f6a6a5d706eb93b3bdeb92dcc3e338d7a0b4"
+ integrity sha512-HTPm1U8+xz2jPaVjZnssrckfmFMA8sUZUdaWnoF5lmLWdReqcQv+XlBhIrQQ3jO9L8iYYdnzaSZZcRFYSdpTYg==
+ dependencies:
+ "@remix-run/router" "1.15.3"
+ "@remix-run/server-runtime" "2.8.1"
+ react-router "6.22.3"
+ react-router-dom "6.22.3"
+
"@remix-run/router@1.15.3":
version "1.15.3"
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.3.tgz#d2509048d69dbb72d5389a14945339f1430b2d3c"
integrity sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==
+"@remix-run/router@1.15.3-pre.0":
+ version "1.15.3-pre.0"
+ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.3-pre.0.tgz#a77015ddaafcf0f0df538874f77abdbfcf86cc59"
+ integrity sha512-JUQb6sztqJpRbsdKpx3D4+6eaGmHU4Yb/QeKrES/ZbLuijlZMOmZ+gV0ohX5vrRDnJHJmcQPq3Tpk0GGPNM9gg==
+
+"@remix-run/serve@^2.8.1":
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/@remix-run/serve/-/serve-2.8.1.tgz#b1f58ba2a0b310a1de0e2d6f336135a5a0f9287a"
+ integrity sha512-PyCV7IMnRshwfFw7JJ2hZJppX88VAhZyYjeTAmYb6PK7IDtdmqUf5eOrYDi8gCu914C+aZRu6blxpLRlpyCY8Q==
+ dependencies:
+ "@remix-run/express" "2.8.1"
+ "@remix-run/node" "2.8.1"
+ chokidar "^3.5.3"
+ compression "^1.7.4"
+ express "^4.17.1"
+ get-port "5.1.1"
+ morgan "^1.10.0"
+ source-map-support "^0.5.21"
+
"@remix-run/server-runtime@2.8.1":
version "2.8.1"
resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-2.8.1.tgz#621f52e271e8ae117e4882761e143fa7ce7f9d42"
@@ -2882,7 +3347,7 @@
dependencies:
"@types/estree" "*"
-"@types/babel__core@^7.1.14", "@types/babel__core@^7.20.4":
+"@types/babel__core@^7.1.14", "@types/babel__core@^7.20.4", "@types/babel__core@^7.20.5":
version "7.20.5"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
@@ -3024,6 +3489,13 @@
resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.15.tgz#f352493638c2f89d706438a19a9eb300b493b506"
integrity sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==
+"@types/hast@^2.0.0":
+ version "2.3.10"
+ resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.10.tgz#5c9d9e0b304bbb8879b857225c5ebab2d81d7643"
+ integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==
+ dependencies:
+ "@types/unist" "^2"
+
"@types/hast@^3.0.0", "@types/hast@^3.0.4":
version "3.0.4"
resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa"
@@ -3073,6 +3545,13 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/mdast@^3.0.0":
+ version "3.0.15"
+ resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5"
+ integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==
+ dependencies:
+ "@types/unist" "^2"
+
"@types/mdast@^4.0.0":
version "4.0.3"
resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.3.tgz#1e011ff013566e919a4232d1701ad30d70cab333"
@@ -3085,6 +3564,11 @@
resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.11.tgz#21f4c166ed0e0a3a733869ba04cd8daea9834b8e"
integrity sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==
+"@types/mdx@^2.0.5":
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.12.tgz#38db34cc8999b982beaec01399620bee6c65ef2e"
+ integrity sha512-H9VZ9YqE+H28FQVchC83RCs5xQ2J7mAAv6qdDEaWmXEVl3OpdH+xfrSUzQ1lp7U7oSTRZ0RvW08ASPJsYBi7Cw==
+
"@types/methods@^1.1.4":
version "1.1.4"
resolved "https://registry.yarnpkg.com/@types/methods/-/methods-1.1.4.tgz#d3b7ac30ac47c91054ea951ce9eed07b1051e547"
@@ -3154,7 +3638,7 @@
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
-"@types/react-dom@^18.2.0", "@types/react-dom@^18.2.18":
+"@types/react-dom@^18.2.0", "@types/react-dom@^18.2.18", "@types/react-dom@^18.2.7":
version "18.2.22"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.22.tgz#d332febf0815403de6da8a97e5fe282cbe609bae"
integrity sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==
@@ -3170,6 +3654,15 @@
"@types/scheduler" "*"
csstype "^3.0.2"
+"@types/react@^18.2.20", "@types/react@^18.2.45":
+ version "18.2.70"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.70.tgz#89a37f9e0a6a4931f4259c598f40fd44dd6abf71"
+ integrity sha512-hjlM2hho2vqklPhopNkXkdkeq6Lv8WSZTpr7956zY+3WS5cfYUewtCzsJLsbW5dEv3lfSeQ4W14ZFeKC437JRQ==
+ dependencies:
+ "@types/prop-types" "*"
+ "@types/scheduler" "*"
+ csstype "^3.0.2"
+
"@types/scheduler@*":
version "0.16.8"
resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff"
@@ -3236,7 +3729,7 @@
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20"
integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==
-"@types/unist@^2.0.0":
+"@types/unist@^2", "@types/unist@^2.0.0":
version "2.0.10"
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc"
integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==
@@ -3253,7 +3746,7 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@^6.17.0", "@typescript-eslint/eslint-plugin@^6.5.0":
+"@typescript-eslint/eslint-plugin@^6.17.0", "@typescript-eslint/eslint-plugin@^6.5.0", "@typescript-eslint/eslint-plugin@^6.7.4":
version "6.21.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3"
integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==
@@ -3270,7 +3763,7 @@
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.17.0", "@typescript-eslint/parser@^6.5.0":
+"@typescript-eslint/parser@^5.4.2 || ^6.0.0", "@typescript-eslint/parser@^6.17.0", "@typescript-eslint/parser@^6.5.0", "@typescript-eslint/parser@^6.7.4":
version "6.21.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
@@ -3454,7 +3947,7 @@
dependencies:
"@vanilla-extract/private" "^1.0.3"
-"@vanilla-extract/integration@^6.3.0":
+"@vanilla-extract/integration@^6.2.0", "@vanilla-extract/integration@^6.3.0":
version "6.5.0"
resolved "https://registry.yarnpkg.com/@vanilla-extract/integration/-/integration-6.5.0.tgz#613407565b07dc60b123ca9080ea3f47cd2ce7bb"
integrity sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==
@@ -3545,6 +4038,17 @@
"@types/babel__core" "^7.20.4"
react-refresh "^0.14.0"
+"@vitejs/plugin-react@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9"
+ integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==
+ dependencies:
+ "@babel/core" "^7.23.5"
+ "@babel/plugin-transform-react-jsx-self" "^7.23.3"
+ "@babel/plugin-transform-react-jsx-source" "^7.23.3"
+ "@types/babel__core" "^7.20.5"
+ react-refresh "^0.14.0"
+
"@wagmi/connectors@4.1.18":
version "4.1.18"
resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-4.1.18.tgz#b95350ff2cb527093ff9dd11d382e0563ec546e3"
@@ -3916,11 +4420,24 @@ acorn-jsx@^5.0.0, acorn-jsx@^5.3.2:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
-acorn@^8.0.0, acorn@^8.11.3, acorn@^8.9.0:
+acorn-walk@^8.2.0:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
+ integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
+
+acorn@^8.0.0, acorn@^8.11.3, acorn@^8.8.0, acorn@^8.9.0:
version "8.11.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
ajv@^6.12.4, ajv@~6.12.6:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -3990,7 +4507,7 @@ anymatch@^3.0.3, anymatch@^3.1.3, anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
-arg@^5.0.2:
+arg@^5.0.1, arg@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
@@ -4135,6 +4652,13 @@ arrify@^1.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
+as-table@^1.0.36:
+ version "1.0.55"
+ resolved "https://registry.yarnpkg.com/as-table/-/as-table-1.0.55.tgz#dc984da3937745de902cea1d45843c01bdbbec4f"
+ integrity sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==
+ dependencies:
+ printable-characters "^1.0.42"
+
asap@^2.0.0:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@@ -4299,6 +4823,13 @@ base64-js@^1.3.1:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+basic-auth@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
+ integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
+ dependencies:
+ safe-buffer "5.1.2"
+
bcp-47-match@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz#603226f6e5d3914a581408be33b28a53144b09d0"
@@ -4316,6 +4847,15 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+bl@^4.0.3, bl@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
bl@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273"
@@ -4397,6 +4937,13 @@ brorand@^1.1.0:
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==
+ dependencies:
+ pako "~0.2.0"
+
browserslist@^4.22.2, browserslist@^4.23.0:
version "4.23.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
@@ -4426,6 +4973,14 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+buffer@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
buffer@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
@@ -4446,6 +5001,13 @@ builtin-modules@^3.3.0:
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
+builtins@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9"
+ integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==
+ dependencies:
+ semver "^7.0.0"
+
bundle-name@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889"
@@ -4482,6 +5044,24 @@ cac@^6.7.12, cac@^6.7.14:
resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
+cacache@^17.1.3:
+ version "17.1.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35"
+ integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==
+ dependencies:
+ "@npmcli/fs" "^3.1.0"
+ fs-minipass "^3.0.0"
+ glob "^10.2.2"
+ lru-cache "^7.7.1"
+ minipass "^7.0.3"
+ minipass-collect "^1.0.2"
+ minipass-flush "^1.0.5"
+ minipass-pipeline "^1.2.4"
+ p-map "^4.0.0"
+ ssri "^10.0.0"
+ tar "^6.1.11"
+ unique-filename "^3.0.0"
+
call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
@@ -4532,6 +5112,14 @@ caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.300015
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz#571cf4f3f1506df9bf41fcbb6d10d5d017817bce"
integrity sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==
+capnp-ts@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/capnp-ts/-/capnp-ts-0.7.0.tgz#16fd8e76b667d002af8fcf4bf92bf15d1a7b54a9"
+ integrity sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==
+ dependencies:
+ debug "^4.3.1"
+ tslib "^2.2.0"
+
ccount@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
@@ -4546,7 +5134,7 @@ chalk@^2.1.0, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^4.0.0, chalk@^4.1.1, chalk@^4.1.2:
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -4629,6 +5217,16 @@ chokidar@^3.5.1, chokidar@^3.5.3, chokidar@^3.6.0:
optionalDependencies:
fsevents "~2.3.2"
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chownr@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+ integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
chroma-js@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chroma-js/-/chroma-js-2.4.2.tgz#dffc214ed0c11fa8eefca2c36651d8e57cbfb2b0"
@@ -4665,6 +5263,18 @@ clean-regexp@^1.0.0:
dependencies:
escape-string-regexp "^1.0.5"
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
cli-cursor@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea"
@@ -4672,7 +5282,7 @@ cli-cursor@^4.0.0:
dependencies:
restore-cursor "^4.0.0"
-cli-spinners@^2.9.0:
+cli-spinners@^2.5.0, cli-spinners@^2.9.0:
version "2.9.2"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
@@ -4877,6 +5487,11 @@ cookie@0.6.0, cookie@^0.6.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
+cookie@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
+ integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+
cookiejar@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b"
@@ -4927,6 +5542,13 @@ create-vocs@^1.0.0-alpha.4:
fs-extra "^11.1.1"
picocolors "^1.0.0"
+cross-env@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
+ integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
+ dependencies:
+ cross-spawn "^7.0.1"
+
cross-fetch@^3.1.4, cross-fetch@^3.1.5:
version "3.1.8"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82"
@@ -4950,7 +5572,7 @@ cross-spawn@^5.1.0:
shebang-command "^1.2.0"
which "^1.2.9"
-cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -5054,6 +5676,11 @@ damerau-levenshtein@^1.0.8:
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+data-uri-to-buffer@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz#d296973d5a4897a5dbe31716d118211921f04770"
+ integrity sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==
+
data-uri-to-buffer@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
@@ -5217,7 +5844,7 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-depd@2.0.0:
+depd@2.0.0, depd@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
@@ -5304,6 +5931,11 @@ diff-sequences@^29.6.3:
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
+diff@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531"
+ integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==
+
dijkstrajs@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23"
@@ -5375,11 +6007,21 @@ dotenv@16.0.3:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
-dotenv@^16.4.5:
+dotenv@^16.0.0, dotenv@^16.4.5:
version "16.4.5"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
+duplexify@^3.5.0, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
duplexify@^4.1.2:
version "4.1.3"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f"
@@ -5457,7 +6099,7 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
-end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4:
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
@@ -5501,6 +6143,11 @@ entities@^4.2.0, entities@^4.4.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+err-code@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+ integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -5639,6 +6286,11 @@ es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17:
iterator.prototype "^1.1.2"
safe-array-concat "^1.1.2"
+es-module-lexer@^1.3.1:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.2.tgz#ba1a62255ff9b41023aaf9bd08c016a5f1a3fef3"
+ integrity sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==
+
es-object-atoms@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
@@ -5671,6 +6323,43 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
+esbuild-plugins-node-modules-polyfill@^1.6.0:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.6.3.tgz#8090fc4126b3d6a604ec01fd4646f407059301cf"
+ integrity sha512-nydQGT3RijD8mBd3Hek+2gSAxndgceZU9GIjYYiqU+7CE7veN8utTmupf0frcKpwIXCXWpRofL9CY9k0yU70CA==
+ dependencies:
+ "@jspm/core" "^2.0.1"
+ local-pkg "^0.5.0"
+ resolve.exports "^2.0.2"
+
+esbuild@0.17.6:
+ version "0.17.6"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.6.tgz#bbccd4433629deb6e0a83860b3b61da120ba4e01"
+ integrity sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==
+ optionalDependencies:
+ "@esbuild/android-arm" "0.17.6"
+ "@esbuild/android-arm64" "0.17.6"
+ "@esbuild/android-x64" "0.17.6"
+ "@esbuild/darwin-arm64" "0.17.6"
+ "@esbuild/darwin-x64" "0.17.6"
+ "@esbuild/freebsd-arm64" "0.17.6"
+ "@esbuild/freebsd-x64" "0.17.6"
+ "@esbuild/linux-arm" "0.17.6"
+ "@esbuild/linux-arm64" "0.17.6"
+ "@esbuild/linux-ia32" "0.17.6"
+ "@esbuild/linux-loong64" "0.17.6"
+ "@esbuild/linux-mips64el" "0.17.6"
+ "@esbuild/linux-ppc64" "0.17.6"
+ "@esbuild/linux-riscv64" "0.17.6"
+ "@esbuild/linux-s390x" "0.17.6"
+ "@esbuild/linux-x64" "0.17.6"
+ "@esbuild/netbsd-x64" "0.17.6"
+ "@esbuild/openbsd-x64" "0.17.6"
+ "@esbuild/sunos-x64" "0.17.6"
+ "@esbuild/win32-arm64" "0.17.6"
+ "@esbuild/win32-ia32" "0.17.6"
+ "@esbuild/win32-x64" "0.17.6"
+
esbuild@^0.19.2, "esbuild@npm:esbuild@~0.17.6 || ~0.18.0 || ~0.19.0":
version "0.19.12"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04"
@@ -6070,6 +6759,13 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+estree-util-attach-comments@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz#ee44f4ff6890ee7dfb3237ac7810154c94c63f84"
+ integrity sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==
+ dependencies:
+ "@types/estree" "^1.0.0"
+
estree-util-attach-comments@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d"
@@ -6077,6 +6773,15 @@ estree-util-attach-comments@^3.0.0:
dependencies:
"@types/estree" "^1.0.0"
+estree-util-build-jsx@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz#32f8a239fb40dc3f3dca75bb5dcf77a831e4e47b"
+ integrity sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ estree-util-is-identifier-name "^2.0.0"
+ estree-walker "^3.0.0"
+
estree-util-build-jsx@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1"
@@ -6087,11 +6792,30 @@ estree-util-build-jsx@^3.0.0:
estree-util-is-identifier-name "^3.0.0"
estree-walker "^3.0.0"
+estree-util-is-identifier-name@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz#2e3488ea06d9ea2face116058864f6370b37456d"
+ integrity sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==
+
+estree-util-is-identifier-name@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz#fb70a432dcb19045e77b05c8e732f1364b4b49b2"
+ integrity sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==
+
estree-util-is-identifier-name@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd"
integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==
+estree-util-to-js@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz#0f80d42443e3b13bd32f7012fffa6f93603f4a36"
+ integrity sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ astring "^1.8.0"
+ source-map "^0.7.0"
+
estree-util-to-js@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17"
@@ -6101,6 +6825,13 @@ estree-util-to-js@^2.0.0:
astring "^1.8.0"
source-map "^0.7.0"
+estree-util-value-to-estree@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz#1d3125594b4d6680f666644491e7ac1745a3df49"
+ integrity sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==
+ dependencies:
+ is-plain-obj "^3.0.0"
+
estree-util-value-to-estree@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.0.1.tgz#0b7b5d6b6a4aaad5c60999ffbc265a985df98ac5"
@@ -6109,6 +6840,14 @@ estree-util-value-to-estree@^3.0.0:
"@types/estree" "^1.0.0"
is-plain-obj "^4.0.0"
+estree-util-visit@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-1.2.1.tgz#8bc2bc09f25b00827294703835aabee1cc9ec69d"
+ integrity sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/unist" "^2.0.0"
+
estree-util-visit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb"
@@ -6214,7 +6953,7 @@ events@^3.3.0:
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
-execa@^5.0.0, execa@^5.1.1:
+execa@5.1.1, execa@^5.0.0, execa@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
@@ -6244,6 +6983,11 @@ execa@^8.0.1:
signal-exit "^4.1.0"
strip-final-newline "^3.0.0"
+exit-hook@2.2.1, exit-hook@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-2.2.1.tgz#007b2d92c6428eda2b76e7016a34351586934593"
+ integrity sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==
+
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -6260,7 +7004,7 @@ expect@^29.0.0, expect@^29.7.0:
jest-message-util "^29.7.0"
jest-util "^29.7.0"
-express@^4.19.1:
+express@^4.17.1, express@^4.19.1:
version "4.19.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.19.1.tgz#4700635795e911600a45596138cf5b0320e78256"
integrity sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==
@@ -6333,7 +7077,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1:
+fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1, fast-glob@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -6514,15 +7258,40 @@ fraction.js@^4.3.7:
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+frames.js@^0.9.0, frames.js@^0.9.3, frames.js@^0.9.6:
+ version "0.9.6"
+ resolved "https://registry.yarnpkg.com/frames.js/-/frames.js-0.9.6.tgz#dcf68f88a0237451dba11fbebcfd7df5a004c649"
+ integrity sha512-NtIs9kWdLnXBB3a7IAnYP3Iv4V+x1dHsKEwacVfWVaFd+3jnzBfiIbvo9dnMuYzFOOyaiPWmZYrff0aTygJP7A==
+ dependencies:
+ "@farcaster/core" "^0.14.7"
+ "@vercel/og" "^0.6.2"
+ cheerio "^1.0.0-rc.12"
+ protobufjs "^7.2.6"
+ viem "^2.7.8"
+
fresh@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
-fs-extra@^11.1.1:
- version "11.2.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
- integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs-extra@^11.1.1:
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
+ integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
@@ -6546,6 +7315,20 @@ fs-extra@^8.1.0:
jsonfile "^4.0.0"
universalify "^0.1.0"
+fs-minipass@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+ integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+ dependencies:
+ minipass "^3.0.0"
+
+fs-minipass@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54"
+ integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==
+ dependencies:
+ minipass "^7.0.3"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -6581,6 +7364,13 @@ futoin-hkdf@^1.5.3:
resolved "https://registry.yarnpkg.com/futoin-hkdf/-/futoin-hkdf-1.5.3.tgz#6c8024f2e1429da086d4e18289ef2239ad33ee35"
integrity sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==
+generic-names@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3"
+ integrity sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==
+ dependencies:
+ loader-utils "^3.2.0"
+
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -6617,6 +7407,19 @@ get-port-please@^3.1.2:
resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49"
integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==
+get-port@5.1.1, get-port@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193"
+ integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==
+
+get-source@^2.0.12:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/get-source/-/get-source-2.0.12.tgz#0b47d57ea1e53ce0d3a69f4f3d277eb8047da944"
+ integrity sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==
+ dependencies:
+ data-uri-to-buffer "^2.0.0"
+ source-map "^0.6.1"
+
get-stdin@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575"
@@ -6672,7 +7475,12 @@ glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
-glob@10.3.10, glob@^10.3.10, glob@^10.3.7:
+glob-to-regexp@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
+ integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
+
+glob@10.3.10, glob@^10.2.2, glob@^10.3.10, glob@^10.3.7:
version "10.3.10"
resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
@@ -6737,6 +7545,11 @@ globby@^13.1.2, globby@^13.2.2:
merge2 "^1.4.1"
slash "^4.0.0"
+globrex@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098"
+ integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==
+
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -6759,6 +7572,18 @@ graphemer@^1.4.0:
resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+gunzip-maybe@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac"
+ integrity sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==
+ dependencies:
+ browserify-zlib "^0.1.4"
+ is-deflate "^1.0.0"
+ is-gzip "^1.0.0"
+ peek-stream "^1.1.0"
+ pumpify "^1.3.3"
+ through2 "^2.0.3"
+
h3@^1.10.2, h3@^1.11.1:
version "1.11.1"
resolved "https://registry.yarnpkg.com/h3/-/h3-1.11.1.tgz#e9414ae6f2a076a345ea07256b320edb29bab9f7"
@@ -6892,6 +7717,27 @@ hast-util-select@^6.0.0:
unist-util-visit "^5.0.0"
zwitch "^2.0.0"
+hast-util-to-estree@^2.0.0:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz#da60142ffe19a6296923ec222aba73339c8bf470"
+ integrity sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^2.0.0"
+ "@types/unist" "^2.0.0"
+ comma-separated-tokens "^2.0.0"
+ estree-util-attach-comments "^2.0.0"
+ estree-util-is-identifier-name "^2.0.0"
+ hast-util-whitespace "^2.0.0"
+ mdast-util-mdx-expression "^1.0.0"
+ mdast-util-mdxjs-esm "^1.0.0"
+ property-information "^6.0.0"
+ space-separated-tokens "^2.0.0"
+ style-to-object "^0.4.1"
+ unist-util-position "^4.0.0"
+ zwitch "^2.0.0"
+
hast-util-to-estree@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz#f2afe5e869ddf0cf690c75f9fc699f3180b51b19"
@@ -6942,6 +7788,11 @@ hast-util-to-string@^3.0.0:
dependencies:
"@types/hast" "^3.0.0"
+hast-util-whitespace@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557"
+ integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==
+
hast-util-whitespace@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621"
@@ -7006,6 +7857,13 @@ hosted-git-info@^2.1.4:
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+hosted-git-info@^6.0.0, hosted-git-info@^6.1.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58"
+ integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==
+ dependencies:
+ lru-cache "^7.5.1"
+
html-escaper@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
@@ -7080,17 +7938,22 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24:
dependencies:
safer-buffer ">= 2.1.2 < 3"
+icss-utils@^5.0.0, icss-utils@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
+ integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
+
idb-keyval@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33"
integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==
-ieee754@^1.2.1:
+ieee754@^1.1.13, ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-ignore@^5.0.5, ignore@^5.2.0, ignore@^5.2.4:
+ignore@^5.0.5, ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
@@ -7250,7 +8113,7 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
-is-core-module@^2.1.0, is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
+is-core-module@^2.1.0, is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.8.1:
version "2.13.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
@@ -7276,6 +8139,11 @@ is-decimal@^2.0.0:
resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7"
integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==
+is-deflate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14"
+ integrity sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==
+
is-docker@^2.0.0, is-docker@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
@@ -7322,6 +8190,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
+is-gzip@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83"
+ integrity sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==
+
is-hexadecimal@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027"
@@ -7334,6 +8207,11 @@ is-inside-container@^1.0.0:
dependencies:
is-docker "^3.0.0"
+is-interactive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+ integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
is-interactive@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90"
@@ -7376,6 +8254,11 @@ is-plain-obj@^2.1.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+is-plain-obj@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
+ integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
+
is-plain-obj@^4.0.0, is-plain-obj@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
@@ -7451,6 +8334,11 @@ is-typed-array@^1.1.13, is-typed-array@^1.1.3:
dependencies:
which-typed-array "^1.1.14"
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714"
@@ -7512,6 +8400,11 @@ isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+isbot@^4.1.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/isbot/-/isbot-4.4.0.tgz#897ce9f2e498de6181027660ca80de8734d1ef81"
+ integrity sha512-8ZvOWUA68kyJO4hHJdWjyreq7TYNWTS9y15IzeqVdKxR9pPr3P/3r9AHcoIv9M0Rllkao5qWz2v1lmcyKIVCzQ==
+
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -7994,23 +8887,23 @@ js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.6.1:
argparse "^1.0.7"
esprima "^4.0.0"
-js-yaml@^4.1.0:
+js-yaml@^4.0.0, js-yaml@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
dependencies:
argparse "^2.0.1"
+jsesc@3.0.2, jsesc@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
+ integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
+
jsesc@^2.5.1:
version "2.5.2"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-jsesc@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
- integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
-
jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
@@ -8026,6 +8919,11 @@ json-parse-even-better-errors@^2.3.0:
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+json-parse-even-better-errors@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz#02bb29fb5da90b5444581749c22cedd3597c6cb0"
+ integrity sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==
+
json-rpc-engine@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393"
@@ -8070,7 +8968,7 @@ json5@^1.0.2:
dependencies:
minimist "^1.2.0"
-json5@^2.2.3:
+json5@^2.2.2, json5@^2.2.3:
version "2.2.3"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
@@ -8137,7 +9035,7 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-kleur@^4.1.5:
+kleur@^4.0.3, kleur@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
@@ -8254,6 +9152,19 @@ load-yaml-file@^0.2.0:
pify "^4.0.1"
strip-bom "^3.0.0"
+loader-utils@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576"
+ integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==
+
+local-pkg@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c"
+ integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==
+ dependencies:
+ mlly "^1.4.2"
+ pkg-types "^1.0.3"
+
locate-path@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
@@ -8268,6 +9179,16 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
lodash.isequal@4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
@@ -8293,6 +9214,14 @@ lodash@^4.17.21:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+log-symbols@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
log-symbols@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93"
@@ -8345,6 +9274,11 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1:
+ version "7.18.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+ integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
lucide-react@^0.331.0:
version "0.331.0"
resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.331.0.tgz#06a566303a4b2f4f84aadea6f5ba3312ed5e04ad"
@@ -8384,6 +9318,11 @@ mark.js@^8.11.1:
resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5"
integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==
+markdown-extensions@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3"
+ integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==
+
markdown-extensions@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4"
@@ -8394,6 +9333,15 @@ markdown-table@^3.0.0:
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd"
integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==
+mdast-util-definitions@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7"
+ integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ unist-util-visit "^4.0.0"
+
mdast-util-directive@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz#3fb1764e705bbdf0afb0d3f889e4404c3e82561f"
@@ -8418,6 +9366,24 @@ mdast-util-find-and-replace@^3.0.0:
unist-util-is "^6.0.0"
unist-util-visit-parents "^6.0.0"
+mdast-util-from-markdown@^1.0.0, mdast-util-from-markdown@^1.1.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0"
+ integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ decode-named-character-reference "^1.0.0"
+ mdast-util-to-string "^3.1.0"
+ micromark "^3.0.0"
+ micromark-util-decode-numeric-character-reference "^1.0.0"
+ micromark-util-decode-string "^1.0.0"
+ micromark-util-normalize-identifier "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ unist-util-stringify-position "^3.0.0"
+ uvu "^0.5.0"
+
mdast-util-from-markdown@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz#52f14815ec291ed061f2922fd14d6689c810cb88"
@@ -8436,6 +9402,15 @@ mdast-util-from-markdown@^2.0.0:
micromark-util-types "^2.0.0"
unist-util-stringify-position "^4.0.0"
+mdast-util-frontmatter@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz#79c46d7414eb9d3acabe801ee4a70a70b75e5af1"
+ integrity sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ mdast-util-to-markdown "^1.3.0"
+ micromark-extension-frontmatter "^1.0.0"
+
mdast-util-frontmatter@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8"
@@ -8513,6 +9488,17 @@ mdast-util-gfm@^3.0.0:
mdast-util-gfm-task-list-item "^2.0.0"
mdast-util-to-markdown "^2.0.0"
+mdast-util-mdx-expression@^1.0.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz#d027789e67524d541d6de543f36d51ae2586f220"
+ integrity sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^2.0.0"
+ "@types/mdast" "^3.0.0"
+ mdast-util-from-markdown "^1.0.0"
+ mdast-util-to-markdown "^1.0.0"
+
mdast-util-mdx-expression@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz#4968b73724d320a379110d853e943a501bfd9d87"
@@ -8525,6 +9511,24 @@ mdast-util-mdx-expression@^2.0.0:
mdast-util-from-markdown "^2.0.0"
mdast-util-to-markdown "^2.0.0"
+mdast-util-mdx-jsx@^2.0.0:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz#7c1f07f10751a78963cfabee38017cbc8b7786d1"
+ integrity sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^2.0.0"
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ ccount "^2.0.0"
+ mdast-util-from-markdown "^1.1.0"
+ mdast-util-to-markdown "^1.3.0"
+ parse-entities "^4.0.0"
+ stringify-entities "^4.0.0"
+ unist-util-remove-position "^4.0.0"
+ unist-util-stringify-position "^3.0.0"
+ vfile-message "^3.0.0"
+
mdast-util-mdx-jsx@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz#daae777c72f9c4a106592e3025aa50fb26068e1b"
@@ -8544,6 +9548,17 @@ mdast-util-mdx-jsx@^3.0.0:
unist-util-stringify-position "^4.0.0"
vfile-message "^4.0.0"
+mdast-util-mdx@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz#49b6e70819b99bb615d7223c088d295e53bb810f"
+ integrity sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==
+ dependencies:
+ mdast-util-from-markdown "^1.0.0"
+ mdast-util-mdx-expression "^1.0.0"
+ mdast-util-mdx-jsx "^2.0.0"
+ mdast-util-mdxjs-esm "^1.0.0"
+ mdast-util-to-markdown "^1.0.0"
+
mdast-util-mdx@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41"
@@ -8555,6 +9570,17 @@ mdast-util-mdx@^3.0.0:
mdast-util-mdxjs-esm "^2.0.0"
mdast-util-to-markdown "^2.0.0"
+mdast-util-mdxjs-esm@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz#645d02cd607a227b49721d146fd81796b2e2d15b"
+ integrity sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==
+ dependencies:
+ "@types/estree-jsx" "^1.0.0"
+ "@types/hast" "^2.0.0"
+ "@types/mdast" "^3.0.0"
+ mdast-util-from-markdown "^1.0.0"
+ mdast-util-to-markdown "^1.0.0"
+
mdast-util-mdxjs-esm@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97"
@@ -8567,6 +9593,14 @@ mdast-util-mdxjs-esm@^2.0.0:
mdast-util-from-markdown "^2.0.0"
mdast-util-to-markdown "^2.0.0"
+mdast-util-phrasing@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463"
+ integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ unist-util-is "^5.0.0"
+
mdast-util-phrasing@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3"
@@ -8575,6 +9609,20 @@ mdast-util-phrasing@^4.0.0:
"@types/mdast" "^4.0.0"
unist-util-is "^6.0.0"
+mdast-util-to-hast@^12.1.0:
+ version "12.3.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49"
+ integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ "@types/mdast" "^3.0.0"
+ mdast-util-definitions "^5.0.0"
+ micromark-util-sanitize-uri "^1.1.0"
+ trim-lines "^3.0.0"
+ unist-util-generated "^2.0.0"
+ unist-util-position "^4.0.0"
+ unist-util-visit "^4.0.0"
+
mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.0.2:
version "13.1.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz#1ae54d903150a10fe04d59f03b2b95fd210b2124"
@@ -8590,6 +9638,20 @@ mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.0.2:
unist-util-visit "^5.0.0"
vfile "^6.0.0"
+mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6"
+ integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ "@types/unist" "^2.0.0"
+ longest-streak "^3.0.0"
+ mdast-util-phrasing "^3.0.0"
+ mdast-util-to-string "^3.0.0"
+ micromark-util-decode-string "^1.0.0"
+ unist-util-visit "^4.0.0"
+ zwitch "^2.0.0"
+
mdast-util-to-markdown@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz#9813f1d6e0cdaac7c244ec8c6dabfdb2102ea2b4"
@@ -8604,6 +9666,13 @@ mdast-util-to-markdown@^2.0.0:
unist-util-visit "^5.0.0"
zwitch "^2.0.0"
+mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789"
+ integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+
mdast-util-to-string@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814"
@@ -8672,6 +9741,28 @@ micro-ftch@^0.3.1:
resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f"
integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==
+micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8"
+ integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==
+ dependencies:
+ decode-named-character-reference "^1.0.0"
+ micromark-factory-destination "^1.0.0"
+ micromark-factory-label "^1.0.0"
+ micromark-factory-space "^1.0.0"
+ micromark-factory-title "^1.0.0"
+ micromark-factory-whitespace "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-chunked "^1.0.0"
+ micromark-util-classify-character "^1.0.0"
+ micromark-util-html-tag-name "^1.0.0"
+ micromark-util-normalize-identifier "^1.0.0"
+ micromark-util-resolve-all "^1.0.0"
+ micromark-util-subtokenize "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.1"
+ uvu "^0.5.0"
+
micromark-core-commonmark@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz#50740201f0ee78c12a675bf3e68ffebc0bf931a3"
@@ -8707,6 +9798,16 @@ micromark-extension-directive@^3.0.0:
micromark-util-types "^2.0.0"
parse-entities "^4.0.0"
+micromark-extension-frontmatter@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz#2946643938e491374145d0c9aacc3249e38a865f"
+ integrity sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==
+ dependencies:
+ fault "^2.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-extension-frontmatter@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a"
@@ -8796,6 +9897,20 @@ micromark-extension-gfm@^3.0.0:
micromark-util-combine-extensions "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-extension-mdx-expression@^1.0.0:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz#5bc1f5fd90388e8293b3ef4f7c6f06c24aff6314"
+ integrity sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ micromark-factory-mdx-expression "^1.0.0"
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-events-to-acorn "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ uvu "^0.5.0"
+
micromark-extension-mdx-expression@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a"
@@ -8810,6 +9925,22 @@ micromark-extension-mdx-expression@^3.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-extension-mdx-jsx@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz#e72d24b7754a30d20fb797ece11e2c4e2cae9e82"
+ integrity sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==
+ dependencies:
+ "@types/acorn" "^4.0.0"
+ "@types/estree" "^1.0.0"
+ estree-util-is-identifier-name "^2.0.0"
+ micromark-factory-mdx-expression "^1.0.0"
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ uvu "^0.5.0"
+ vfile-message "^3.0.0"
+
micromark-extension-mdx-jsx@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz#4aba0797c25efb2366a3fd2d367c6b1c1159f4f5"
@@ -8826,6 +9957,13 @@ micromark-extension-mdx-jsx@^3.0.0:
micromark-util-types "^2.0.0"
vfile-message "^4.0.0"
+micromark-extension-mdx-md@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz#595d4b2f692b134080dca92c12272ab5b74c6d1a"
+ integrity sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==
+ dependencies:
+ micromark-util-types "^1.0.0"
+
micromark-extension-mdx-md@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d"
@@ -8833,6 +9971,21 @@ micromark-extension-mdx-md@^2.0.0:
dependencies:
micromark-util-types "^2.0.0"
+micromark-extension-mdxjs-esm@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz#e4f8be9c14c324a80833d8d3a227419e2b25dec1"
+ integrity sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ micromark-core-commonmark "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-events-to-acorn "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ unist-util-position-from-estree "^1.1.0"
+ uvu "^0.5.0"
+ vfile-message "^3.0.0"
+
micromark-extension-mdxjs-esm@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a"
@@ -8848,6 +10001,20 @@ micromark-extension-mdxjs-esm@^3.0.0:
unist-util-position-from-estree "^2.0.0"
vfile-message "^4.0.0"
+micromark-extension-mdxjs@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz#f78d4671678d16395efeda85170c520ee795ded8"
+ integrity sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==
+ dependencies:
+ acorn "^8.0.0"
+ acorn-jsx "^5.0.0"
+ micromark-extension-mdx-expression "^1.0.0"
+ micromark-extension-mdx-jsx "^1.0.0"
+ micromark-extension-mdx-md "^1.0.0"
+ micromark-extension-mdxjs-esm "^1.0.0"
+ micromark-util-combine-extensions "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-extension-mdxjs@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18"
@@ -8862,6 +10029,15 @@ micromark-extension-mdxjs@^3.0.0:
micromark-util-combine-extensions "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-factory-destination@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f"
+ integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-factory-destination@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07"
@@ -8871,6 +10047,16 @@ micromark-factory-destination@^2.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-factory-label@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68"
+ integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ uvu "^0.5.0"
+
micromark-factory-label@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a"
@@ -8881,6 +10067,20 @@ micromark-factory-label@^2.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-factory-mdx-expression@^1.0.0:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz#57ba4571b69a867a1530f34741011c71c73a4976"
+ integrity sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-events-to-acorn "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ unist-util-position-from-estree "^1.0.0"
+ uvu "^0.5.0"
+ vfile-message "^3.0.0"
+
micromark-factory-mdx-expression@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz#f2a9724ce174f1751173beb2c1f88062d3373b1b"
@@ -8895,6 +10095,14 @@ micromark-factory-mdx-expression@^2.0.0:
unist-util-position-from-estree "^2.0.0"
vfile-message "^4.0.0"
+micromark-factory-space@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf"
+ integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-factory-space@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030"
@@ -8903,6 +10111,16 @@ micromark-factory-space@^2.0.0:
micromark-util-character "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-factory-title@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1"
+ integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==
+ dependencies:
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-factory-title@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95"
@@ -8913,6 +10131,16 @@ micromark-factory-title@^2.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-factory-whitespace@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705"
+ integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==
+ dependencies:
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-factory-whitespace@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763"
@@ -8923,6 +10151,14 @@ micromark-factory-whitespace@^2.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-util-character@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc"
+ integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-util-character@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1"
@@ -8931,6 +10167,13 @@ micromark-util-character@^2.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-util-chunked@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b"
+ integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+
micromark-util-chunked@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89"
@@ -8938,6 +10181,15 @@ micromark-util-chunked@^2.0.0:
dependencies:
micromark-util-symbol "^2.0.0"
+micromark-util-classify-character@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d"
+ integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-util-classify-character@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34"
@@ -8947,6 +10199,14 @@ micromark-util-classify-character@^2.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-util-combine-extensions@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84"
+ integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==
+ dependencies:
+ micromark-util-chunked "^1.0.0"
+ micromark-util-types "^1.0.0"
+
micromark-util-combine-extensions@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5"
@@ -8955,6 +10215,13 @@ micromark-util-combine-extensions@^2.0.0:
micromark-util-chunked "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-util-decode-numeric-character-reference@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6"
+ integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+
micromark-util-decode-numeric-character-reference@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5"
@@ -8962,6 +10229,16 @@ micromark-util-decode-numeric-character-reference@^2.0.0:
dependencies:
micromark-util-symbol "^2.0.0"
+micromark-util-decode-string@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c"
+ integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==
+ dependencies:
+ decode-named-character-reference "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-decode-numeric-character-reference "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+
micromark-util-decode-string@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a"
@@ -8972,11 +10249,30 @@ micromark-util-decode-string@^2.0.0:
micromark-util-decode-numeric-character-reference "^2.0.0"
micromark-util-symbol "^2.0.0"
+micromark-util-encode@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5"
+ integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==
+
micromark-util-encode@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1"
integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==
+micromark-util-events-to-acorn@^1.0.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz#a4ab157f57a380e646670e49ddee97a72b58b557"
+ integrity sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==
+ dependencies:
+ "@types/acorn" "^4.0.0"
+ "@types/estree" "^1.0.0"
+ "@types/unist" "^2.0.0"
+ estree-util-visit "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ uvu "^0.5.0"
+ vfile-message "^3.0.0"
+
micromark-util-events-to-acorn@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz#4275834f5453c088bd29cd72dfbf80e3327cec07"
@@ -8991,11 +10287,23 @@ micromark-util-events-to-acorn@^2.0.0:
micromark-util-types "^2.0.0"
vfile-message "^4.0.0"
+micromark-util-html-tag-name@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588"
+ integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==
+
micromark-util-html-tag-name@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4"
integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==
+micromark-util-normalize-identifier@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7"
+ integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==
+ dependencies:
+ micromark-util-symbol "^1.0.0"
+
micromark-util-normalize-identifier@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b"
@@ -9003,6 +10311,13 @@ micromark-util-normalize-identifier@^2.0.0:
dependencies:
micromark-util-symbol "^2.0.0"
+micromark-util-resolve-all@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188"
+ integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==
+ dependencies:
+ micromark-util-types "^1.0.0"
+
micromark-util-resolve-all@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364"
@@ -9010,6 +10325,15 @@ micromark-util-resolve-all@^2.0.0:
dependencies:
micromark-util-types "^2.0.0"
+micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d"
+ integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==
+ dependencies:
+ micromark-util-character "^1.0.0"
+ micromark-util-encode "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+
micromark-util-sanitize-uri@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de"
@@ -9019,6 +10343,16 @@ micromark-util-sanitize-uri@^2.0.0:
micromark-util-encode "^2.0.0"
micromark-util-symbol "^2.0.0"
+micromark-util-subtokenize@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1"
+ integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==
+ dependencies:
+ micromark-util-chunked "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.0"
+ uvu "^0.5.0"
+
micromark-util-subtokenize@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz#9f412442d77e0c5789ffdf42377fa8a2bcbdf581"
@@ -9029,16 +10363,49 @@ micromark-util-subtokenize@^2.0.0:
micromark-util-symbol "^2.0.0"
micromark-util-types "^2.0.0"
+micromark-util-symbol@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142"
+ integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==
+
micromark-util-symbol@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044"
integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==
+micromark-util-types@^1.0.0, micromark-util-types@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283"
+ integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==
+
micromark-util-types@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e"
integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==
+micromark@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9"
+ integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==
+ dependencies:
+ "@types/debug" "^4.0.0"
+ debug "^4.0.0"
+ decode-named-character-reference "^1.0.0"
+ micromark-core-commonmark "^1.0.1"
+ micromark-factory-space "^1.0.0"
+ micromark-util-character "^1.0.0"
+ micromark-util-chunked "^1.0.0"
+ micromark-util-combine-extensions "^1.0.0"
+ micromark-util-decode-numeric-character-reference "^1.0.0"
+ micromark-util-encode "^1.0.0"
+ micromark-util-normalize-identifier "^1.0.0"
+ micromark-util-resolve-all "^1.0.0"
+ micromark-util-sanitize-uri "^1.0.0"
+ micromark-util-subtokenize "^1.0.0"
+ micromark-util-symbol "^1.0.0"
+ micromark-util-types "^1.0.1"
+ uvu "^0.5.0"
+
micromark@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249"
@@ -9112,6 +10479,24 @@ min-indent@^1.0.0:
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
+miniflare@^3.20231218.2:
+ version "3.20240320.0"
+ resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-3.20240320.0.tgz#45f601e61529c84c7b37248c8ca133eaafad76ec"
+ integrity sha512-4M2QRxs+J5sUsybBzKT++tlbrjjjGZdtWxKmj2sqLsT26dGaKDz7DxjAeF5XIhKa5cADcffygjxx4EvfWocMmw==
+ dependencies:
+ "@cspotcode/source-map-support" "0.8.1"
+ acorn "^8.8.0"
+ acorn-walk "^8.2.0"
+ capnp-ts "^0.7.0"
+ exit-hook "^2.2.1"
+ glob-to-regexp "^0.4.1"
+ stoppable "^1.1.0"
+ undici "^5.28.2"
+ workerd "1.20240320.1"
+ ws "^8.11.0"
+ youch "^3.2.2"
+ zod "^3.20.6"
+
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -9122,7 +10507,7 @@ minimalistic-crypto-utils@^1.0.1:
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
-minimatch@9.0.3, minimatch@^9.0.1, minimatch@^9.0.3:
+minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3:
version "9.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
@@ -9150,7 +10535,40 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+minipass-collect@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+ integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-flush@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+ integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass-pipeline@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+ integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+ dependencies:
+ minipass "^3.0.0"
+
+minipass@^3.0.0:
+ version "3.3.6"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+ integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+ dependencies:
+ yallist "^4.0.0"
+
+minipass@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+ integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3:
version "7.0.4"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
@@ -9160,6 +10578,14 @@ minisearch@^6.3.0:
resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-6.3.0.tgz#985a2f1ca3c73c2d65af94f0616bfe57164b0b6b"
integrity sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==
+minizlib@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+ integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+ dependencies:
+ minipass "^3.0.0"
+ yallist "^4.0.0"
+
mipd@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/mipd/-/mipd-0.0.5.tgz#367ee796531c23f0631f129038700b1406663aec"
@@ -9172,6 +10598,16 @@ mixme@^0.5.1:
resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51"
integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==
+mkdirp-classic@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+mkdirp@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
mlly@^1.2.0, mlly@^1.4.2, mlly@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f"
@@ -9187,6 +10623,17 @@ modern-ahocorasick@^1.0.0:
resolved "https://registry.yarnpkg.com/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz#dec373444f51b5458ac05216a8ec376e126dd283"
integrity sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==
+morgan@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7"
+ integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==
+ dependencies:
+ basic-auth "~2.0.1"
+ debug "2.6.9"
+ depd "~2.0.0"
+ on-finished "~2.3.0"
+ on-headers "~1.0.2"
+
motion@10.16.2:
version "10.16.2"
resolved "https://registry.yarnpkg.com/motion/-/motion-10.16.2.tgz#7dc173c6ad62210a7e9916caeeaf22c51e598d21"
@@ -9199,7 +10646,7 @@ motion@10.16.2:
"@motionone/utils" "^10.15.1"
"@motionone/vue" "^10.16.2"
-mri@^1.2.0:
+mri@^1.1.0, mri@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
@@ -9209,6 +10656,11 @@ mrmime@^1.0.0:
resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27"
integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==
+mrmime@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4"
+ integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -9229,6 +10681,11 @@ multiformats@^9.4.2:
resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37"
integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==
+mustache@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
+ integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
+
mz@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
@@ -9263,7 +10720,7 @@ neverthrow@^6.0.0:
resolved "https://registry.yarnpkg.com/neverthrow/-/neverthrow-6.1.0.tgz#51a6e9ce2e06600045b3c1b37aecc536d267bf95"
integrity sha512-xNbNjp/6M5vUV+mststgneJN9eJeJCDSYSBTaf3vxgvcKooP+8L0ATFpM8DGfmH7UWKJeoa24Qi33tBP9Ya3zA==
-next@^14.0.4, next@^14.1.0, next@^14.1.3:
+next@^14.0.4, next@^14.1.0, next@^14.1.2, next@^14.1.3:
version "14.1.4"
resolved "https://registry.yarnpkg.com/next/-/next-14.1.4.tgz#203310f7310578563fd5c961f0db4729ce7a502d"
integrity sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==
@@ -9351,6 +10808,16 @@ normalize-package-data@^2.5.0:
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
+normalize-package-data@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588"
+ integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==
+ dependencies:
+ hosted-git-info "^6.0.0"
+ is-core-module "^2.8.1"
+ semver "^7.3.5"
+ validate-npm-package-license "^3.0.4"
+
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
@@ -9366,6 +10833,38 @@ not@^0.1.0:
resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d"
integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==
+npm-install-checks@^6.0.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe"
+ integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==
+ dependencies:
+ semver "^7.1.1"
+
+npm-normalize-package-bin@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832"
+ integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==
+
+npm-package-arg@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1"
+ integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==
+ dependencies:
+ hosted-git-info "^6.0.0"
+ proc-log "^3.0.0"
+ semver "^7.3.5"
+ validate-npm-package-name "^5.0.0"
+
+npm-pick-manifest@^8.0.0:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa"
+ integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==
+ dependencies:
+ npm-install-checks "^6.0.0"
+ npm-normalize-package-bin "^3.0.0"
+ npm-package-arg "^10.0.0"
+ semver "^7.3.5"
+
npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
@@ -9497,6 +10996,13 @@ on-finished@2.4.1:
dependencies:
ee-first "1.1.1"
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==
+ dependencies:
+ ee-first "1.1.1"
+
on-headers@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
@@ -9554,6 +11060,21 @@ optionator@^0.9.3:
prelude-ls "^1.2.1"
type-check "^0.4.0"
+ora@^5.4.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+ integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+ dependencies:
+ bl "^4.1.0"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-spinners "^2.5.0"
+ is-interactive "^1.0.0"
+ is-unicode-supported "^0.1.0"
+ log-symbols "^4.1.0"
+ strip-ansi "^6.0.0"
+ wcwidth "^1.0.1"
+
ora@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/ora/-/ora-7.0.1.tgz#cdd530ecd865fe39e451a0e7697865669cb11930"
@@ -9624,12 +11145,19 @@ p-map@^2.0.0:
resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
p-try@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-pako@^0.2.5:
+pako@^0.2.5, pako@~0.2.0:
version "0.2.9"
resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==
@@ -9673,6 +11201,11 @@ parse-json@^5.0.0, parse-json@^5.2.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
+parse-ms@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d"
+ integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==
+
parse5-htmlparser2-tree-adapter@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
@@ -9741,6 +11274,15 @@ pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2:
resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
+peek-stream@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67"
+ integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==
+ dependencies:
+ buffer-from "^1.0.0"
+ duplexify "^3.5.0"
+ through2 "^2.0.3"
+
periscopic@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a"
@@ -9760,6 +11302,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+pidtree@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
+ integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
+
pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -9851,6 +11398,11 @@ possible-typed-array-names@^1.0.0:
resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
+postcss-discard-duplicates@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848"
+ integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==
+
postcss-import@^15.1.0:
version "15.1.0"
resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
@@ -9875,6 +11427,48 @@ postcss-load-config@^4.0.1:
lilconfig "^3.0.0"
yaml "^2.3.4"
+postcss-modules-extract-imports@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
+ integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
+
+postcss-modules-local-by-default@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz#7cbed92abd312b94aaea85b68226d3dec39a14e6"
+ integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==
+ dependencies:
+ icss-utils "^5.0.0"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.1.0"
+
+postcss-modules-scope@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz#32cfab55e84887c079a19bbb215e721d683ef134"
+ integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==
+ dependencies:
+ postcss-selector-parser "^6.0.4"
+
+postcss-modules-values@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
+ integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
+ dependencies:
+ icss-utils "^5.0.0"
+
+postcss-modules@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-6.0.0.tgz#cac283dbabbbdc2558c45391cbd0e2df9ec50118"
+ integrity sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==
+ dependencies:
+ generic-names "^4.0.0"
+ icss-utils "^5.1.0"
+ lodash.camelcase "^4.3.0"
+ postcss-modules-extract-imports "^3.0.0"
+ postcss-modules-local-by-default "^4.0.0"
+ postcss-modules-scope "^3.0.0"
+ postcss-modules-values "^4.0.0"
+ string-hash "^1.1.1"
+
postcss-nested@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
@@ -9882,7 +11476,7 @@ postcss-nested@^6.0.1:
dependencies:
postcss-selector-parser "^6.0.11"
-postcss-selector-parser@^6.0.11:
+postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
version "6.0.16"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04"
integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==
@@ -9890,7 +11484,7 @@ postcss-selector-parser@^6.0.11:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
-postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0:
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
@@ -9904,7 +11498,7 @@ postcss@8.4.31:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8, postcss@^8.3.6, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.36:
+postcss@^8, postcss@^8.3.6, postcss@^8.4.19, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.36:
version "8.4.38"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
@@ -9960,6 +11554,23 @@ pretty-format@^29.0.0, pretty-format@^29.7.0:
ansi-styles "^5.0.0"
react-is "^18.0.0"
+pretty-ms@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8"
+ integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==
+ dependencies:
+ parse-ms "^2.1.0"
+
+printable-characters@^1.0.42:
+ version "1.0.42"
+ resolved "https://registry.yarnpkg.com/printable-characters/-/printable-characters-1.0.42.tgz#3f18e977a9bd8eb37fcc4ff5659d7be90868b3d8"
+ integrity sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==
+
+proc-log@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8"
+ integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==
+
process-nextick-args@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
@@ -9975,6 +11586,19 @@ process-warning@^1.0.0:
resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616"
integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
+
+promise-retry@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+ integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+ dependencies:
+ err-code "^2.0.2"
+ retry "^0.12.0"
+
prompts@^2.0.1:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
@@ -10038,6 +11662,14 @@ pseudomap@^1.0.2:
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
@@ -10046,6 +11678,15 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
punycode@^2.1.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
@@ -10236,7 +11877,7 @@ react-remove-scroll@2.5.7:
use-callback-ref "^1.3.0"
use-sidecar "^1.1.2"
-react-router-dom@^6.20.0:
+react-router-dom@6.22.3, react-router-dom@^6.20.0:
version "6.22.3"
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.22.3.tgz#9781415667fd1361a475146c5826d9f16752a691"
integrity sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==
@@ -10321,7 +11962,7 @@ readable-stream@2.3.3:
string_decoder "~1.0.3"
util-deprecate "~1.0.1"
-readable-stream@^2.3.3, readable-stream@^2.3.7:
+readable-stream@^2.0.0, readable-stream@^2.3.3, readable-stream@^2.3.7, readable-stream@~2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
@@ -10446,6 +12087,16 @@ remark-directive@^3.0.0:
micromark-extension-directive "^3.0.0"
unified "^11.0.0"
+remark-frontmatter@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz#84560f7ccef114ef076d3d3735be6d69f8922309"
+ integrity sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ mdast-util-frontmatter "^1.0.0"
+ micromark-extension-frontmatter "^1.0.0"
+ unified "^10.0.0"
+
remark-frontmatter@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2"
@@ -10468,6 +12119,16 @@ remark-gfm@^4.0.0:
remark-stringify "^11.0.0"
unified "^11.0.0"
+remark-mdx-frontmatter@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/remark-mdx-frontmatter/-/remark-mdx-frontmatter-1.1.1.tgz#54cfb3821fbb9cb6057673e0570ae2d645f6fe32"
+ integrity sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==
+ dependencies:
+ estree-util-is-identifier-name "^1.0.0"
+ estree-util-value-to-estree "^1.0.0"
+ js-yaml "^4.0.0"
+ toml "^3.0.0"
+
remark-mdx-frontmatter@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/remark-mdx-frontmatter/-/remark-mdx-frontmatter-4.0.0.tgz#1d0287103ac73c5d493d2fad19dd805e69db55ca"
@@ -10480,6 +12141,14 @@ remark-mdx-frontmatter@^4.0.0:
unified "^11.0.0"
yaml "^2.0.0"
+remark-mdx@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.3.0.tgz#efe678025a8c2726681bde8bf111af4a93943db4"
+ integrity sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==
+ dependencies:
+ mdast-util-mdx "^2.0.0"
+ micromark-extension-mdxjs "^1.0.0"
+
remark-mdx@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.0.1.tgz#8f73dd635c1874e44426e243f72c0977cf60e212"
@@ -10488,6 +12157,15 @@ remark-mdx@^3.0.0:
mdast-util-mdx "^3.0.0"
micromark-extension-mdxjs "^3.0.0"
+remark-parse@^10.0.0:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.2.tgz#ca241fde8751c2158933f031a4e3efbaeb8bc262"
+ integrity sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==
+ dependencies:
+ "@types/mdast" "^3.0.0"
+ mdast-util-from-markdown "^1.0.0"
+ unified "^10.0.0"
+
remark-parse@^11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1"
@@ -10498,6 +12176,16 @@ remark-parse@^11.0.0:
micromark-util-types "^2.0.0"
unified "^11.0.0"
+remark-rehype@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279"
+ integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==
+ dependencies:
+ "@types/hast" "^2.0.0"
+ "@types/mdast" "^3.0.0"
+ mdast-util-to-hast "^12.1.0"
+ unified "^10.0.0"
+
remark-rehype@^11.0.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.0.tgz#d5f264f42bcbd4d300f030975609d01a1697ccdc"
@@ -10555,7 +12243,7 @@ resolve-pkg-maps@^1.0.0:
resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
-resolve.exports@^2.0.0:
+resolve.exports@^2.0.0, resolve.exports@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
@@ -10586,6 +12274,14 @@ resolve@~1.19.0:
is-core-module "^2.1.0"
path-parse "^1.0.6"
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
restore-cursor@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9"
@@ -10594,6 +12290,11 @@ restore-cursor@^4.0.0:
onetime "^5.1.0"
signal-exit "^3.0.2"
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
@@ -10664,6 +12365,13 @@ rxjs@^7.8.0, rxjs@^7.8.1:
dependencies:
tslib "^2.1.0"
+sade@^1.7.3:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701"
+ integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==
+ dependencies:
+ mri "^1.1.0"
+
safe-array-concat@^1.1.0, safe-array-concat@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb"
@@ -10745,7 +12453,7 @@ semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4:
+semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4:
version "7.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
@@ -10786,7 +12494,7 @@ set-blocking@^2.0.0:
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
-set-cookie-parser@^2.4.8:
+set-cookie-parser@^2.4.8, set-cookie-parser@^2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51"
integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==
@@ -10882,6 +12590,15 @@ signal-exit@^4.0.1, signal-exit@^4.1.0:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+sirv@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0"
+ integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==
+ dependencies:
+ "@polka/url" "^1.0.0-next.24"
+ mrmime "^2.0.0"
+ totalist "^3.0.0"
+
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
@@ -11054,6 +12771,13 @@ sprintf-js@~1.0.2:
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+ssri@^10.0.0:
+ version "10.0.5"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c"
+ integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==
+ dependencies:
+ minipass "^7.0.3"
+
stack-utils@^2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f"
@@ -11061,6 +12785,14 @@ stack-utils@^2.0.3:
dependencies:
escape-string-regexp "^2.0.0"
+stacktracey@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/stacktracey/-/stacktracey-2.1.8.tgz#bf9916020738ce3700d1323b32bd2c91ea71199d"
+ integrity sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==
+ dependencies:
+ as-table "^1.0.36"
+ get-source "^2.0.12"
+
statuses@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
@@ -11078,7 +12810,12 @@ stdin-discarder@^0.1.0:
dependencies:
bl "^5.0.0"
-stream-shift@^1.0.2:
+stoppable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b"
+ integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==
+
+stream-shift@^1.0.0, stream-shift@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b"
integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==
@@ -11105,6 +12842,11 @@ strict-uri-encode@^2.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==
+string-hash@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
+ integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==
+
string-length@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
@@ -11266,7 +13008,7 @@ strip-json-comments@^3.1.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-style-to-object@^0.4.0:
+style-to-object@^0.4.0, style-to-object@^0.4.1:
version "0.4.4"
resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec"
integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==
@@ -11423,6 +13165,39 @@ tapable@^2.2.0:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+tar-fs@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
+ integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
+ dependencies:
+ chownr "^1.1.1"
+ mkdirp-classic "^0.5.2"
+ pump "^3.0.0"
+ tar-stream "^2.1.4"
+
+tar-stream@^2.1.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+ integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+ dependencies:
+ bl "^4.0.3"
+ end-of-stream "^1.4.1"
+ fs-constants "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+
+tar@^6.1.11:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
+ integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
+ dependencies:
+ chownr "^2.0.0"
+ fs-minipass "^2.0.0"
+ minipass "^5.0.0"
+ minizlib "^2.1.1"
+ mkdirp "^1.0.3"
+ yallist "^4.0.0"
+
term-size@^2.1.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
@@ -11463,6 +13238,14 @@ thread-stream@^0.15.1:
dependencies:
real-require "^0.1.0"
+through2@^2.0.3:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
tiny-inflate@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
@@ -11502,6 +13285,11 @@ toml@^3.0.0:
resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee"
integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==
+totalist@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
+ integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
+
tr46@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
@@ -11544,6 +13332,11 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+tsconfck@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.0.3.tgz#d9bda0e87d05b1c360e996c9050473c7e6f8084f"
+ integrity sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==
+
tsconfig-paths@^3.15.0:
version "3.15.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
@@ -11554,12 +13347,21 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
+tsconfig-paths@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c"
+ integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==
+ dependencies:
+ json5 "^2.2.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
tslib@1.14.1, tslib@^1.8.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.2:
+tslib@^2.0.0, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -11748,7 +13550,7 @@ typed-array-length@^1.0.5:
is-typed-array "^1.1.13"
possible-typed-array-names "^1.0.0"
-typescript@^5.3.3:
+typescript@^5.1.6, typescript@^5.3.3:
version "5.4.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff"
integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==
@@ -11790,7 +13592,7 @@ undici-types@~5.26.4:
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-undici@^5.8.1:
+undici@^5.28.2, undici@^5.8.1:
version "5.28.3"
resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b"
integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==
@@ -11821,7 +13623,7 @@ unicode-trie@^2.0.0:
pako "^0.2.5"
tiny-inflate "^1.0.0"
-unified@^10.1.2:
+unified@^10.0.0, unified@^10.1.2:
version "10.1.2"
resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df"
integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==
@@ -11847,6 +13649,32 @@ unified@^11.0.0, unified@^11.0.4:
trough "^2.0.0"
vfile "^6.0.0"
+unique-filename@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
+ integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
+ dependencies:
+ unique-slug "^4.0.0"
+
+unique-slug@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
+ integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unist-util-generated@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae"
+ integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==
+
+unist-util-is@^5.0.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9"
+ integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==
+ dependencies:
+ "@types/unist" "^2.0.0"
+
unist-util-is@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424"
@@ -11854,6 +13682,13 @@ unist-util-is@^6.0.0:
dependencies:
"@types/unist" "^3.0.0"
+unist-util-position-from-estree@^1.0.0, unist-util-position-from-estree@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz#8ac2480027229de76512079e377afbcabcfcce22"
+ integrity sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==
+ dependencies:
+ "@types/unist" "^2.0.0"
+
unist-util-position-from-estree@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200"
@@ -11861,6 +13696,13 @@ unist-util-position-from-estree@^2.0.0:
dependencies:
"@types/unist" "^3.0.0"
+unist-util-position@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037"
+ integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+
unist-util-position@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4"
@@ -11868,6 +13710,14 @@ unist-util-position@^5.0.0:
dependencies:
"@types/unist" "^3.0.0"
+unist-util-remove-position@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz#a89be6ea72e23b1a402350832b02a91f6a9afe51"
+ integrity sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-visit "^4.0.0"
+
unist-util-remove-position@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz#fea68a25658409c9460408bc6b4991b965b52163"
@@ -11890,6 +13740,14 @@ unist-util-stringify-position@^4.0.0:
dependencies:
"@types/unist" "^3.0.0"
+unist-util-visit-parents@^5.1.1:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb"
+ integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^5.0.0"
+
unist-util-visit-parents@^6.0.0:
version "6.0.1"
resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815"
@@ -11898,6 +13756,15 @@ unist-util-visit-parents@^6.0.0:
"@types/unist" "^3.0.0"
unist-util-is "^6.0.0"
+unist-util-visit@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2"
+ integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-is "^5.0.0"
+ unist-util-visit-parents "^5.1.1"
+
unist-util-visit@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6"
@@ -12025,6 +13892,16 @@ uuid@^9.0.1:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+uvu@^0.5.0:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df"
+ integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==
+ dependencies:
+ dequal "^2.0.0"
+ diff "^5.0.0"
+ kleur "^4.0.3"
+ sade "^1.7.3"
+
v8-to-istanbul@^9.0.1:
version "9.2.0"
resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad"
@@ -12034,7 +13911,7 @@ v8-to-istanbul@^9.0.1:
"@types/istanbul-lib-coverage" "^2.0.1"
convert-source-map "^2.0.0"
-validate-npm-package-license@^3.0.1:
+validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
@@ -12042,6 +13919,13 @@ validate-npm-package-license@^3.0.1:
spdx-correct "^3.0.0"
spdx-expression-parse "^3.0.0"
+validate-npm-package-name@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713"
+ integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==
+ dependencies:
+ builtins "^5.0.0"
+
valtio@1.11.2:
version "1.11.2"
resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.11.2.tgz#b8049c02dfe65620635d23ebae9121a741bb6530"
@@ -12119,9 +14003,9 @@ viem@^1.0.0, viem@^1.1.4, viem@^1.12.2:
ws "8.13.0"
viem@^2.7.12, viem@^2.7.14, viem@^2.7.8:
- version "2.8.16"
- resolved "https://registry.yarnpkg.com/viem/-/viem-2.8.16.tgz#30370390a6f109657b57c1a01b2793c4056b4e95"
- integrity sha512-J8tu1aP7TfI2HT/IEmyJ+n+WInrA/cuMuJtfgvYhYgHBobxhYGc2SojHm5lZBWcWgErN1Ld7VcKUwTmPh4ToQA==
+ version "2.8.18"
+ resolved "https://registry.yarnpkg.com/viem/-/viem-2.8.18.tgz#ffb051bf80381ffefc98087a20c177b25463c9f4"
+ integrity sha512-Kq3kwkKziJ8rQeLkmdbSLheHDnA+tx2EdLKLmQ3N4FVtjKYjBP9tPL1r+fI6KltVUM1TDOhIHOdslDSp57VMMg==
dependencies:
"@adraffy/ens-normalize" "1.10.0"
"@noble/curves" "1.2.0"
@@ -12143,10 +14027,30 @@ vite-node@^1.2.0:
picocolors "^1.0.0"
vite "^5.0.0"
+vite-tsconfig-paths@^4.2.1:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz#321f02e4b736a90ff62f9086467faf4e2da857a9"
+ integrity sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==
+ dependencies:
+ debug "^4.1.1"
+ globrex "^0.1.2"
+ tsconfck "^3.0.3"
+
vite@^5.0.0, vite@^5.0.11, vite@^5.0.2:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.2.tgz#b98f8de352d22e21d99508274ddd053ef82bf238"
- integrity sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ==
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.3.tgz#198efc2fd4d80eac813b146a68a4b0dbde884fc2"
+ integrity sha512-+i1oagbvkVIhEy9TnEV+fgXsng13nZM90JQbrcPrf6DvW2mXARlz+DK7DLiDP+qeKoD1FCVx/1SpFL1CLq9Mhw==
+ dependencies:
+ esbuild "^0.20.1"
+ postcss "^8.4.36"
+ rollup "^4.13.0"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+vite@^5.1.0:
+ version "5.2.6"
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.6.tgz#fc2ce309e0b4871e938cb0aca3b96c422c01f222"
+ integrity sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==
dependencies:
esbuild "^0.20.1"
postcss "^8.4.36"
@@ -12383,6 +14287,24 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
+which@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1"
+ integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==
+ dependencies:
+ isexe "^2.0.0"
+
+workerd@1.20240320.1:
+ version "1.20240320.1"
+ resolved "https://registry.yarnpkg.com/workerd/-/workerd-1.20240320.1.tgz#f959a4805bf3bdbdf86d123482132fa30a3f34c9"
+ integrity sha512-nuavAGGjh0qqM6RF5zxTHyUwEqdLCHchodbrpbh/xlJpFGnJVY5C1YgSi2S9aLkJJoa0/25Ta/+EzXEbApA/3w==
+ optionalDependencies:
+ "@cloudflare/workerd-darwin-64" "1.20240320.1"
+ "@cloudflare/workerd-darwin-arm64" "1.20240320.1"
+ "@cloudflare/workerd-linux-64" "1.20240320.1"
+ "@cloudflare/workerd-linux-arm64" "1.20240320.1"
+ "@cloudflare/workerd-windows-64" "1.20240320.1"
+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -12428,11 +14350,16 @@ ws@8.13.0:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
-ws@^7.5.1:
+ws@^7.4.5, ws@^7.5.1:
version "7.5.9"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+ws@^8.11.0:
+ version "8.16.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4"
+ integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==
+
ws@~8.11.0:
version "8.11.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143"
@@ -12443,7 +14370,7 @@ xmlhttprequest-ssl@~2.0.0:
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"
integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==
-xtend@^4.0.1:
+xtend@^4.0.1, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@@ -12536,6 +14463,20 @@ yoga-wasm-web@0.3.3, yoga-wasm-web@^0.3.3:
resolved "https://registry.yarnpkg.com/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba"
integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==
+youch@^3.2.2:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/youch/-/youch-3.3.3.tgz#50cfdf5bc395ce664a5073e31b712ff4a859d928"
+ integrity sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==
+ dependencies:
+ cookie "^0.5.0"
+ mustache "^4.2.0"
+ stacktracey "^2.1.8"
+
+zod@^3.20.6:
+ version "3.22.4"
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff"
+ integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==
+
zustand@4.4.1:
version "4.4.1"
resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0"