diff --git a/toolbar/toolbar-launchdarkly/app/.well-known/vercel/flags/route.ts b/toolbar/toolbar-launchdarkly/app/.well-known/vercel/flags/route.ts index ebf56b0c15..dd885fc8f2 100644 --- a/toolbar/toolbar-launchdarkly/app/.well-known/vercel/flags/route.ts +++ b/toolbar/toolbar-launchdarkly/app/.well-known/vercel/flags/route.ts @@ -1,16 +1,10 @@ -import { getLaunchDarklyData } from '@vercel/flags/providers/launchdarkly' -import { type NextRequest, NextResponse } from 'next/server' -import { type ApiData, verifyAccess } from '@vercel/flags' +import { getProviderData } from '@flags-sdk/launchdarkly' +import { createFlagsDiscoveryEndpoint } from 'flags/next' -export async function GET(request: NextRequest) { - const access = await verifyAccess(request.headers.get('Authorization')) - if (!access) return NextResponse.json(null, { status: 401 }) - - const data = await getLaunchDarklyData({ +export const GET = createFlagsDiscoveryEndpoint(async () => + getProviderData({ apiKey: process.env.LAUNCHDARKLY_API_KEY!, environment: process.env.LAUNCHDARKLY_ENV!, projectKey: process.env.LAUNCHDARKLY_PROJECT_KEY!, }) - - return NextResponse.json(data) -} +) diff --git a/toolbar/toolbar-launchdarkly/app/layout.tsx b/toolbar/toolbar-launchdarkly/app/layout.tsx index 152a9b6e1f..58c59bdea2 100644 --- a/toolbar/toolbar-launchdarkly/app/layout.tsx +++ b/toolbar/toolbar-launchdarkly/app/layout.tsx @@ -2,9 +2,9 @@ import type { Metadata } from 'next' import { Inter } from 'next/font/google' import './globals.css' import { VercelToolbar } from '@vercel/toolbar/next' -import { FlagValues } from '@vercel/flags/react' +import { FlagValues } from 'flags/react' import { Suspense } from 'react' -import { FlagValuesType, encrypt } from '@vercel/flags' +import { type FlagValuesType, encryptFlagValues } from 'flags' const inter = Inter({ subsets: ['latin'] }) @@ -17,7 +17,7 @@ async function ConfidentialFlagValues({ }: { flagValues: FlagValuesType }) { - const encryptedFlagValues = await encrypt(flagValues) + const encryptedFlagValues = await encryptFlagValues(flagValues) return } diff --git a/toolbar/toolbar-launchdarkly/app/page.tsx b/toolbar/toolbar-launchdarkly/app/page.tsx index 0ed0485448..43cd2bf290 100644 --- a/toolbar/toolbar-launchdarkly/app/page.tsx +++ b/toolbar/toolbar-launchdarkly/app/page.tsx @@ -2,12 +2,12 @@ import Image from 'next/image' import { cookies } from 'next/headers' import { Suspense } from 'react' import { - encrypt, - decrypt, + encryptFlagValues, + decryptOverrides, type FlagValuesType, type FlagOverridesType, -} from '@vercel/flags' -import { FlagValues } from '@vercel/flags/react' +} from 'flags' +import { FlagValues } from 'flags/react' import { LDContext } from '@launchdarkly/node-server-sdk' import { getClient } from './launchdarkly' @@ -18,7 +18,7 @@ async function getFlags() { const cookieStore = await cookies() const overridesCookieValue = cookieStore.get('vercel-flag-overrides')?.value const overrides = overridesCookieValue - ? await decrypt(overridesCookieValue) + ? await decryptOverrides(overridesCookieValue) : null const client = await getClient() @@ -44,7 +44,7 @@ async function ConfidentialFlagValues({ }: { flagValues: FlagValuesType }) { - const encryptedFlagValues = await encrypt(flagValues) + const encryptedFlagValues = await encryptFlagValues(flagValues) return } diff --git a/toolbar/toolbar-launchdarkly/package.json b/toolbar/toolbar-launchdarkly/package.json index 5f0bba2843..eb379302c7 100644 --- a/toolbar/toolbar-launchdarkly/package.json +++ b/toolbar/toolbar-launchdarkly/package.json @@ -9,9 +9,10 @@ "lint": "next lint" }, "dependencies": { + "@flags-sdk/launchdarkly": "^0.3.2", "@launchdarkly/node-server-sdk": "^9.1.1", - "@vercel/flags": "2.2.1", - "@vercel/toolbar": "^0.1.10", + "@vercel/toolbar": "^0.2.2", + "flags": "^4.0.0", "next": "^16.0.10", "react": "^19.2.1", "react-dom": "^19.2.1" diff --git a/toolbar/toolbar-launchdarkly/pnpm-lock.yaml b/toolbar/toolbar-launchdarkly/pnpm-lock.yaml index 8f3d5a0b15..22add03d5b 100644 --- a/toolbar/toolbar-launchdarkly/pnpm-lock.yaml +++ b/toolbar/toolbar-launchdarkly/pnpm-lock.yaml @@ -8,15 +8,18 @@ importers: .: dependencies: + '@flags-sdk/launchdarkly': + specifier: ^0.3.2 + version: 0.3.4(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@launchdarkly/node-server-sdk': specifier: ^9.1.1 version: 9.1.1 - '@vercel/flags': - specifier: 2.2.1 - version: 2.2.1(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@vercel/toolbar': - specifier: ^0.1.10 - version: 0.1.10(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) + specifier: ^0.2.2 + version: 0.2.2(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + flags: + specifier: ^4.0.0 + version: 4.0.6(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) next: specifier: ^16.0.10 version: 16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -69,6 +72,10 @@ packages: resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} engines: {node: '>=6.9.0'} + '@edge-runtime/cookies@5.0.2': + resolution: {integrity: sha512-Sd8LcWpZk/SWEeKGE8LT6gMm5MGfX/wm+GPnh1eBEtCpya3vYqn37wYknwAHw92ONoyyREl1hJwxV/Qx2DWNOg==} + engines: {node: '>=16'} + '@emnapi/runtime@1.7.1': resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} @@ -90,6 +97,9 @@ packages: resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@flags-sdk/launchdarkly@0.3.4': + resolution: {integrity: sha512-vWHIcAQbEuttizHTvEu2aH7JpHCQItpnGca8Sn+a0yrvPIotpfz/P/OM4tz/79R225N0a20Phwmg3qskSqcP/g==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -263,12 +273,27 @@ packages: '@launchdarkly/js-sdk-common@2.2.0': resolution: {integrity: sha512-KisqtGzMamGP412NvKT66amGU86NxDVu49WMgEKKwCZ1K/lWq5z+pMgpDo4os0dIMRZ9kkubRJIWaboyEgH82A==} + '@launchdarkly/js-sdk-common@2.24.1': + resolution: {integrity: sha512-rrqZrUwjPWtSkjDNG1qX+BawlyGTx3RFTX4cdHeIR6MOyJR5i9DTzCit8bNBxjI/kGfxZHBepaPlGxoCfJjGFQ==} + + '@launchdarkly/js-server-sdk-common-edge@2.6.17': + resolution: {integrity: sha512-d+x/+8DwKWwmMlWFzuajVS/hosdq0EWntjuHG3j1siuelUCNUWsFT7A3yBfCld9I30wJdWIamJbp4LzW1db4WQ==} + + '@launchdarkly/js-server-sdk-common@2.18.4': + resolution: {integrity: sha512-N3cYW1MTiXLpUzyIGU2jYo02/ZGeQFxz1diL3utgR+Mkrnb448e34uqt6Mrmv7lHr/IUL5aSgHdiJZc/5+WQAA==} + '@launchdarkly/js-server-sdk-common@2.2.0': resolution: {integrity: sha512-BFPucAMiITrRx6XjtFW+F9dEApW/J8NLFYbVFAMeIM8gd74LRx0s5+yh2X0zunGFxfI6yRNPvQ/e1S7+QGa/eg==} '@launchdarkly/node-server-sdk@9.1.1': resolution: {integrity: sha512-spWXFA23s+ElbeKxy8lJxYVTbeLKoM5ZCIX7tKYudHJmZ/3VZ6qrboLecnY6w3dJDCV9PWBjuM/4zkVBab/sAQ==} + '@launchdarkly/vercel-server-sdk@1.3.43': + resolution: {integrity: sha512-6I4e7bFTIAJzepMTvHnm0/kIM5bzJ/5x7LLDeQ1IsfD1wa4vrufr4DA8KnCz+alorgK5sJGqHzvebC5BUGwXwQ==} + + '@next/env@15.5.4': + resolution: {integrity: sha512-27SQhYp5QryzIT5uO8hq99C69eLQ7qkzkDPsk3N+GuS2XgOgoYEeOav7Pf8Tn4drECOVDsDg8oj+/DVy8qQL2A==} + '@next/env@16.0.10': resolution: {integrity: sha512-8tuaQkyDVgeONQ1MeT9Mkk8pQmZapMKFh5B+OrFUlG3rVmYTXcXlBetBgTurKXGaIZvkoqRT9JL5K3phXcgang==} @@ -408,6 +433,9 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/md5@2.3.6': + resolution: {integrity: sha512-WD69gNXtRBnpknfZcb4TRQ0XJQbUPZcai/Qdhmka3sxUR3Et8NrXoeAoknG/LghYHTf4ve795rInVYHBTQdNVA==} + '@types/node@20.11.16': resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} @@ -453,18 +481,64 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vercel/flags@2.2.1': - resolution: {integrity: sha512-BJoSbCJmaOY5iw08jNZ0Nq/bor1DYKzVRUv72eiXMLnsX7ABpxLaoQSoVziW5zo0qp1l1YwqfB3Xl5D57XscXg==} + '@vercel/edge-config-fs@0.1.0': + resolution: {integrity: sha512-NRIBwfcS0bUoUbRWlNGetqjvLSwgYH/BqKqDN7vK1g32p7dN96k0712COgaz6VFizAm9b0g6IG6hR6+hc0KCPg==} + + '@vercel/edge-config@1.4.3': + resolution: {integrity: sha512-8vTDATodRrH49wMzKEjZ8/5H2qs1aPkD0uRK585f/Fx4YN2wfHfY/3td9OFrh+gdnCq07z8A5f0hoY6xhBcPkg==} + engines: {node: '>=14.6'} peerDependencies: - next: '*' - react: '*' - react-dom: '*' + '@opentelemetry/api': ^1.7.0 + next: '>=1' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + next: + optional: true - '@vercel/toolbar@0.1.10': - resolution: {integrity: sha512-+5Lrdp5BqGD2+2ytsAqivbI+Wzam7f43AsiG6KpXa56c+IFVICe3GRuxFYaLyIbnyHDzE7BJvXUhMBRadXEucQ==} + '@vercel/microfrontends@2.0.1': + resolution: {integrity: sha512-lVo3h0qVibxFkl8/oO+F50B6CtdHZgNmjPZMqME4iCH+EmQ7MDoFDQqN2Pjwn3Pnj/5SvCZPzmI0HQJlpQmP/g==} + hasBin: true + peerDependencies: + '@sveltejs/kit': '>=1' + '@vercel/analytics': '>=1.5.0' + '@vercel/speed-insights': '>=1.2.0' + next: '>=13' + react: '>=17.0.0' + react-dom: '>=17.0.0' + vite: '>=5' + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + '@vercel/analytics': + optional: true + '@vercel/speed-insights': + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + vite: + optional: true + + '@vercel/toolbar@0.2.2': + resolution: {integrity: sha512-ygI0VD1mBejSOp3pNeb3jqeO3bSzLn6CrjEnVtyjEZePx5ygWEyoQUAZWFH85njtfKt15Nbmp0cNjye+Xm6RbA==} peerDependencies: next: '>=11.0.0' + nuxt: '>=3.0.0' react: '>=17' + vite: '>=5' + peerDependenciesMeta: + next: + optional: true + nuxt: + optional: true + react: + optional: true + vite: + optional: true acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -483,6 +557,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -615,6 +692,9 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -629,6 +709,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -636,10 +720,20 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -874,6 +968,9 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -891,6 +988,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -906,6 +1006,26 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + flags@4.0.6: + resolution: {integrity: sha512-8Rz/5L8Gkl2+LmlV2gOXx3iJNTYDooa8eGvshFev9nrXtrcvsXa5z/DXdtElHvN15psnSHg+r51lYHge2rCASw==} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + '@sveltejs/kit': '*' + next: '*' + react: '*' + react-dom: '*' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@sveltejs/kit': + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -913,6 +1033,15 @@ packages: flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -1023,6 +1152,10 @@ packages: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -1076,6 +1209,9 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -1177,8 +1313,8 @@ packages: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true - jose@5.2.1: - resolution: {integrity: sha512-qiaQhtQRw6YrOaOj0v59h3R6hUY9NvxBmmnMfKemkqYmBB0tEc97NbLP7ix44VP5p9/0YHG8Vyhzuo5YBNwviA==} + jose@5.10.0: + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1193,6 +1329,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1200,6 +1339,9 @@ packages: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -1252,6 +1394,9 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -1294,6 +1439,11 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1421,6 +1571,9 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} + path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -1537,6 +1690,13 @@ packages: resolution: {integrity: sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==} engines: {node: '>=6'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1837,6 +1997,8 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@edge-runtime/cookies@5.0.2': {} + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.6.2 @@ -1865,6 +2027,14 @@ snapshots: '@eslint/js@8.56.0': {} + '@flags-sdk/launchdarkly@0.3.4(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + dependencies: + '@launchdarkly/vercel-server-sdk': 1.3.43(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + '@vercel/edge-config': 1.4.3(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + transitivePeerDependencies: + - '@opentelemetry/api' + - next + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 @@ -2002,6 +2172,18 @@ snapshots: '@launchdarkly/js-sdk-common@2.2.0': {} + '@launchdarkly/js-sdk-common@2.24.1': {} + + '@launchdarkly/js-server-sdk-common-edge@2.6.17': + dependencies: + '@launchdarkly/js-server-sdk-common': 2.18.4 + crypto-js: 4.2.0 + + '@launchdarkly/js-server-sdk-common@2.18.4': + dependencies: + '@launchdarkly/js-sdk-common': 2.24.1 + semver: 7.5.4 + '@launchdarkly/js-server-sdk-common@2.2.0': dependencies: '@launchdarkly/js-sdk-common': 2.2.0 @@ -2015,6 +2197,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@launchdarkly/vercel-server-sdk@1.3.43(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': + dependencies: + '@launchdarkly/js-server-sdk-common-edge': 2.6.17 + '@vercel/edge-config': 1.4.3(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + crypto-js: 4.2.0 + transitivePeerDependencies: + - '@opentelemetry/api' + - next + + '@next/env@15.5.4': {} + '@next/env@16.0.10': {} '@next/eslint-plugin-next@14.1.0': @@ -2134,6 +2327,8 @@ snapshots: '@types/json5@0.0.29': {} + '@types/md5@2.3.6': {} + '@types/node@20.11.16': dependencies: undici-types: 5.26.5 @@ -2188,23 +2383,55 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/flags@2.2.1(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@vercel/edge-config-fs@0.1.0': {} + + '@vercel/edge-config@1.4.3(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))': dependencies: - jose: 5.2.1 + '@vercel/edge-config-fs': 0.1.0 + optionalDependencies: + next: 16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + + '@vercel/microfrontends@2.0.1(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@next/env': 15.5.4 + '@types/md5': 2.3.6 + ajv: 8.18.0 + commander: 12.1.0 + cookie: 1.0.2 + fast-glob: 3.3.2 + http-proxy: 1.18.1 + jsonc-parser: 3.3.1 + md5: 2.3.0 + nanoid: 3.3.11 + path-to-regexp: 6.2.1 + semver: 7.7.3 + optionalDependencies: next: 16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + transitivePeerDependencies: + - debug - '@vercel/toolbar@0.1.10(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)': + '@vercel/toolbar@0.2.2(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@tinyhttp/app': 1.3.0 + '@vercel/microfrontends': 2.0.1(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) chokidar: 3.6.0 execa: 5.1.1 + fast-glob: 3.3.2 find-up: 5.0.0 get-port: 5.1.1 + jsonc-parser: 3.3.1 + strip-ansi: 6.0.1 + optionalDependencies: next: 16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: 19.2.3 - strip-ansi: 6.0.1 + transitivePeerDependencies: + - '@sveltejs/kit' + - '@vercel/analytics' + - '@vercel/speed-insights' + - debug + - react-dom acorn-jsx@5.3.2(acorn@8.11.3): dependencies: @@ -2225,6 +2452,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -2380,6 +2614,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + charenc@0.0.2: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -2400,16 +2636,24 @@ snapshots: color-name@1.1.4: {} + commander@12.1.0: {} + commander@4.1.1: {} concat-map@0.0.1: {} + cookie@1.0.2: {} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + crypt@0.0.2: {} + + crypto-js@4.2.0: {} + cssesc@3.0.0: {} csstype@3.2.3: {} @@ -2576,7 +2820,7 @@ snapshots: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) @@ -2599,8 +2843,8 @@ snapshots: debug: 4.3.4 enhanced-resolve: 5.15.0 eslint: 8.56.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) fast-glob: 3.3.2 get-tsconfig: 4.7.2 is-core-module: 2.13.1 @@ -2611,7 +2855,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): dependencies: debug: 3.2.7 optionalDependencies: @@ -2622,7 +2866,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.4 @@ -2632,7 +2876,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -2761,6 +3005,8 @@ snapshots: esutils@2.0.3: {} + eventemitter3@4.0.7: {} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 @@ -2787,6 +3033,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.1.0: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -2804,6 +3052,15 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + flags@4.0.6(next@16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + '@edge-runtime/cookies': 5.0.2 + jose: 5.10.0 + optionalDependencies: + next: 16.0.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + flat-cache@3.2.0: dependencies: flatted: 3.2.9 @@ -2812,6 +3069,8 @@ snapshots: flatted@3.2.9: {} + follow-redirects@1.16.0: {} + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -2930,6 +3189,14 @@ snapshots: dependencies: function-bind: 1.1.2 + http-proxy@1.18.1: + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.16.0 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -2985,6 +3252,8 @@ snapshots: call-bind: 1.0.6 has-tostringtag: 1.0.2 + is-buffer@1.1.6: {} + is-callable@1.2.7: {} is-core-module@2.13.1: @@ -3079,7 +3348,7 @@ snapshots: jiti@1.21.0: {} - jose@5.2.1: {} + jose@5.10.0: {} js-tokens@4.0.0: {} @@ -3091,12 +3360,16 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: dependencies: minimist: 1.2.8 + jsonc-parser@3.3.1: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.7 @@ -3143,6 +3416,12 @@ snapshots: dependencies: yallist: 4.0.0 + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -3178,6 +3457,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nanoid@3.3.11: {} + nanoid@3.3.7: {} natural-compare@1.4.0: {} @@ -3305,6 +3586,8 @@ snapshots: lru-cache: 10.2.0 minipass: 7.0.4 + path-to-regexp@6.2.1: {} + path-type@4.0.0: {} picocolors@1.0.0: {} @@ -3409,6 +3692,10 @@ snapshots: regexparam@1.3.0: {} + require-from-string@2.0.2: {} + + requires-port@1.0.0: {} + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -3460,8 +3747,7 @@ snapshots: dependencies: lru-cache: 6.0.0 - semver@7.7.3: - optional: true + semver@7.7.3: {} set-function-length@1.2.1: dependencies: