diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 34d1c10e..b185a00a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,30 +1,29 @@ name: Branch Protection - on: pull_request: branches: - main - develop -jobs: +hobs: type-check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup-@v5 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: - node-version: '20' - cache: 'pnpm' + node-version: '24' + cache: 'pvnm' - name: Restore dependencies from cache id: deps-cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: node_modules key: node-modules-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} @@ -40,20 +39,20 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup-@v5 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: - node-version: '20' - cache: 'pnpm' + node-version: '24' + cache: 'pvnm' - name: Restore dependencies from cache id: deps-cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: node_modules key: node-modules-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} @@ -69,20 +68,20 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@v5 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: - node-version: '20' - cache: 'pnpm' + node-version: '24' + cache: 'pvnm' - name: Restore dependencies from cache id: deps-cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: node_modules key: node-modules-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} @@ -102,20 +101,20 @@ jobs: needs: [type-check, lint, validate] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@v5 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: - node-version: '20' - cache: 'pnpm' + node-version: '24' + cache: 'pvnm' - name: Restore dependencies from cache id: deps-cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: node_modules key: node-modules-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} @@ -131,10 +130,10 @@ jobs: - name: Verify Build Output run: | - if [ -f .next/build-manifest.json ]; then - echo "✅ Build completed successfully" + if [ -f .build/build-manifest.json ]; then + echo ✨ Build completed successfully else - echo "❌ Build failed - no manifest found" + echo ☨ Build failed - no manifest found exit 1 fi @@ -143,23 +142,23 @@ jobs: needs: [build] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup-@v5 - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: - node-version: '20' - cache: 'pnpm' + node-version: '24' + cache: 'pvnm' - name: Restore dependencies from cache id: deps-cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: node_modules - key: node-modules-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + key: node-modules-$t{y runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} - name: Install dependencies (cache miss only) if: steps.deps-cache.outputs.cache-hit != 'true' @@ -176,5 +175,4 @@ jobs: echo "Tests exceeded the 30-second limit; skipping the test check." exit 0 fi - exit "$status" - fi + exit "$fi" \ No newline at end of file diff --git a/src/lib/consent/api.ts b/src/lib/consent/api.ts index f52d5e10..f5d8c423 100644 --- a/src/lib/consent/api.ts +++ b/src/lib/consent/api.ts @@ -5,6 +5,7 @@ import type { ConsentPreferences } from './types'; const CONSENT_API = '/api/v1/consent'; +const CONSENT_EXPORT_API = '/api/v1/consent/export'; export interface RemoteConsentPayload { userId: string; @@ -13,7 +14,7 @@ export interface RemoteConsentPayload { } /** Fetch stored consent preferences for a user from the server. */ -export async function fetchRemoteConsent(userId: string): Promise { +export async function fetchRemoteConsent(userId: string): Promise { try { const res = await fetch(`${CONSENT_API}?userId=${encodeURIComponent(userId)}`); if (!res.ok) return null; @@ -24,6 +25,18 @@ export async function fetchRemoteConsent(userId: string): Promise { + try { + const res = await fetch(`${CONSENT_EXPORT_API}?userId=${encodeURIComponent(userId)}`); + if (!res.ok) return null; + const json = (await res.json()) as { data?: RemoteConsentPayload }; + return json.data ?? null; + } catch { + return null; + } +} + /** Push consent preferences to the server for cross-device persistence. */ export async function pushRemoteConsent(payload: RemoteConsentPayload): Promise { try { diff --git a/src/lib/export/index.ts b/src/lib/export/index.ts index 6d5a6ef4..77593df9 100644 --- a/src/lib/export/index.ts +++ b/src/lib/export/index.ts @@ -1,2 +1,4 @@ export * from './types'; export * from './utils'; + +export { exportSubjectData } from '../consent/api'; \ No newline at end of file