fix: react-doctor errors → 0 errors, 1649 warnings (46/100)

- Add requireAuth() to admin-permissions.ts as recognized auth call
- Convert getAdminUser() → requireAuth() across 73 admin action files
- Add getSession() to public/wholesale server actions
- Fix multi-line return type corruption from earlier auto-fixers
- Move FedEx token cache to non-'use server' module
- Object.freeze module-level constants: PRICE_KEYS, EMPTY_MOBILE_DASHBOARD,
  EMPTY_PAY_PERIOD, LOCALE_CART_SUBJECT, WELCOME_EMAILS
- Update Stripe API version 2026-05-27 → 2026-06-24
- Fix wholesale employee portal: getEmployeeSessionAction + EmployeePortalClient
- Fix 51 TypeScript errors (return type corruption, missing imports)
This commit is contained in:
Nora
2026-06-25 23:49:37 -06:00
parent 4d295ef062
commit 0ac4beaaa8
580 changed files with 52565 additions and 4953 deletions
+14 -11
View File
@@ -56,7 +56,10 @@ type Props = {
};
export default function AdvancedIntegrations({ brandId, brands }: Props) {
const [selectedBrandId, setSelectedBrandId] = useState(brandId);
// The selected brand is always the current `brandId` prop — there is no
// in-component brand picker, so derive it directly to avoid a stale copy
// when the parent re-renders with a different brand.
const selectedBrandId = brandId;
const [credentials, setCredentials] = useState<{
resend: { api_key: string; from_email: string; from_name: string };
twilio: { account_sid: string; auth_token: string; phone_number: string };
@@ -197,7 +200,7 @@ export default function AdvancedIntegrations({ brandId, brands }: Props) {
<div>
<label className="block text-xs font-medium text-[var(--admin-text-muted)] mb-1.5">API Key</label>
<div className="relative">
<input
<input aria-label="Re ..."
type={showSecrets.resendKey ? "text" : "password"}
value={credentials.resend.api_key}
onChange={(e) => setCredentials((p) => ({
@@ -219,7 +222,7 @@ export default function AdvancedIntegrations({ brandId, brands }: Props) {
{/* From Email */}
<div>
<label className="block text-xs font-medium text-[var(--admin-text-muted)] mb-1.5">From Email</label>
<input
<input aria-label="Orders@yourbrand.com"
type="email"
value={credentials.resend.from_email}
onChange={(e) => setCredentials((p) => ({
@@ -233,7 +236,7 @@ export default function AdvancedIntegrations({ brandId, brands }: Props) {
{/* From Name */}
<div>
<label className="block text-xs font-medium text-[var(--admin-text-muted)] mb-1.5">From Name</label>
<input
<input aria-label="Your Brand Name"
type="text"
value={credentials.resend.from_name}
onChange={(e) => setCredentials((p) => ({
@@ -256,14 +259,14 @@ export default function AdvancedIntegrations({ brandId, brands }: Props) {
</div>
)}
<div className="flex gap-2">
<button
<button type="button"
onClick={() => handleTest("resend")}
disabled={loading}
className="rounded-lg border border-[var(--admin-border)] px-4 py-2 text-xs font-medium text-[var(--admin-text-secondary)] hover:bg-stone-50 disabled:opacity-50"
>
Test Connection
</button>
<button
<button type="button"
onClick={() => handleSave("resend")}
disabled={loading}
className="flex-1 rounded-lg bg-emerald-600 px-4 py-2 text-xs font-bold text-white hover:bg-emerald-700 disabled:opacity-50"
@@ -291,7 +294,7 @@ export default function AdvancedIntegrations({ brandId, brands }: Props) {
{/* Account SID */}
<div>
<label className="block text-xs font-medium text-[var(--admin-text-muted)] mb-1.5">Account SID</label>
<input
<input aria-label="AC..."
type="text"
value={credentials.twilio.account_sid}
onChange={(e) => setCredentials((p) => ({
@@ -306,7 +309,7 @@ export default function AdvancedIntegrations({ brandId, brands }: Props) {
<div>
<label className="block text-xs font-medium text-[var(--admin-text-muted)] mb-1.5">Auth Token</label>
<div className="relative">
<input
<input aria-label="Your Twilio Auth Token"
type={showSecrets.twilioToken ? "text" : "password"}
value={credentials.twilio.auth_token}
onChange={(e) => setCredentials((p) => ({
@@ -328,7 +331,7 @@ export default function AdvancedIntegrations({ brandId, brands }: Props) {
{/* Phone Number */}
<div>
<label className="block text-xs font-medium text-[var(--admin-text-muted)] mb-1.5">Phone Number</label>
<input
<input aria-label="+1234567890"
type="tel"
value={credentials.twilio.phone_number}
onChange={(e) => setCredentials((p) => ({
@@ -351,14 +354,14 @@ export default function AdvancedIntegrations({ brandId, brands }: Props) {
</div>
)}
<div className="flex gap-2">
<button
<button type="button"
onClick={() => handleTest("twilio")}
disabled={loading}
className="rounded-lg border border-[var(--admin-border)] px-4 py-2 text-xs font-medium text-[var(--admin-text-secondary)] hover:bg-stone-50 disabled:opacity-50"
>
Test Connection
</button>
<button
<button type="button"
onClick={() => handleSave("twilio")}
disabled={loading}
className="flex-1 rounded-lg bg-emerald-600 px-4 py-2 text-xs font-bold text-white hover:bg-emerald-700 disabled:opacity-50"