Skip to content

Commit 4e2573b

Browse files
committed
fix: polishing for release.
2 parents 9d4d8f3 + 5f57300 commit 4e2573b

File tree

267 files changed

+12642
-7948
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

267 files changed

+12642
-7948
lines changed

.changeset/better-owls-flash.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"thirdweb": patch
3+
---
4+
5+
- Add support for blob urls in `MediaRenderer` component
6+
- Fix `className` prop not set in loading state of `MediaRenderer` component

.github/workflows/codeql-analysis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646

4747
# Initializes the CodeQL tools for scanning.
4848
- name: Initialize CodeQL
49-
uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
49+
uses: github/codeql-action/init@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19
5050
with:
5151
languages: ${{ matrix.language }}
5252
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -59,7 +59,7 @@ jobs:
5959
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
6060
# If this step fails, then you should remove it and run the build manually (see below)
6161
- name: Autobuild
62-
uses: github/codeql-action/autobuild@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
62+
uses: github/codeql-action/autobuild@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19
6363

6464
# ℹ️ Command-line programs to run using the OS shell.
6565
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -72,4 +72,4 @@ jobs:
7272
# ./location_of_script_within_repo/buildscript.sh
7373

7474
- name: Perform CodeQL Analysis
75-
uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18
75+
uses: github/codeql-action/analyze@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19

apps/dashboard/.storybook/main.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ const config: StorybookConfig = {
1313
addons: [
1414
getAbsolutePath("@storybook/addon-onboarding"),
1515
getAbsolutePath("@storybook/addon-links"),
16-
getAbsolutePath("@storybook/addon-essentials"),
1716
getAbsolutePath("@chromatic-com/storybook"),
18-
getAbsolutePath("@storybook/addon-interactions"),
17+
getAbsolutePath("@storybook/addon-docs"),
1918
],
2019
framework: {
2120
name: getAbsolutePath("@storybook/nextjs"),

apps/dashboard/.storybook/preview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Preview } from "@storybook/react";
1+
import type { Preview } from "@storybook/nextjs";
22
import "../src/global.css";
33
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
44
import { MoonIcon, SunIcon } from "lucide-react";

apps/dashboard/framer-rewrites.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ module.exports = [
4040
"/community/ambassadors",
4141
"/community/startup-program",
4242
// -- grants --
43-
"/grant/superchain",
43+
"/grants",
44+
"/superchain",
4445
// -- templates --
4546
"/templates",
4647
"/templates/:template_slug",

apps/dashboard/knip.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
"project": ["src/**"],
1111
"ignoreBinaries": ["only-allow", "biome"],
1212
"ignoreDependencies": [
13-
"@storybook/blocks",
1413
"@thirdweb-dev/service-utils",
1514
"@thirdweb-dev/vault-sdk",
1615
"@types/color",

apps/dashboard/package.json

Lines changed: 43 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,30 @@
3131
"@farcaster/frame-sdk": "^0.0.60",
3232
"@hookform/resolvers": "^3.9.1",
3333
"@marsidev/react-turnstile": "^1.1.0",
34-
"@radix-ui/react-accordion": "^1.2.7",
35-
"@radix-ui/react-alert-dialog": "^1.1.10",
36-
"@radix-ui/react-avatar": "^1.1.6",
37-
"@radix-ui/react-checkbox": "^1.2.2",
38-
"@radix-ui/react-dialog": "1.1.10",
39-
"@radix-ui/react-dropdown-menu": "^2.1.11",
40-
"@radix-ui/react-hover-card": "^1.1.10",
41-
"@radix-ui/react-label": "^2.1.4",
42-
"@radix-ui/react-popover": "^1.1.10",
43-
"@radix-ui/react-progress": "^1.1.4",
44-
"@radix-ui/react-radio-group": "^1.3.3",
34+
"@radix-ui/react-accordion": "^1.2.11",
35+
"@radix-ui/react-alert-dialog": "^1.1.14",
36+
"@radix-ui/react-avatar": "^1.1.10",
37+
"@radix-ui/react-checkbox": "^1.3.2",
38+
"@radix-ui/react-dialog": "1.1.14",
39+
"@radix-ui/react-dropdown-menu": "^2.1.15",
40+
"@radix-ui/react-hover-card": "^1.1.14",
41+
"@radix-ui/react-label": "^2.1.7",
42+
"@radix-ui/react-popover": "^1.1.14",
43+
"@radix-ui/react-progress": "^1.1.7",
44+
"@radix-ui/react-radio-group": "^1.3.7",
4545
"@radix-ui/react-select": "^2.2.5",
4646
"@radix-ui/react-separator": "^1.1.7",
47-
"@radix-ui/react-slot": "^1.2.0",
48-
"@radix-ui/react-switch": "^1.2.2",
49-
"@radix-ui/react-tooltip": "1.2.3",
47+
"@radix-ui/react-slot": "^1.2.3",
48+
"@radix-ui/react-switch": "^1.2.5",
49+
"@radix-ui/react-tooltip": "1.2.7",
5050
"@scalar/api-reference-react": "^0.6.19",
51-
"@sentry/nextjs": "9.13.0",
52-
"@shazow/whatsabi": "0.21.0",
53-
"@tanstack/react-query": "5.74.4",
51+
"@sentry/nextjs": "9.28.1",
52+
"@shazow/whatsabi": "0.22.2",
53+
"@tanstack/react-query": "5.80.7",
5454
"@tanstack/react-table": "^8.21.3",
5555
"@thirdweb-dev/service-utils": "workspace:*",
5656
"@thirdweb-dev/vault-sdk": "workspace:*",
57-
"@vercel/functions": "2.0.0",
57+
"@vercel/functions": "2.1.0",
5858
"@vercel/og": "^0.6.8",
5959
"@worldcoin/minikit-js": "^1.9.5",
6060
"abitype": "1.0.8",
@@ -64,17 +64,16 @@
6464
"color": "5.0.0",
6565
"compare-versions": "^6.1.0",
6666
"date-fns": "4.1.0",
67-
"fast-xml-parser": "^5.2.1",
67+
"fast-xml-parser": "^5.2.5",
6868
"fetch-event-stream": "0.1.5",
6969
"flat": "^6.0.1",
70-
"framer-motion": "12.9.2",
70+
"framer-motion": "12.17.0",
7171
"fuse.js": "7.1.0",
72-
"idb-keyval": "^6.2.1",
7372
"input-otp": "^1.4.1",
7473
"ioredis": "^5.6.1",
7574
"ipaddr.js": "^2.2.0",
76-
"lucide-react": "0.503.0",
77-
"next": "15.3.2",
75+
"lucide-react": "0.514.0",
76+
"next": "15.3.3",
7877
"next-plausible": "^3.12.4",
7978
"next-themes": "^0.4.6",
8079
"nextjs-toploader": "^1.6.12",
@@ -99,54 +98,50 @@
9998
"responsive-rsc": "0.0.7",
10099
"server-only": "^0.0.1",
101100
"shiki": "1.27.0",
102-
"sonner": "2.0.3",
101+
"sonner": "2.0.5",
103102
"spdx-correct": "^3.2.0",
104103
"stripe": "17.7.0",
105-
"swagger-ui-react": "^5.21.0",
104+
"swagger-ui-react": "^5.24.1",
106105
"tailwind-merge": "^2.6.0",
107106
"tailwindcss-animate": "^1.0.7",
108107
"thirdweb": "workspace:*",
109108
"tiny-invariant": "^1.3.3",
110-
"use-debounce": "^10.0.4",
111-
"zod": "3.25.24"
109+
"use-debounce": "^10.0.5",
110+
"vaul": "^1.1.2",
111+
"zod": "3.25.62"
112112
},
113113
"devDependencies": {
114114
"@chakra-ui/cli": "^2.4.1",
115-
"@chromatic-com/storybook": "3.2.6",
116-
"@next/bundle-analyzer": "15.3.2",
117-
"@next/eslint-plugin-next": "15.3.2",
118-
"@playwright/test": "1.52.0",
119-
"@storybook/addon-essentials": "8.6.14",
120-
"@storybook/addon-interactions": "8.6.14",
121-
"@storybook/addon-links": "8.6.14",
122-
"@storybook/addon-onboarding": "8.6.14",
123-
"@storybook/addon-viewport": "8.6.14",
124-
"@storybook/blocks": "8.6.14",
125-
"@storybook/nextjs": "8.6.14",
126-
"@storybook/react": "8.6.14",
127-
"@storybook/test": "8.6.14",
115+
"@chromatic-com/storybook": "4.0.0",
116+
"@next/bundle-analyzer": "15.3.3",
117+
"@next/eslint-plugin-next": "15.3.3",
118+
"@playwright/test": "1.53.0",
119+
"@storybook/addon-docs": "9.0.8",
120+
"@storybook/addon-links": "9.0.8",
121+
"@storybook/addon-onboarding": "9.0.8",
122+
"@storybook/nextjs": "9.0.8",
128123
"@types/color": "4.2.0",
129124
"@types/node": "22.14.1",
130125
"@types/papaparse": "^5.3.16",
131126
"@types/pluralize": "^0.0.33",
132127
"@types/qrcode": "^1.5.5",
133-
"@types/react": "19.1.4",
134-
"@types/react-dom": "19.1.5",
128+
"@types/react": "19.1.8",
129+
"@types/react-dom": "19.1.6",
135130
"@types/react-table": "^7.7.20",
136131
"@types/spdx-correct": "^3.1.3",
137132
"@types/swagger-ui-react": "^5.18.0",
138133
"@typescript-eslint/eslint-plugin": "7.14.1",
139134
"@typescript-eslint/parser": "7.14.1",
140135
"autoprefixer": "^10.4.21",
141-
"checkly": "5.2.0",
136+
"checkly": "5.6.0",
142137
"eslint": "8.57.0",
143138
"eslint-config-biome": "1.9.4",
144-
"eslint-plugin-react-compiler": "19.0.0-beta-e993439-20250405",
145-
"eslint-plugin-storybook": "0.12.0",
146-
"knip": "5.56.0",
139+
"eslint-plugin-react-compiler": "19.1.0-rc.2",
140+
"eslint-plugin-storybook": "9.0.8",
141+
"knip": "5.60.2",
147142
"next-sitemap": "^4.2.3",
148-
"postcss": "8.5.3",
149-
"storybook": "8.6.14",
143+
"postcss": "8.5.5",
144+
"storybook": "9.0.8",
150145
"tailwindcss": "3.4.17",
151146
"typescript": "5.8.3"
152147
}

apps/dashboard/redirects.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,12 @@ async function redirects() {
368368
destination: "/learn/guides",
369369
permanent: false,
370370
},
371+
// redirect to /grant/superchain to /superchain
372+
{
373+
source: "/grant/superchain",
374+
destination: "/superchain",
375+
permanent: false,
376+
},
371377

372378
...legacyDashboardToTeamRedirects,
373379
];
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
"use server";
2+
import "server-only";
3+
4+
// biome-ignore lint/style/useNodejsImportProtocol: breaks storybook if it's `node:` prefixed
5+
import { randomBytes } from "crypto";
6+
import type { Team } from "@/api/team";
7+
import { format } from "date-fns";
8+
import { getAuthToken } from "../../app/(app)/api/lib/getAuthToken";
9+
import { NEXT_PUBLIC_THIRDWEB_API_HOST } from "../constants/public-envs";
10+
11+
export async function createTeam(options?: {
12+
name?: string;
13+
slug?: string;
14+
}) {
15+
const token = await getAuthToken();
16+
17+
if (!token) {
18+
return {
19+
status: "error",
20+
errorMessage: "You are not authorized to perform this action",
21+
} as const;
22+
}
23+
24+
const res = await fetch(`${NEXT_PUBLIC_THIRDWEB_API_HOST}/v1/teams`, {
25+
method: "POST",
26+
headers: {
27+
Authorization: `Bearer ${token}`,
28+
"Content-Type": "application/json",
29+
},
30+
body: JSON.stringify({
31+
name:
32+
options?.name ?? `Your Projects ${format(new Date(), "MMM d yyyy")}`,
33+
slug: options?.slug ?? randomBytes(20).toString("hex"),
34+
billingEmail: null,
35+
image: null,
36+
}),
37+
});
38+
39+
if (!res.ok) {
40+
const reason = await res.text();
41+
console.error("failed to create team", {
42+
status: res.status,
43+
reason,
44+
});
45+
switch (res.status) {
46+
case 400: {
47+
return {
48+
status: "error",
49+
errorMessage: "Invalid team name or slug.",
50+
} as const;
51+
}
52+
case 401: {
53+
return {
54+
status: "error",
55+
errorMessage: "You are not authorized to perform this action.",
56+
} as const;
57+
}
58+
default: {
59+
return {
60+
status: "error",
61+
errorMessage: "An unknown error occurred.",
62+
} as const;
63+
}
64+
}
65+
}
66+
67+
const json = (await res.json()) as {
68+
result: Team;
69+
};
70+
71+
return {
72+
status: "success",
73+
data: json.result,
74+
} as const;
75+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"use server";
2+
import "server-only";
3+
import { getAuthToken } from "../../app/(app)/api/lib/getAuthToken";
4+
import { NEXT_PUBLIC_THIRDWEB_API_HOST } from "../constants/public-envs";
5+
6+
export async function deleteTeam(options: {
7+
teamId: string;
8+
}) {
9+
const token = await getAuthToken();
10+
if (!token) {
11+
return {
12+
status: "error",
13+
errorMessage: "You are not authorized to perform this action.",
14+
} as const;
15+
}
16+
17+
const res = await fetch(
18+
`${NEXT_PUBLIC_THIRDWEB_API_HOST}/v1/teams/${options.teamId}`,
19+
{
20+
method: "DELETE",
21+
headers: {
22+
Authorization: `Bearer ${token}`,
23+
},
24+
},
25+
);
26+
// handle errors
27+
if (!res.ok) {
28+
const reason = await res.text();
29+
console.error("failed to delete team", {
30+
status: res.status,
31+
reason,
32+
});
33+
switch (res.status) {
34+
case 400: {
35+
return {
36+
status: "error",
37+
errorMessage: "Invalid team ID.",
38+
} as const;
39+
}
40+
case 401: {
41+
return {
42+
status: "error",
43+
errorMessage: "You are not authorized to perform this action.",
44+
} as const;
45+
}
46+
47+
case 403: {
48+
return {
49+
status: "error",
50+
errorMessage: "You do not have permission to delete this team.",
51+
} as const;
52+
}
53+
case 404: {
54+
return {
55+
status: "error",
56+
errorMessage: "Team not found.",
57+
} as const;
58+
}
59+
default: {
60+
return {
61+
status: "error",
62+
errorMessage: "An unknown error occurred.",
63+
} as const;
64+
}
65+
}
66+
}
67+
return {
68+
status: "success",
69+
} as const;
70+
}

0 commit comments

Comments
 (0)