diff --git a/.github/workflows/quality-gate.yml b/.github/workflows/quality-gate.yml index 7016bbca..f2aede76 100644 --- a/.github/workflows/quality-gate.yml +++ b/.github/workflows/quality-gate.yml @@ -25,6 +25,7 @@ env: VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_SUPABASE_ANON_KEY }} REGISTRY: ghcr.io IMAGE_NAME: pezkuwichain/pwap-web + BACKEND_IMAGE_NAME: pezkuwichain/pwap-indexer jobs: # ======================================== @@ -58,12 +59,20 @@ jobs: - name: Install dependencies working-directory: ./web - run: npm install + run: npm ci - name: Run Linter working-directory: ./web run: npm run lint + # Typecheck gate. Currently non-blocking (continue-on-error) because the + # existing codebase still has pre-existing type errors. Once the count + # reaches zero, remove `continue-on-error` to make this a hard merge block. + - name: Typecheck + working-directory: ./web + continue-on-error: true + run: npm run typecheck + - name: Run Tests working-directory: ./web run: npm run test @@ -85,6 +94,57 @@ jobs: name: web-dist path: web/dist/ + # ======================================== + # BACKEND - INDEXER SERVICE (lint/smoke/audit) + # No build step exists (plain ESM node service); we lockfile-enforce install, + # syntax-check the entry point, and audit. The audit is currently non-blocking + # because the express@5 + sqlite3(node-gyp) trees carry transitive advisories + # that need a broader dependency upgrade; flip continue-on-error off once the + # tree is clean. + # ======================================== + backend: + name: Backend Indexer + runs-on: pwap-runner + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Cache npm dependencies + uses: actions/cache@v4 + with: + path: backend/node_modules + key: ${{ runner.os }}-backend-${{ hashFiles('backend/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-backend- + + - name: Install dependencies + working-directory: ./backend + run: npm ci + + - name: Syntax check (entry point) + working-directory: ./backend + run: node --check src/index.js + + # Real, offline test suite (node:test). Uses in-memory sqlite and a + # mocked chain/Supabase — NO live node, NO network. The integration-tests/ + # *.live.test.js suites are intentionally EXCLUDED (they require a live + # chain + Supabase and are not run in CI); the `test` script scopes to + # test/*.test.js only. + - name: Run tests (offline) + working-directory: ./backend + run: npm test + + - name: npm audit (high + critical, production deps) + working-directory: ./backend + continue-on-error: true + run: npm audit --audit-level=high --omit=dev + # ======================================== # BUILD & PUSH DOCKER IMAGE TO GHCR # Immutable artifact for audit + rollback (vs ephemeral GHA artifact). @@ -166,6 +226,77 @@ jobs: cosign sign --yes "$IMAGE_DIGEST" echo "✅ Image signed (transparency log: rekor.sigstore.dev)" + # ======================================== + # BUILD & PUSH BACKEND (INDEXER) IMAGE TO GHCR + # Runnable Node service image (vs the web static-dist image). SHA-tagged + + # cosign-signed for the same audit/rollback discipline as the web image. + # Gated to main/tags, never fork PRs (needs packages:write + the telegram gate). + # ======================================== + build-image-backend: + name: Build & Push Backend Image + runs-on: pwap-runner + needs: [backend, telegram-gate] + if: | + (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && + (github.event_name == 'push' || + (github.event_name == 'workflow_dispatch' && github.event.inputs.rollback_to == '')) + permissions: + contents: read + packages: write + id-token: write # cosign keyless signing via Sigstore OIDC + outputs: + image_sha: ${{ steps.meta.outputs.image_sha }} + image_digest: ${{ steps.build.outputs.digest }} + + steps: + - uses: actions/checkout@v4 + + - uses: docker/setup-buildx-action@v3 + + - name: Install cosign + uses: sigstore/cosign-installer@v3 + with: + cosign-release: 'v2.4.1' + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract image metadata + id: meta + run: | + SHORT_SHA="${GITHUB_SHA:0:7}" + echo "short_sha=$SHORT_SHA" >> $GITHUB_OUTPUT + echo "image_sha=$SHORT_SHA" >> $GITHUB_OUTPUT + echo "image=${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE_NAME }}" >> $GITHUB_OUTPUT + + - name: Build and push + id: build + uses: docker/build-push-action@v6 + with: + context: ./backend + file: ./backend/Dockerfile + push: true + tags: | + ${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.short_sha }} + ${{ steps.meta.outputs.image }}:latest + cache-from: type=registry,ref=${{ steps.meta.outputs.image }}:cache + cache-to: type=registry,ref=${{ steps.meta.outputs.image }}:cache,mode=max + provenance: false + + - name: Sign image with cosign (keyless, Sigstore Fulcio) + env: + COSIGN_EXPERIMENTAL: '1' + run: | + IMAGE_DIGEST="${{ steps.meta.outputs.image }}@${{ steps.build.outputs.digest }}" + echo "${{ secrets.GITHUB_TOKEN }}" | cosign login ghcr.io -u "${{ github.actor }}" --password-stdin + echo "Signing $IMAGE_DIGEST" + cosign sign --yes "$IMAGE_DIGEST" + echo "✅ Backend image signed (transparency log: rekor.sigstore.dev)" + # ======================================== # TELEGRAM CEO APPROVAL GATE # Runs on self-hosted pwap-runner (DEV VPS) where pexsec-bot.service @@ -608,6 +739,275 @@ jobs: curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \ -d "chat_id=${CEO_CHAT_ID}" --data-urlencode "text=$MSG" + # ======================================== + # DEPLOY BACKEND (INDEXER) TO ITS HOST + # Runs a container from the SHA-tagged GHCR image on the backend VPS. + # Same discipline as the web deploy: cosign verify → deploy → health check → + # auto-rollback to previous SHA → Telegram notify. Gated behind the SAME + # telegram-gate approval as the web deploy. Only main/tags, never fork PRs. + # + # STATEFUL DB: the sqlite file lives in the named docker volume + # `pwap-indexer-db` (mounted at /data). Deploy replaces the container/image + # but NEVER the volume — indexer state survives every deploy and rollback. + # + # Host param via secret BACKEND_VPS_HOST (no hardcoded IP). If the backend + # shares the web DEV VPS, set BACKEND_VPS_HOST = VPS_HOST (see backend/DEPLOY.md). + # ======================================== + deploy-backend: + name: Deploy Backend (indexer) + runs-on: pwap-runner + needs: [telegram-gate, build-image-backend] + if: | + always() && + (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')) && + needs.telegram-gate.result == 'success' && + ((github.event_name == 'push' && needs.build-image-backend.result == 'success') || + (github.event_name == 'workflow_dispatch' && github.event.inputs.rollback_to != '')) + permissions: + contents: read + packages: read + + steps: + - name: Determine image SHA + id: sha + run: | + if [ -n "${{ github.event.inputs.rollback_to }}" ]; then + echo "sha=${{ github.event.inputs.rollback_to }}" >> $GITHUB_OUTPUT + echo "Rolling back backend to: ${{ github.event.inputs.rollback_to }}" + else + echo "sha=${{ needs.build-image-backend.outputs.image_sha }}" >> $GITHUB_OUTPUT + fi + + - name: Install cosign (for verify) + uses: sigstore/cosign-installer@v3 + with: + cosign-release: 'v2.4.1' + + - name: Log in to GHCR (runner-side, for verify) + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Verify image signature (cosign keyless) + env: + COSIGN_EXPERIMENTAL: '1' + run: | + IMAGE="${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE_NAME }}:${{ steps.sha.outputs.sha }}" + echo "${{ secrets.GITHUB_TOKEN }}" | cosign login ghcr.io -u "${{ github.actor }}" --password-stdin + echo "Verifying signature for $IMAGE" + cosign verify "$IMAGE" \ + --certificate-identity-regexp "^https://github.com/pezkuwichain/pwap/.github/workflows/quality-gate.yml@" \ + --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \ + > /dev/null + echo "✅ Signature valid — backend image was built by trusted CI" + + - name: Deploy container to backend host (health-checked, auto-rollback) + id: deploy + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.BACKEND_VPS_HOST }} + username: ${{ secrets.BACKEND_VPS_USER }} + key: ${{ secrets.BACKEND_VPS_SSH_KEY }} + port: ${{ secrets.BACKEND_VPS_SSH_PORT || 22 }} + envs: IMAGE_REF,NEW_SHA,GHCR_USER,GHCR_TOKEN + command_timeout: 10m + script_stop: true + script: | + set -e + REGISTRY_IMAGE="ghcr.io/pezkuwichain/pwap-indexer" + IMAGE="$REGISTRY_IMAGE:$NEW_SHA" + STATE_DIR="/opt/pwap-indexer" + NAME="pwap-indexer" + mkdir -p "$STATE_DIR" + PREV="$(cat "$STATE_DIR/.deploy-sha" 2>/dev/null || echo "")" + echo "Deploying $IMAGE (previous: ${PREV:-none})" + + echo "$GHCR_TOKEN" | docker login ghcr.io -u "$GHCR_USER" --password-stdin + docker pull "$IMAGE" + + run_container () { + local img="$1" + docker rm -f "$NAME" >/dev/null 2>&1 || true + # Named volume pwap-indexer-db = stateful sqlite DB. NEVER removed + # by this script — it is created on first run and reused forever. + docker run -d --name "$NAME" --restart unless-stopped \ + -p 3001:3001 \ + -v pwap-indexer-db:/data \ + -e DB_PATH=/data/transactions.db \ + -e PORT=3001 \ + --env-file "$STATE_DIR/.env" \ + "$img" + } + + healthy () { + for i in $(seq 1 12); do + if curl -fsS --max-time 5 "http://localhost:3001/health" >/dev/null 2>&1; then + return 0 + fi + echo "health attempt $i/12 failed, retry in 5s..." + sleep 5 + done + return 1 + } + + run_container "$IMAGE" + if healthy; then + echo "$NEW_SHA" > "$STATE_DIR/.deploy-sha" + echo "✅ Backend healthy on $NEW_SHA" + docker image prune -f >/dev/null 2>&1 || true + exit 0 + fi + + echo "❌ Health check failed for $NEW_SHA" + if [ -n "$PREV" ]; then + echo "🔄 Rolling back to $PREV" + docker pull "$REGISTRY_IMAGE:$PREV" + run_container "$REGISTRY_IMAGE:$PREV" + if healthy; then + echo "$PREV" > "$STATE_DIR/.deploy-sha" + echo "✅ Rolled back to $PREV — backend healthy" + exit 1 # still fail the job: the new SHA did not deploy + fi + echo "🚨 Rollback to $PREV ALSO failed" + exit 1 + fi + echo "No previous SHA to roll back to." + exit 1 + env: + IMAGE_REF: ${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE_NAME }}:${{ steps.sha.outputs.sha }} + NEW_SHA: ${{ steps.sha.outputs.sha }} + GHCR_USER: ${{ github.actor }} + GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Post-deploy notification + if: success() + run: echo "✅ Deployed backend image ${{ steps.sha.outputs.sha }} to backend host" + + - name: Notify failure (Telegram) + if: failure() + env: + BOT_TOKEN: ${{ secrets.PEXSEC_BOT_TOKEN }} + CEO_CHAT_ID: ${{ secrets.TELEGRAM_CEO_CHAT_ID }} + NEW_SHA: ${{ steps.sha.outputs.sha }} + run: | + MSG="❌ pwap/backend indexer: deploy ($NEW_SHA) failed. If a previous SHA existed the host auto-rolled-back to it (DB volume untouched). Manual: gh workflow run quality-gate.yml -f rollback_to=" + curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \ + -d "chat_id=${CEO_CHAT_ID}" --data-urlencode "text=$MSG" + + # ======================================== + # DEPLOY - SUPABASE (edge functions + migrations) + # Same Telegram-gated cutover as the frontend/backend: syncs the edge functions + # into the self-hosted edge-runtime volume (hot-reloaded, no restart) and applies + # any un-recorded migrations transactionally against the fund-custody Postgres. + # Runs in parallel with deploy-app so functions, migrations and the new frontend + # go live in the same post-approval window (minimal fail-closed gap). + # ======================================== + deploy-supabase: + name: Deploy Supabase (functions + migrations) + runs-on: pwap-runner + needs: [telegram-gate] + if: | + always() && + needs.telegram-gate.result == 'success' && + github.event_name == 'push' && github.ref == 'refs/heads/main' + permissions: + contents: read + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Pack supabase tree + run: | + # __tests__ are Deno tests — kept out of the runtime bundle entirely. + tar czf supabase-deploy.tgz -C web/supabase \ + --exclude='__tests__' functions migrations deploy + + - name: Upload bundle to staging + uses: appleboy/scp-action@v1.0.0 + with: + host: ${{ secrets.SUPABASE_VPS_HOST }} + username: ${{ secrets.SUPABASE_VPS_USER }} + key: ${{ secrets.SUPABASE_VPS_SSH_KEY }} + port: ${{ secrets.SUPABASE_VPS_SSH_PORT || 22 }} + source: "supabase-deploy.tgz" + target: /opt/supabase-self-hosted/deploy-staging + + - name: Sync edge functions + apply migrations (health-checked) + id: apply + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.SUPABASE_VPS_HOST }} + username: ${{ secrets.SUPABASE_VPS_USER }} + key: ${{ secrets.SUPABASE_VPS_SSH_KEY }} + port: ${{ secrets.SUPABASE_VPS_SSH_PORT || 22 }} + command_timeout: 15m + script: | + set -euo pipefail + BASE=/opt/supabase-self-hosted/deploy-staging + STAGING="$BASE/tree" + VOL=/opt/supabase-self-hosted/docker/volumes/functions + DB=supabase-db + + echo "── 0. Unpack bundle ──" + rm -rf "$STAGING" && mkdir -p "$STAGING" + tar xzf "$BASE/supabase-deploy.tgz" -C "$STAGING" + + echo "── 1. Sync edge functions (additive, no --delete: telegram-* preserved) ──" + # __tests__ are Deno test dirs — never ship them into the runtime volume. + rsync -a --exclude='__tests__' "$STAGING/functions/" "$VOL/" + echo " synced: $(ls "$STAGING/functions" | grep -v __tests__ | tr '\n' ' ')" + + echo "── 2. Pre-flight: required edge-runtime secrets ──" + EF_ENV="$(docker exec supabase-edge-functions env 2>/dev/null || true)" + miss="" + for k in SUPABASE_URL SUPABASE_SERVICE_ROLE_KEY PLATFORM_PRIVATE_KEY; do + grep -q "^$k=" <<<"$EF_ENV" || miss="$miss $k" + done + if [ -n "$miss" ]; then + echo "::warning::edge-runtime missing secrets:$miss (fund functions may fail until set)" + fi + + echo "── 3. Apply pending migrations (transactional, tracked) ──" + bash "$STAGING/deploy/apply-migrations.sh" "$STAGING/migrations" "$DB" + + echo "── 4. Verify the fund-custody guards actually took effect ──" + q() { docker exec -i "$DB" psql -U postgres -tAq -c "$1"; } + fail=0 + for fn in "release_escrow_internal" "lock_escrow_internal" "refund_escrow_internal" "request_withdraw"; do + # any signature match; expect NO anon EXECUTE + oid="$(q "SELECT oid FROM pg_proc WHERE proname='$fn' LIMIT 1;")" + if [ -n "$oid" ]; then + priv="$(q "SELECT has_function_privilege('anon', $oid, 'EXECUTE');")" + echo " anon EXECUTE $fn = $priv" + [ "$priv" = "f" ] || { echo "::error::anon still has EXECUTE on $fn"; fail=1; } + fi + done + trg="$(q "SELECT tgname FROM pg_trigger WHERE tgname IN ('trg_freeze_trade_financials','trg_freeze_offer_financials');")" + n_trg="$(printf '%s' "$trg" | grep -c . || true)" + echo " freeze triggers present: ${trg:-} (count=$n_trg)" + [ "$n_trg" = "2" ] || { echo "::error::trade/offer freeze triggers missing (expected 2, got $n_trg)"; fail=1; } + + rm -rf "$BASE" + [ "$fail" = "0" ] && echo "✅ Supabase deploy verified" || { echo "❌ post-deploy verification failed"; exit 1; } + + - name: Telegram notify + if: always() + env: + BOT_TOKEN: ${{ secrets.PEXSEC_BOT_TOKEN }} + CEO_CHAT_ID: ${{ secrets.TELEGRAM_CEO_CHAT_ID }} + OUTCOME: ${{ steps.apply.outcome }} + run: | + if [ "$OUTCOME" = "success" ]; then + MSG="✅ pwap Supabase: edge functions synced + migrations applied & verified (${{ github.sha }})." + else + MSG="🚨 pwap Supabase deploy FAILED (${{ github.sha }}) — functions/migrations may be partially applied. Check the run." + fi + curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \ + -d chat_id="${CEO_CHAT_ID}" -d text="$MSG" >/dev/null || true + # ======================================== # SECURITY CHECKS (BLOCKING) # npm audit (high + critical) + TruffleHog secret scan @@ -631,7 +1031,7 @@ jobs: - name: Web — npm audit (high + critical, production deps only) working-directory: ./web run: | - npm install + npm ci # Audit only production dependencies. Build tooling (vite, esbuild, # vite-plugin-node-polyfills → elliptic, etc.) ships to no user, and # advisories on those dev deps kept blocking production deploys. @@ -660,7 +1060,7 @@ jobs: ci-gate: name: CI Gate ✅ runs-on: pwap-runner - needs: [web, security-audit] + needs: [web, backend, security-audit] if: always() steps: diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 00000000..a69296fc --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,16 @@ +node_modules +npm-debug.log +# Never bake stateful DB or secrets into the image +transactions.db +*.db +.env +.env.* +!.env.example +# Tests + docs are not needed at runtime +test +integration-tests +jest.config.js +.eslintrc.cjs +*.md +.git +.github diff --git a/backend/.env.example b/backend/.env.example index f938dd44..974ce6f3 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,9 +1,22 @@ -# PezkuwiChain WebSocket Endpoint -WS_ENDPOINT=wss://ws.pezkuwichain.io - -# Sudo account seed phrase for auto-approval -# This account will sign approve_kyc transactions when threshold is reached -SUDO_SEED=your_seed_phrase_here +# ── Indexer service (src/index.js) ────────────────────────────── +# PezkuwiChain WebSocket endpoint +WS_ENDPOINT=wss://rpc.pezkuwichain.io # Server port PORT=3001 + +# Stateful sqlite DB path. In Docker this is set to /data/transactions.db +# (a mounted volume). Locally it defaults to ./transactions.db. +# DB_PATH=/data/transactions.db + +# ── KYC / council service (src/server.js) ─────────────────────── +# Supabase project (required by server.js — it exits if missing) +SUPABASE_URL=your_supabase_url_here +SUPABASE_ANON_KEY=your_supabase_anon_key_here + +# Founder SS58 address — authorizes /api/council/add-member (signature-gated) +FOUNDER_ADDRESS=your_founder_ss58_address_here + +# Sudo account seed — signs approveKyc when the vote threshold is reached. +# Keep secret; use a dedicated key for KYC approvals only. +SUDO_SEED=your_seed_phrase_here diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 00000000..c73bcfb9 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,6 @@ +# Stateful indexer DB — never commit (lives on a mounted volume in prod) +transactions.db +*.db +*.db-journal +*.sqlite +node_modules/ diff --git a/backend/DEPLOY.md b/backend/DEPLOY.md new file mode 100644 index 00000000..1698e15d --- /dev/null +++ b/backend/DEPLOY.md @@ -0,0 +1,89 @@ +# Backend (indexer) — Deploy Runbook + +The backend is a runnable Node service (`src/index.js`) that indexes chain +transfers into a **stateful** local sqlite DB and serves a small read API. It is +built into a SHA-tagged, cosign-signed GHCR image and run as a Docker container +on the backend host by the `build-image-backend` + `deploy-backend` jobs in +`.github/workflows/quality-gate.yml`. + +> The KYC/council service (`src/server.js`) is a separate surface (Supabase + +> sudo signer). It is not containerized by this pipeline; only the indexer is. + +## Pipeline shape (mirrors the web deploy) + +``` +backend (npm ci + npm test + audit) + └─ telegram-gate (CEO approves in Telegram — SAME gate as web) + └─ build-image-backend (docker build ./backend → GHCR : + :latest, cosign sign) + └─ deploy-backend (cosign verify → ssh host → docker run → /health → auto-rollback) +``` + +- **Trigger:** only `main` or tags, `push`/`workflow_dispatch`. Never fork PRs + (the `if:` requires `refs/heads/main`|`refs/tags/*` + `packages:write`, which + fork PRs never get). +- **Rollback:** `gh workflow run quality-gate.yml -f rollback_to=` — skips + build, re-runs the old signed image. The deploy step also **auto-rolls-back** + to the previously-live SHA on a failed health check. + +## STATEFUL DB — do not wipe (critical) + +The indexer's sqlite file **is** the service's memory. It lives in the Docker +**named volume `pwap-indexer-db`**, mounted at `/data`, with +`DB_PATH=/data/transactions.db`. + +- The image never contains the DB (see `.dockerignore` + `Dockerfile` `VOLUME`). +- `deploy-backend` does `docker rm -f` + `docker run` on every deploy/rollback + but **never touches the volume** — state survives every deploy and rollback. +- Never run `docker volume rm pwap-indexer-db` as part of a deploy. Back it up + before host maintenance: + `docker run --rm -v pwap-indexer-db:/data -v "$PWD:/backup" busybox tar czf /backup/indexer-db.tgz -C /data .` + +## One-time host setup + +On the backend host (as the `BACKEND_VPS_USER`): + +```bash +mkdir -p /opt/pwap-indexer +# Runtime env for the container (owner-managed, NOT in git): +cat > /opt/pwap-indexer/.env <<'EOF' +WS_ENDPOINT=wss://rpc.pezkuwichain.io +PORT=3001 +# DB_PATH is set by the deploy to /data/transactions.db — leave unset here. +EOF +``` + +Docker must be installed and the deploy user able to run it. Port `3001` is +published on the host; front it with the existing nginx/Cloudflare if it needs +to be public (remember `set_real_ip_from` behind the CF proxy). + +## Required GitHub secrets + +New (backend-specific): + +| Secret | Purpose | +| --- | --- | +| `BACKEND_VPS_HOST` | Backend host address (no hardcoded IP in the workflow). **If the backend shares the web DEV VPS, set this equal to `VPS_HOST`.** | +| `BACKEND_VPS_USER` | SSH user on the backend host. | +| `BACKEND_VPS_SSH_KEY` | SSH private key for that user. | +| `BACKEND_VPS_SSH_PORT` | Optional; defaults to `22`. | + +Reused from the existing web pipeline (no new value needed): +`GITHUB_TOKEN` (GHCR push/pull + cosign), `PEXSEC_BOT_TOKEN`, +`TELEGRAM_CEO_CHAT_ID`. + +## Post-deploy smoke checks + +```bash +curl -fsS http://:3001/health # {"status":"ok"} +curl -fsS http://:3001/api/stats # {"total": } — grows as blocks index +docker inspect --format '{{.State.Health.Status}}' pwap-indexer # healthy +docker volume inspect pwap-indexer-db # confirm the DB volume exists/persists +``` + +## Notes / can't-run-in-this-environment + +- **cosign keyless signing/verification** only works inside GitHub Actions + (needs the Sigstore OIDC token). It cannot be exercised locally/offline. +- The offline test suite (`npm test`, `test/*.test.js`) needs no chain/DB. The + `integration-tests/*.live.test.js` suites need a live chain + Supabase and are + **excluded** from CI on purpose. diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 00000000..e4bfc8d5 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,47 @@ +# pwap indexer service — runnable Node container (not a static-dist image). +# +# Two stages on the SAME debian base so the natively-compiled sqlite3 binding +# built in stage 1 is ABI-compatible with the runtime in stage 2 (do NOT mix +# alpine/musl here — sqlite3 would fail to load). +# +# STATEFUL DATA: the indexer's sqlite file is the service's memory. It is kept +# OUT of the image, under /data, which MUST be a mounted volume. A deploy +# replaces the container/image but never the volume — see backend/DEPLOY.md. + +# ─── Stage 1: install production deps (compiles sqlite3) ──────── +FROM node:20-bookworm AS builder +WORKDIR /app +COPY package.json package-lock.json ./ +# --omit=dev: the test-only devDeps (supertest, @pezkuwi/keyring) never ship. +RUN npm ci --omit=dev + +# ─── Stage 2: runtime ────────────────────────────────────────── +FROM node:20-bookworm-slim +ENV NODE_ENV=production +ENV PORT=3001 +# DB on the volume, never in the image layer. +ENV DB_PATH=/data/transactions.db +WORKDIR /app + +# curl only, for the HEALTHCHECK probe. +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=builder /app/node_modules ./node_modules +COPY package.json ./ +COPY src ./src + +# /data holds the stateful sqlite DB — declared as a volume and owned by the +# non-root runtime user so the container can write to the mount. +RUN mkdir -p /data && chown -R node:node /app /data +VOLUME ["/data"] + +USER node +EXPOSE 3001 + +# Probe the in-container /health endpoint added to the indexer API. +HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \ + CMD sh -c 'curl -fsS "http://localhost:${PORT:-3001}/health" || exit 1' + +CMD ["node", "src/index.js"] diff --git a/backend/package-lock.json b/backend/package-lock.json index 7131404a..1d24d2bf 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -11,11 +11,19 @@ "@pezkuwi/api": "^16.5.23", "@pezkuwi/util": "^14.0.13", "@pezkuwi/util-crypto": "^14.0.13", + "@supabase/supabase-js": "^2.45.0", "cors": "^2.8.5", "dotenv": "^17.2.3", "express": "^5.2.1", + "pino": "^9.5.0", + "pino-http": "^10.3.0", + "pino-pretty": "^11.3.0", "sqlite": "^5.1.1", "sqlite3": "^5.1.7" + }, + "devDependencies": { + "@pezkuwi/keyring": "^14.0.13", + "supertest": "^7.0.0" } }, "node_modules/@bizinikiwi/connect": { @@ -143,6 +151,16 @@ "node": ">=10" } }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", + "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, "node_modules/@pezkuwi/api": { "version": "16.5.23", "resolved": "https://registry.npmjs.org/@pezkuwi/api/-/api-16.5.23.tgz", @@ -761,6 +779,12 @@ "node": ">=18" } }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, "node_modules/@scure/base": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", @@ -789,6 +813,90 @@ "integrity": "sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ==", "license": "Apache-2.0" }, + "node_modules/@supabase/auth-js": { + "version": "2.110.8", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.110.8.tgz", + "integrity": "sha512-TQ5neTUDX2C2WmyYa03yGhLMkhdE/SkHXtK8/qxO/APUy3rsymsJCBP48p4jcN6iO2G0ow6RRexQd2mX+dSyJg==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.110.8", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.110.8.tgz", + "integrity": "sha512-5yB9TLYzvv2oSQxwb0gamEvIAsuH66pVt7AM/pz03S7wN6ehD34GNgbShrccetqPedXQSz7e/1hAJ9NeEhoZVg==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/phoenix": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.5.tgz", + "integrity": "sha512-aAn9H9ovVyeApKy11OWOrrOGq8DV68yWeH4ud2lN9fzn4aO8Zb5GLL9m1pUg9nLqIcT+ZDfAcsZe0E/nqdv2lw==", + "license": "MIT" + }, + "node_modules/@supabase/postgrest-js": { + "version": "2.110.8", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.110.8.tgz", + "integrity": "sha512-QeRROxl1PpOZw5Jzi7BwdN9icsycMrLlCCvsjS0hYLW+nZoaT46zdagz/glJirj8jHF4jSd5Jyipuae2cBClCw==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.110.8", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.110.8.tgz", + "integrity": "sha512-mwX7ituX6O31fLf+0g65rpLlNxqgnMaPltPsQwzox6jfmbfVl3tCxXrfr3HEsQcCRjpjuJG1+A0vFzP1yVjKHA==", + "license": "MIT", + "dependencies": { + "@supabase/phoenix": "0.4.5", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.110.8", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.110.8.tgz", + "integrity": "sha512-CcfhkZFBLxsthgUabZKxwfsoXdrikIGsL3LsGoV3FZTqCMx/s1y49taT4jT/oya5+1IuB0sFFHw6pF0o0iJniQ==", + "license": "MIT", + "dependencies": { + "iceberg-js": "^0.8.1", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.110.8", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.110.8.tgz", + "integrity": "sha512-E5qzoe74zhJRv4wRcbO9eMYzeQDb/+h6c603pL8shcxLGBjTKsIF7XXj05IcNj23TLDgJN1WkMw7mwAPyu5dZg==", + "license": "MIT", + "dependencies": { + "@supabase/auth-js": "2.110.8", + "@supabase/functions-js": "2.110.8", + "@supabase/postgrest-js": "2.110.8", + "@supabase/realtime-js": "2.110.8", + "@supabase/storage-js": "2.110.8" + }, + "engines": { + "node": ">=22.0.0" + } + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -824,6 +932,18 @@ "license": "ISC", "optional": true }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", @@ -909,6 +1029,29 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1119,6 +1262,35 @@ "color-support": "bin.js" } }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1173,6 +1345,13 @@ "node": ">=6.6.0" } }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", @@ -1199,6 +1378,15 @@ "node": ">= 12" } }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -1240,6 +1428,16 @@ "node": ">=4.0.0" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -1265,6 +1463,17 @@ "node": ">=8" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/dotenv": { "version": "17.2.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", @@ -1392,6 +1601,22 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1407,12 +1632,30 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "license": "MIT" }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -1465,6 +1708,18 @@ "url": "https://opencollective.com/express" } }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -1515,6 +1770,46 @@ "url": "https://opencollective.com/express" } }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -1527,6 +1822,24 @@ "node": ">=12.20.0" } }, + "node_modules/formidable": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "dezalgo": "^1.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1601,6 +1914,15 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -1697,6 +2019,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -1705,9 +2043,9 @@ "optional": true }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -1716,6 +2054,12 @@ "node": ">= 0.4" } }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" + }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -1782,6 +2126,15 @@ "ms": "^2.0.0" } }, + "node_modules/iceberg-js": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz", + "integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", @@ -1918,6 +2271,15 @@ "license": "ISC", "optional": true }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -2005,6 +2367,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -2359,6 +2744,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -2425,6 +2819,132 @@ "url": "https://opencollective.com/express" } }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-http": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-10.5.0.tgz", + "integrity": "sha512-hD91XjgaKkSsdn8P7LaebrNzhGTdB086W3pyPihX0EzGPjq5uBJBXo4N5guqNaK6mUjg9aubMF7wDViYek9dRA==", + "license": "MIT", + "dependencies": { + "get-caller-file": "^2.0.5", + "pino": "^9.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.3.0.tgz", + "integrity": "sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-pretty/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/pino-pretty/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-pretty/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -2451,6 +2971,31 @@ "node": ">=10" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -2519,6 +3064,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -2572,6 +3123,15 @@ "node": ">= 6" } }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -2644,12 +3204,27 @@ ], "license": "MIT" }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, "node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", @@ -2895,6 +3470,24 @@ "node": ">= 10" } }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sqlite": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/sqlite/-/sqlite-5.1.1.tgz", @@ -2993,10 +3586,46 @@ "node": ">=0.10.0" } }, + "node_modules/superagent": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.3.0.tgz", + "integrity": "sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.1", + "cookiejar": "^2.1.4", + "debug": "^4.3.7", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.5", + "formidable": "^3.5.4", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.14.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/supertest": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.2.2.tgz", + "integrity": "sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cookie-signature": "^1.2.2", + "methods": "^1.1.2", + "superagent": "^10.3.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -3082,6 +3711,15 @@ "node": ">=18" } }, + "node_modules/thread-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.2.0.tgz", + "integrity": "sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -3215,9 +3853,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/backend/package.json b/backend/package.json index c7a7048b..40d8c1f5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -6,10 +6,12 @@ "type": "module", "scripts": { "start": "node src/index.js", - "dev": "node --watch src/index.js" + "dev": "node --watch src/index.js", + "test": "node --test test/*.test.js" }, "overrides": { - "tar": "^7.4.3", + "tar": "^7.5.22", + "ws": "^8.21.1", "@pezkuwi/api": "^16.5.23", "@pezkuwi/api-augment": "^16.5.23", "@pezkuwi/api-base": "^16.5.23", @@ -34,10 +36,18 @@ "@pezkuwi/api": "^16.5.23", "@pezkuwi/util": "^14.0.13", "@pezkuwi/util-crypto": "^14.0.13", + "@supabase/supabase-js": "^2.45.0", "cors": "^2.8.5", "dotenv": "^17.2.3", "express": "^5.2.1", + "pino": "^9.5.0", + "pino-http": "^10.3.0", + "pino-pretty": "^11.3.0", "sqlite": "^5.1.1", "sqlite3": "^5.1.7" + }, + "devDependencies": { + "@pezkuwi/keyring": "^14.0.13", + "supertest": "^7.0.0" } } diff --git a/backend/src/council.js b/backend/src/council.js new file mode 100644 index 00000000..fff1680f --- /dev/null +++ b/backend/src/council.js @@ -0,0 +1,198 @@ +// Council / KYC HTTP surface — signature-gated, fund/authz-relevant. +// +// Extracted from server.js as an injectable factory so the endpoints can be +// exercised in CI with NO live chain and NO live Supabase: +// - `supabase` is injected (tests pass an in-memory fake). +// - `getApi()` / `getSudo()` are injected getters (tests pass a stubbed +// tx surface, so the on-chain approveKyc path runs without a network). +// Real @pezkuwi/util-crypto signature verification is used as-is — it is pure +// crypto and runs fully offline, so auth rejection/acceptance is tested for real. + +import express from 'express' +import cors from 'cors' +import { signatureVerify } from '@pezkuwi/util-crypto' + +const THRESHOLD_PERCENT = 0.6 + +export function createApp ({ supabase, getApi = () => null, getSudo = () => null, logger = console }) { + const app = express() + app.use(cors()) + app.use(express.json()) + + // ======================================== + // COUNCIL MANAGEMENT + // ======================================== + app.post('/api/council/add-member', async (req, res) => { + const { newMemberAddress, signature, message } = req.body + const founderAddress = process.env.FOUNDER_ADDRESS + + if (!founderAddress) { + logger.error('Founder address is not configured.') + return res.status(500).json({ error: { key: 'errors.server.founder_not_configured' } }) + } + + if (process.env.NODE_ENV !== 'test') { + const { isValid } = signatureVerify(message, signature, founderAddress) + if (!isValid) { + return res.status(401).json({ error: { key: 'errors.auth.invalid_signature' } }) + } + if (!message.includes(`addCouncilMember:${newMemberAddress}`)) { + return res.status(400).json({ error: { key: 'errors.request.message_mismatch' } }) + } + } + + if (!newMemberAddress || newMemberAddress.length < 47) { + return res.status(400).json({ error: { key: 'errors.request.invalid_address' } }) + } + + try { + const { error } = await supabase + .from('council_members') + .insert([{ address: newMemberAddress }]) + + if (error) { + if (error.code === '23505') { // Unique violation + return res.status(409).json({ error: { key: 'errors.council.member_exists' } }) + } + throw error + } + res.status(200).json({ success: true }) + } catch (error) { + logger.error({ err: error, newMemberAddress }, 'Error adding council member') + res.status(500).json({ error: { key: 'errors.server.internal_error' } }) + } + }) + + // ======================================== + // KYC VOTING + // ======================================== + app.post('/api/kyc/propose', async (req, res) => { + const { userAddress, proposerAddress, signature, message } = req.body + + try { + if (process.env.NODE_ENV !== 'test') { + const { isValid } = signatureVerify(message, signature, proposerAddress) + if (!isValid) { + return res.status(401).json({ error: { key: 'errors.auth.invalid_signature' } }) + } + if (!message.includes(`proposeKYC:${userAddress}`)) { + return res.status(400).json({ error: { key: 'errors.request.message_mismatch' } }) + } + } + + const { data: councilMember, error: memberError } = await supabase + .from('council_members').select('address').eq('address', proposerAddress).single() + + if (memberError || !councilMember) { + return res.status(403).json({ error: { key: 'errors.auth.proposer_not_member' } }) + } + + const { error: proposalError } = await supabase + .from('kyc_proposals').insert({ user_address: userAddress, proposer_address: proposerAddress }) + + if (proposalError) { + if (proposalError.code === '23505') { + return res.status(409).json({ error: { key: 'errors.kyc.proposal_exists' } }) + } + throw proposalError + } + + const { data: proposal } = await supabase + .from('kyc_proposals').select('id').eq('user_address', userAddress).single() + + await supabase.from('votes') + .insert({ proposal_id: proposal.id, voter_address: proposerAddress, is_aye: true }) + + await checkAndExecute(userAddress) + + res.status(201).json({ success: true, proposalId: proposal.id }) + } catch (error) { + logger.error({ err: error, ...req.body }, 'Error proposing KYC') + res.status(500).json({ error: { key: 'errors.server.internal_error' } }) + } + }) + + async function checkAndExecute (userAddress) { + try { + const api = getApi() + const sudoAccount = getSudo() + + const { count: totalMembers, error: countError } = await supabase + .from('council_members').select('*', { count: 'exact', head: true }) + + if (countError) throw countError + if (totalMembers === 0) return + + const { data: proposal, error: proposalError } = await supabase + .from('kyc_proposals').select('id, executed').eq('user_address', userAddress).single() + + if (proposalError || !proposal || proposal.executed) return + + const { count: ayesCount, error: ayesError } = await supabase + .from('votes').select('*', { count: 'exact', head: true }) + .eq('proposal_id', proposal.id).eq('is_aye', true) + + if (ayesError) throw ayesError + + const requiredVotes = Math.ceil(totalMembers * THRESHOLD_PERCENT) + + if (ayesCount >= requiredVotes) { + if (!sudoAccount || !api) { + logger.error({ userAddress }, 'Cannot execute: No sudo account or API connection') + return + } + + logger.info({ userAddress }, 'Threshold reached! Executing approveKyc...') + const tx = api.tx.identityKyc.approveKyc(userAddress) + + await tx.signAndSend(sudoAccount, async ({ status, dispatchError, events }) => { + if (status.isFinalized) { + if (dispatchError) { + const decoded = api.registry.findMetaError(dispatchError.asModule) + const errorMsg = `${decoded.section}.${decoded.name}: ${decoded.docs.join(' ')}` + logger.error({ userAddress, error: errorMsg }, 'Approval failed') + return + } + + const approvedEvent = events.find(({ event }) => api.events.identityKyc.KycApproved.is(event)) + if (approvedEvent) { + logger.info({ userAddress }, 'KYC Approved on-chain. Marking as executed.') + await supabase.from('kyc_proposals').update({ executed: true }).eq('id', proposal.id) + } + } + }) + } + } catch (error) { + logger.error({ err: error, userAddress }, 'Error in checkAndExecute') + } + } + + // ======================================== + // GETTERS + // ======================================== + app.get('/api/kyc/pending', async (req, res) => { + try { + const { data, error } = await supabase + .from('kyc_proposals') + .select('user_address, proposer_address, created_at, votes ( voter_address, is_aye )') + .eq('executed', false) + if (error) throw error + res.json({ pending: data }) + } catch (error) { + logger.error({ err: error }, 'Error fetching pending proposals') + res.status(500).json({ error: { key: 'errors.server.internal_error' } }) + } + }) + + // ======================================== + // HEALTH CHECK + // ======================================== + app.get('/health', async (req, res) => { + res.json({ + status: 'ok', + blockchain: getApi() ? 'connected' : 'disconnected' + }) + }) + + return app +} diff --git a/backend/src/index.js b/backend/src/index.js index 406c9281..de013f6b 100644 --- a/backend/src/index.js +++ b/backend/src/index.js @@ -1,134 +1,42 @@ -import express from 'express'; -import cors from 'cors'; -import { open } from 'sqlite'; -import sqlite3 from 'sqlite3'; -import { ApiPromise, WsProvider } from '@pezkuwi/api'; -import dotenv from 'dotenv'; +// Indexer service bootstrap. +// +// Thin wiring layer: connects to the live chain and feeds decoded blocks into +// the injectable core in ./indexer.js (which holds all the DB + HTTP logic and +// is unit-tested offline). Keeping the @pezkuwi/api connection isolated here +// means the testable core never touches the network. -dotenv.config(); +import { ApiPromise, WsProvider } from '@pezkuwi/api' +import dotenv from 'dotenv' +import { initDb, indexBlock, createApp } from './indexer.js' -const app = express(); -const port = process.env.PORT || 3001; -const WS_ENDPOINT = process.env.WS_ENDPOINT || 'wss://rpc.pezkuwichain.io'; +dotenv.config() -app.use(cors()); -app.use(express.json()); - -// Initialize Database -async function initDb() { - const db = await open({ - filename: './transactions.db', - driver: sqlite3.Database - }); - - await db.exec(` - CREATE TABLE IF NOT EXISTS transfers ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - hash TEXT UNIQUE, - sender TEXT, - receiver TEXT, - amount TEXT, - asset_id INTEGER DEFAULT NULL, - symbol TEXT, - block_number INTEGER, - timestamp DATETIME DEFAULT CURRENT_TIMESTAMP - ) - `); - - return db; -} +const port = process.env.PORT || 3001 +const WS_ENDPOINT = process.env.WS_ENDPOINT || 'wss://rpc.pezkuwichain.io' // Start Indexing -async function startIndexer(db) { - console.log(`Connecting to Pezkuwi Node: ${WS_ENDPOINT}`); - const provider = new WsProvider(WS_ENDPOINT); - const api = await ApiPromise.create({ provider }); +async function startIndexer (db) { + console.log(`Connecting to Pezkuwi Node: ${WS_ENDPOINT}`) + const provider = new WsProvider(WS_ENDPOINT) + const api = await ApiPromise.create({ provider }) - console.log('Connected! Listening for new blocks...'); + console.log('Connected! Listening for new blocks...') - api.rpc.chain.subscribeNewHeads(async (header) => { - const blockNumber = header.number.toNumber(); - const blockHash = await api.rpc.chain.getBlockHash(blockNumber); - const signedBlock = await api.rpc.chain.getBlock(blockHash); - - signedBlock.block.extrinsics.forEach(async (ex) => { - const { method: { method, section }, signer } = ex; - - // 1. Handle Native HEZ Transfers - if (section === 'balances' && (method === 'transfer' || method === 'transferKeepAlive')) { - const [dest, value] = ex.method.args; - await saveTransfer(db, { - hash: ex.hash.toHex(), - sender: signer.toString(), - receiver: dest.toString(), - amount: value.toString(), - asset_id: null, - symbol: 'HEZ', - block_number: blockNumber - }); - } - - // 2. Handle Asset Transfers (PEZ, USDT) - if (section === 'assets' && method === 'transfer') { - const [id, dest, value] = ex.method.args; - const assetId = id.toNumber(); - const symbol = assetId === 1 ? 'PEZ' : assetId === 1000 ? 'USDT' : `ASSET-${assetId}`; - - await saveTransfer(db, { - hash: ex.hash.toHex(), - sender: signer.toString(), - receiver: dest.toString(), - amount: value.toString(), - asset_id: assetId, - symbol: symbol, - block_number: blockNumber - }); - } - }); - }); -} - -async function saveTransfer(db, tx) { - try { - await db.run( - `INSERT OR IGNORE INTO transfers (hash, sender, receiver, amount, asset_id, symbol, block_number) - VALUES (?, ?, ?, ?, ?, ?, ?)`, - [tx.hash, tx.sender, tx.receiver, tx.amount, tx.asset_id, tx.symbol, tx.block_number] - ); - console.log(`Indexed ${tx.symbol} Transfer: ${tx.hash.slice(0, 10)}...`); - } catch (err) { - console.error('DB Insert Error:', err); - } -} - -// API Routes -async function startServer(db) { - app.get('/api/history/:address', async (req, res) => { - const { address } = req.params; - try { - const history = await db.all( - `SELECT * FROM transfers - WHERE sender = ? OR receiver = ? - ORDER BY block_number DESC LIMIT 50`, - [address, address] - ); - res.json(history); - } catch (err) { - res.status(500).json({ error: err.message }); - } - }); - - app.get('/api/stats', async (req, res) => { - const stats = await db.get('SELECT COUNT(*) as total FROM transfers'); - res.json(stats); - }); - - app.listen(port, () => { - console.log(`Indexer API running at http://localhost:${port}`); - }); + api.rpc.chain.subscribeNewHeads(async (header) => { + const blockNumber = header.number.toNumber() + const blockHash = await api.rpc.chain.getBlockHash(blockNumber) + const signedBlock = await api.rpc.chain.getBlock(blockHash) + await indexBlock(db, signedBlock, blockNumber) + }) } // Launch -const db = await initDb(); -startIndexer(db); -startServer(db); +// DB_PATH lets the deploy point the stateful sqlite file at a mounted volume +// (e.g. /data/transactions.db); defaults to the historical ./transactions.db. +const db = await initDb(process.env.DB_PATH || './transactions.db') +startIndexer(db) + +const app = createApp(db) +app.listen(port, () => { + console.log(`Indexer API running at http://localhost:${port}`) +}) diff --git a/backend/src/indexer.js b/backend/src/indexer.js new file mode 100644 index 00000000..6368bcbe --- /dev/null +++ b/backend/src/indexer.js @@ -0,0 +1,135 @@ +// Indexer core — pure, injectable, offline-testable. +// +// This module deliberately does NOT import @pezkuwi/api. It operates on +// already-decoded extrinsic objects and an injected sqlite handle, so the +// dedup / symbol-mapping / DB logic can be exercised in CI with no live chain +// and an in-memory (`:memory:`) database. src/index.js wires this to the live +// WsProvider/ApiPromise subscription. + +import express from 'express' +import cors from 'cors' +import { open } from 'sqlite' +import sqlite3 from 'sqlite3' + +// Open (or create) the transfers DB. Pass ':memory:' in tests. +export async function initDb (filename = './transactions.db') { + const db = await open({ filename, driver: sqlite3.Database }) + + await db.exec(` + CREATE TABLE IF NOT EXISTS transfers ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + hash TEXT UNIQUE, + sender TEXT, + receiver TEXT, + amount TEXT, + asset_id INTEGER DEFAULT NULL, + symbol TEXT, + block_number INTEGER, + timestamp DATETIME DEFAULT CURRENT_TIMESTAMP + ) + `) + + return db +} + +// Persist a single transfer. INSERT OR IGNORE gives us hash-level dedup so the +// same extrinsic seen twice (re-org / replay / overlapping subscriptions) is a +// no-op instead of a duplicate row. +export async function saveTransfer (db, tx) { + try { + await db.run( + `INSERT OR IGNORE INTO transfers (hash, sender, receiver, amount, asset_id, symbol, block_number) + VALUES (?, ?, ?, ?, ?, ?, ?)`, + [tx.hash, tx.sender, tx.receiver, tx.amount, tx.asset_id, tx.symbol, tx.block_number] + ) + console.log(`Indexed ${tx.symbol} Transfer: ${tx.hash.slice(0, 10)}...`) + } catch (err) { + console.error('DB Insert Error:', err) + } +} + +// Decode a single (decoded) extrinsic into a transfer row, or null if it is not +// a transfer we index. Kept pure so it can be unit-tested with plain fixtures. +export function parseExtrinsic (ex, blockNumber) { + const { method: { method, section }, signer } = ex + + // 1. Native HEZ transfers + if (section === 'balances' && (method === 'transfer' || method === 'transferKeepAlive')) { + const [dest, value] = ex.method.args + return { + hash: ex.hash.toHex(), + sender: signer.toString(), + receiver: dest.toString(), + amount: value.toString(), + asset_id: null, + symbol: 'HEZ', + block_number: blockNumber + } + } + + // 2. Asset transfers (PEZ, USDT, …) + if (section === 'assets' && method === 'transfer') { + const [id, dest, value] = ex.method.args + const assetId = id.toNumber() + const symbol = assetId === 1 ? 'PEZ' : assetId === 1000 ? 'USDT' : `ASSET-${assetId}` + return { + hash: ex.hash.toHex(), + sender: signer.toString(), + receiver: dest.toString(), + amount: value.toString(), + asset_id: assetId, + symbol, + block_number: blockNumber + } + } + + return null +} + +// Index every relevant extrinsic in a block. Sequential await (vs the original +// fire-and-forget forEach) so inserts actually complete before the block is +// considered processed — same rows, just no lost/racing writes. +export async function indexBlock (db, signedBlock, blockNumber) { + for (const ex of signedBlock.block.extrinsics) { + const transfer = parseExtrinsic(ex, blockNumber) + if (transfer) await saveTransfer(db, transfer) + } +} + +// Build the read-only indexer API over an injected db handle. +export function createApp (db) { + const app = express() + app.use(cors()) + app.use(express.json()) + + // Liveness/readiness probe (used by the Docker HEALTHCHECK). + app.get('/health', (req, res) => { + res.json({ status: 'ok' }) + }) + + app.get('/api/history/:address', async (req, res) => { + const { address } = req.params + try { + const history = await db.all( + `SELECT * FROM transfers + WHERE sender = ? OR receiver = ? + ORDER BY block_number DESC LIMIT 50`, + [address, address] + ) + res.json(history) + } catch (err) { + res.status(500).json({ error: err.message }) + } + }) + + app.get('/api/stats', async (req, res) => { + try { + const stats = await db.get('SELECT COUNT(*) as total FROM transfers') + res.json(stats) + } catch (err) { + res.status(500).json({ error: err.message }) + } + }) + + return app +} diff --git a/backend/src/server.js b/backend/src/server.js index 1028b52b..5d5efca1 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -1,11 +1,17 @@ -import express from 'express' -import cors from 'cors' +// Council / KYC service bootstrap. +// +// Thin wiring layer: builds the real Supabase client + logger, connects to the +// live chain, and mounts the injectable route factory from ./council.js. All +// endpoint logic lives in council.js so it can be tested offline; this file only +// owns the live side effects (Supabase client, blockchain connection). + import dotenv from 'dotenv' import pino from 'pino' import pinoHttp from 'pino-http' import { createClient } from '@supabase/supabase-js' import { ApiPromise, WsProvider, Keyring } from '@pezkuwi/api' -import { cryptoWaitReady, signatureVerify } from '@pezkuwi/util-crypto' +import { cryptoWaitReady } from '@pezkuwi/util-crypto' +import { createApp } from './council.js' dotenv.config() @@ -25,7 +31,6 @@ const logger = pino({ // ======================================== // INITIALIZATION // ======================================== - const supabaseUrl = process.env.SUPABASE_URL const supabaseKey = process.env.SUPABASE_ANON_KEY if (!supabaseUrl || !supabaseKey) { @@ -34,19 +39,21 @@ if (!supabaseUrl || !supabaseKey) { } const supabase = createClient(supabaseUrl, supabaseKey) -const app = express() -app.use(cors()) -app.use(express.json()) -app.use(pinoHttp({ logger })) - -const THRESHOLD_PERCENT = 0.6 let sudoAccount = null let api = null +// Mount routes with live deps injected via getters (so reassignment in +// initBlockchain is picked up by handlers). +const app = createApp({ + supabase, + getApi: () => api, + getSudo: () => sudoAccount, + logger +}) + // ======================================== // BLOCKCHAIN CONNECTION // ======================================== - async function initBlockchain () { logger.info('🔗 Connecting to Blockchain...') const wsProvider = new WsProvider(process.env.WS_ENDPOINT || 'ws://127.0.0.1:9944') @@ -63,189 +70,12 @@ async function initBlockchain () { } } -// ======================================== -// COUNCIL MANAGEMENT -// ======================================== - -app.post('/api/council/add-member', async (req, res) => { - const { newMemberAddress, signature, message } = req.body - const founderAddress = process.env.FOUNDER_ADDRESS - - if (!founderAddress) { - logger.error('Founder address is not configured.') - return res.status(500).json({ error: { key: 'errors.server.founder_not_configured' } }) - } - - if (process.env.NODE_ENV !== 'test') { - const { isValid } = signatureVerify(message, signature, founderAddress) - if (!isValid) { - return res.status(401).json({ error: { key: 'errors.auth.invalid_signature' } }) - } - if (!message.includes(`addCouncilMember:${newMemberAddress}`)) { - return res.status(400).json({ error: { key: 'errors.request.message_mismatch' } }) - } - } - - if (!newMemberAddress || newMemberAddress.length < 47) { - return res.status(400).json({ error: { key: 'errors.request.invalid_address' } }) - } - - try { - const { error } = await supabase - .from('council_members') - .insert([{ address: newMemberAddress }]) - - if (error) { - if (error.code === '23505') { // Unique violation - return res.status(409).json({ error: { key: 'errors.council.member_exists' } }) - } - throw error - } - res.status(200).json({ success: true }) - } catch (error) { - logger.error({ err: error, newMemberAddress }, 'Error adding council member') - res.status(500).json({ error: { key: 'errors.server.internal_error' } }) - } -}) - -// ======================================== -// KYC VOTING -// ======================================== - -app.post('/api/kyc/propose', async (req, res) => { - const { userAddress, proposerAddress, signature, message } = req.body - - try { - if (process.env.NODE_ENV !== 'test') { - const { isValid } = signatureVerify(message, signature, proposerAddress) - if (!isValid) { - return res.status(401).json({ error: { key: 'errors.auth.invalid_signature' } }) - } - if (!message.includes(`proposeKYC:${userAddress}`)) { - return res.status(400).json({ error: { key: 'errors.request.message_mismatch' } }) - } - } - - const { data: councilMember, error: memberError } = await supabase - .from('council_members').select('address').eq('address', proposerAddress).single() - - if (memberError || !councilMember) { - return res.status(403).json({ error: { key: 'errors.auth.proposer_not_member' } }) - } - - const { error: proposalError } = await supabase - .from('kyc_proposals').insert({ user_address: userAddress, proposer_address: proposerAddress }) - - if (proposalError) { - if (proposalError.code === '23505') { - return res.status(409).json({ error: { key: 'errors.kyc.proposal_exists' } }) - } - throw proposalError - } - - const { data: proposal } = await supabase - .from('kyc_proposals').select('id').eq('user_address', userAddress).single() - - await supabase.from('votes') - .insert({ proposal_id: proposal.id, voter_address: proposerAddress, is_aye: true }) - - await checkAndExecute(userAddress) - - res.status(201).json({ success: true, proposalId: proposal.id }) - } catch (error) { - logger.error({ err: error, ...req.body }, 'Error proposing KYC') - res.status(500).json({ error: { key: 'errors.server.internal_error' } }) - } -}) - -async function checkAndExecute (userAddress) { - try { - const { count: totalMembers, error: countError } = await supabase - .from('council_members').select('*', { count: 'exact', head: true }) - - if (countError) throw countError - if (totalMembers === 0) return - - const { data: proposal, error: proposalError } = await supabase - .from('kyc_proposals').select('id, executed').eq('user_address', userAddress).single() - - if (proposalError || !proposal || proposal.executed) return - - const { count: ayesCount, error: ayesError } = await supabase - .from('votes').select('*', { count: 'exact', head: true }) - .eq('proposal_id', proposal.id).eq('is_aye', true) - - if (ayesError) throw ayesError - - const requiredVotes = Math.ceil(totalMembers * THRESHOLD_PERCENT) - - if (ayesCount >= requiredVotes) { - if (!sudoAccount || !api) { - logger.error({ userAddress }, 'Cannot execute: No sudo account or API connection') - return - } - - logger.info({ userAddress }, `Threshold reached! Executing approveKyc...`) - const tx = api.tx.identityKyc.approveKyc(userAddress) - - await tx.signAndSend(sudoAccount, async ({ status, dispatchError, events }) => { - if (status.isFinalized) { - if (dispatchError) { - const decoded = api.registry.findMetaError(dispatchError.asModule) - const errorMsg = `${decoded.section}.${decoded.name}: ${decoded.docs.join(' ')}` - logger.error({ userAddress, error: errorMsg }, `Approval failed`) - return - } - - const approvedEvent = events.find(({ event }) => api.events.identityKyc.KycApproved.is(event)) - if (approvedEvent) { - logger.info({ userAddress }, 'KYC Approved on-chain. Marking as executed.') - await supabase.from('kyc_proposals').update({ executed: true }).eq('id', proposal.id) - } - } - }) - } - } catch (error) { - logger.error({ err: error, userAddress }, `Error in checkAndExecute`) - } -} - -// ======================================== -// OTHER ENDPOINTS (GETTERS) -// ======================================== - -app.get('/api/kyc/pending', async (req, res) => { - try { - const { data, error } = await supabase - .from('kyc_proposals') - .select('user_address, proposer_address, created_at, votes ( voter_address, is_aye )') - .eq('executed', false) - if (error) throw error - res.json({ pending: data }) - } catch (error) { - logger.error({ err: error }, 'Error fetching pending proposals') - res.status(500).json({ error: { key: 'errors.server.internal_error' } }) - } -}) - -// ======================================== -// HEALTH CHECK -// ======================================== - -app.get('/health', async (req, res) => { - res.json({ - status: 'ok', - blockchain: api ? 'connected' : 'disconnected' - }); -}) - // ======================================== // START & EXPORT // ======================================== - initBlockchain().catch(error => { logger.fatal({ err: error }, '❌ Failed to initialize blockchain') process.exit(1) }) -export { app, supabase, api, logger } \ No newline at end of file +export { app, supabase, logger } diff --git a/backend/test/council.test.js b/backend/test/council.test.js new file mode 100644 index 00000000..972ee597 --- /dev/null +++ b/backend/test/council.test.js @@ -0,0 +1,228 @@ +// Offline council / KYC tests — real signature crypto, mocked chain + Supabase. +// Run: node --test +// +// NODE_ENV must NOT be 'test' here: the handlers skip signature verification +// when NODE_ENV === 'test', and we specifically want to exercise the real +// @pezkuwi/util-crypto signature gate (reject unsigned/invalid, accept valid). + +process.env.NODE_ENV = 'ci-offline' + +import { test } from 'node:test' +import assert from 'node:assert/strict' +import request from 'supertest' +import { Keyring } from '@pezkuwi/keyring' +import { cryptoWaitReady } from '@pezkuwi/util-crypto' +import { u8aToHex } from '@pezkuwi/util' +import { createApp } from '../src/council.js' +import { makeFakeSupabase } from './helpers/fake-supabase.js' + +await cryptoWaitReady() + +const keyring = new Keyring({ type: 'sr25519' }) +const founder = keyring.addFromUri('//Founder') +const proposer = keyring.addFromUri('//Proposer') +const stranger = keyring.addFromUri('//Stranger') +const user = keyring.addFromUri('//KycUser') + +const sign = (pair, message) => u8aToHex(pair.sign(message)) + +const silentLogger = { info () {}, warn () {}, error () {}, fatal () {}, debug () {} } + +// Stubbed chain: approveKyc(...).signAndSend(sudo, cb) drives the callback with +// a finalized, successful event so the "mark executed" branch runs — no network. +function makeMockApi () { + const calls = [] + const api = { + tx: { + identityKyc: { + approveKyc: (addr) => ({ + async signAndSend (sudo, cb) { + calls.push(addr) + await cb({ + status: { isFinalized: true }, + dispatchError: undefined, + events: [{ event: { __kycApproved: true } }] + }) + return () => {} + } + }) + } + }, + events: { + identityKyc: { + KycApproved: { is: (ev) => !!(ev && ev.__kycApproved) } + } + }, + registry: { findMetaError: () => ({ section: 's', name: 'n', docs: [] }) } + } + return { api, calls } +} + +// --- /api/council/add-member ------------------------------------------------ + +test('add-member: 500 when FOUNDER_ADDRESS not configured', async () => { + delete process.env.FOUNDER_ADDRESS + const app = createApp({ supabase: makeFakeSupabase(), logger: silentLogger }) + const res = await request(app).post('/api/council/add-member').send({ + newMemberAddress: stranger.address, + signature: '0x00', + message: `addCouncilMember:${stranger.address}` + }) + assert.equal(res.statusCode, 500) + assert.equal(res.body.error.key, 'errors.server.founder_not_configured') +}) + +test('add-member: 401 on invalid signature', async () => { + process.env.FOUNDER_ADDRESS = founder.address + const app = createApp({ supabase: makeFakeSupabase(), logger: silentLogger }) + const message = `addCouncilMember:${stranger.address}` + const res = await request(app).post('/api/council/add-member').send({ + newMemberAddress: stranger.address, + signature: sign(stranger, message), // well-formed, but NOT the founder's key + message + }) + assert.equal(res.statusCode, 401) + assert.equal(res.body.error.key, 'errors.auth.invalid_signature') +}) + +test('add-member: 400 when signed message does not match the action', async () => { + process.env.FOUNDER_ADDRESS = founder.address + const message = 'addCouncilMember:5SomeoneElse' + const app = createApp({ supabase: makeFakeSupabase(), logger: silentLogger }) + const res = await request(app).post('/api/council/add-member').send({ + newMemberAddress: stranger.address, + signature: sign(founder, message), + message + }) + assert.equal(res.statusCode, 400) + assert.equal(res.body.error.key, 'errors.request.message_mismatch') +}) + +test('add-member: 200 on valid founder signature', async () => { + process.env.FOUNDER_ADDRESS = founder.address + const message = `addCouncilMember:${stranger.address}` + const supabase = makeFakeSupabase() + const app = createApp({ supabase, logger: silentLogger }) + const res = await request(app).post('/api/council/add-member').send({ + newMemberAddress: stranger.address, + signature: sign(founder, message), + message + }) + assert.equal(res.statusCode, 200) + assert.equal(res.body.success, true) + assert.equal(supabase._tables.council_members.length, 1) +}) + +test('add-member: 409 when member already exists', async () => { + process.env.FOUNDER_ADDRESS = founder.address + const message = `addCouncilMember:${stranger.address}` + const supabase = makeFakeSupabase({ council_members: [{ address: stranger.address }] }) + const app = createApp({ supabase, logger: silentLogger }) + const res = await request(app).post('/api/council/add-member').send({ + newMemberAddress: stranger.address, + signature: sign(founder, message), + message + }) + assert.equal(res.statusCode, 409) + assert.equal(res.body.error.key, 'errors.council.member_exists') +}) + +// --- /api/kyc/propose ------------------------------------------------------- + +test('propose: 401 on invalid proposer signature', async () => { + const app = createApp({ supabase: makeFakeSupabase(), logger: silentLogger }) + const message = `proposeKYC:${user.address}` + const res = await request(app).post('/api/kyc/propose').send({ + userAddress: user.address, + proposerAddress: proposer.address, + signature: sign(stranger, message), // signed by a different key than proposerAddress + message + }) + assert.equal(res.statusCode, 401) +}) + +test('propose: 403 when proposer is not a council member', async () => { + const message = `proposeKYC:${user.address}` + const app = createApp({ supabase: makeFakeSupabase(), logger: silentLogger }) + const res = await request(app).post('/api/kyc/propose').send({ + userAddress: user.address, + proposerAddress: proposer.address, // not seeded into council_members + signature: sign(proposer, message), + message + }) + assert.equal(res.statusCode, 403) + assert.equal(res.body.error.key, 'errors.auth.proposer_not_member') +}) + +test('propose: 201 and auto-executes when threshold reached (chain mocked)', async () => { + const message = `proposeKYC:${user.address}` + const supabase = makeFakeSupabase({ council_members: [{ address: proposer.address }] }) + const { api, calls } = makeMockApi() + const app = createApp({ + supabase, + getApi: () => api, + getSudo: () => ({ address: founder.address }), // stub signer + logger: silentLogger + }) + + const res = await request(app).post('/api/kyc/propose').send({ + userAddress: user.address, + proposerAddress: proposer.address, + signature: sign(proposer, message), + message + }) + + assert.equal(res.statusCode, 201) + assert.equal(res.body.success, true) + // Single-member council → 60% threshold (ceil(1*0.6)=1) met by the auto-aye, + // so approveKyc was signed+sent for the user and the proposal marked executed. + assert.deepEqual(calls, [user.address]) + const proposal = supabase._tables.kyc_proposals[0] + assert.equal(proposal.executed, true) +}) + +test('propose: does NOT execute below threshold (multi-member council)', async () => { + const message = `proposeKYC:${user.address}` + const supabase = makeFakeSupabase({ + council_members: [ + { address: proposer.address }, + { address: founder.address }, + { address: stranger.address } + ] + }) + const { api, calls } = makeMockApi() + const app = createApp({ + supabase, + getApi: () => api, + getSudo: () => ({ address: founder.address }), + logger: silentLogger + }) + + const res = await request(app).post('/api/kyc/propose').send({ + userAddress: user.address, + proposerAddress: proposer.address, + signature: sign(proposer, message), + message + }) + + assert.equal(res.statusCode, 201) + // 3 members → required = ceil(3*0.6)=2, only 1 aye → no on-chain execution. + assert.deepEqual(calls, []) + assert.equal(supabase._tables.kyc_proposals[0].executed, false) +}) + +// --- /api/kyc/pending ------------------------------------------------------- + +test('GET /api/kyc/pending lists non-executed proposals', async () => { + const supabase = makeFakeSupabase({ + kyc_proposals: [ + { user_address: user.address, proposer_address: proposer.address, executed: false }, + { user_address: stranger.address, proposer_address: proposer.address, executed: true } + ] + }) + const app = createApp({ supabase, logger: silentLogger }) + const res = await request(app).get('/api/kyc/pending') + assert.equal(res.statusCode, 200) + assert.equal(res.body.pending.length, 1) + assert.equal(res.body.pending[0].user_address, user.address) +}) diff --git a/backend/test/helpers/fake-supabase.js b/backend/test/helpers/fake-supabase.js new file mode 100644 index 00000000..37eaf153 --- /dev/null +++ b/backend/test/helpers/fake-supabase.js @@ -0,0 +1,105 @@ +// Minimal in-memory Supabase stand-in. +// +// Implements exactly the query-builder surface the council/KYC handlers use: +// .from(t).insert(v) +// .from(t).select(cols).eq(c,v).single() +// .from(t).select('*', { count:'exact', head:true }).eq(...).eq(...) +// .from(t).update(v).eq(c,v) +// .from(t).select(cols).eq(c,v) (list) +// Unique-violation (23505) is simulated on council_members.address and +// kyc_proposals.user_address so the 409 paths are covered. Everything lives in +// plain arrays — no network, no real DB. + +export function makeFakeSupabase (initial = {}) { + const tables = { + council_members: [], + kyc_proposals: [], + votes: [], + ...structuredCloneSafe(initial) + } + + const UNIQUE = { + council_members: 'address', + kyc_proposals: 'user_address' + } + + function from (name) { + const rows = tables[name] || (tables[name] = []) + const builder = { + _filters: [], + _count: null, + _head: false, + _update: null, + + insert (vals) { + const arr = Array.isArray(vals) ? vals : [vals] + for (const v of arr) { + const uniqueCol = UNIQUE[name] + if (uniqueCol && rows.some(r => r[uniqueCol] === v[uniqueCol])) { + return Promise.resolve({ error: { code: '23505' }, data: null }) + } + rows.push({ id: rows.length + 1, executed: false, created_at: new Date().toISOString(), ...v }) + } + return Promise.resolve({ error: null, data: null }) + }, + + select (cols, opts) { + if (opts) { + this._count = opts.count || null + this._head = !!opts.head + } + return this + }, + + eq (col, val) { + this._filters.push([col, val]) + return this + }, + + neq () { return this }, + + update (vals) { + this._update = vals + return this + }, + + _apply () { + return rows.filter(r => this._filters.every(([c, v]) => r[c] === v)) + }, + + single () { + const found = this._apply() + if (found.length === 0) { + return Promise.resolve({ data: null, error: { code: 'PGRST116', message: 'no rows' } }) + } + return Promise.resolve({ data: found[0], error: null }) + }, + + // Thenable terminal for chains awaited without .single() + then (resolve, reject) { + try { + const found = this._apply() + if (this._update) { + found.forEach(r => Object.assign(r, this._update)) + return resolve({ error: null, data: found }) + } + if (this._count) { + return resolve({ count: found.length, error: null, data: this._head ? null : found }) + } + return resolve({ data: found, error: null }) + } catch (err) { + return reject(err) + } + } + } + return builder + } + + return { from, _tables: tables } +} + +function structuredCloneSafe (obj) { + const out = {} + for (const [k, v] of Object.entries(obj)) out[k] = v.map(r => ({ ...r })) + return out +} diff --git a/backend/test/indexer.test.js b/backend/test/indexer.test.js new file mode 100644 index 00000000..bef3ffa1 --- /dev/null +++ b/backend/test/indexer.test.js @@ -0,0 +1,152 @@ +// Offline indexer tests — in-memory sqlite, no live chain. +// Run: node --test + +import { test } from 'node:test' +import assert from 'node:assert/strict' +import request from 'supertest' +import { initDb, saveTransfer, parseExtrinsic, indexBlock, createApp } from '../src/indexer.js' + +// --- fixtures --------------------------------------------------------------- + +// Build a decoded-extrinsic look-alike matching the shape parseExtrinsic reads. +function mkEx ({ section, method, args, hash, signer }) { + return { + method: { section, method, args }, + signer: { toString: () => signer }, + hash: { toHex: () => hash } + } +} + +const scalar = (s) => ({ toString: () => s }) +const numeric = (n) => ({ toNumber: () => n }) + +// --- parseExtrinsic --------------------------------------------------------- + +test('parseExtrinsic maps native balances.transfer to HEZ', () => { + const ex = mkEx({ + section: 'balances', + method: 'transfer', + args: [scalar('5Receiver'), scalar('1000')], + hash: '0xhez1', + signer: '5Sender' + }) + const t = parseExtrinsic(ex, 42) + assert.deepEqual(t, { + hash: '0xhez1', + sender: '5Sender', + receiver: '5Receiver', + amount: '1000', + asset_id: null, + symbol: 'HEZ', + block_number: 42 + }) +}) + +test('parseExtrinsic maps balances.transferKeepAlive to HEZ', () => { + const ex = mkEx({ + section: 'balances', + method: 'transferKeepAlive', + args: [scalar('5R'), scalar('7')], + hash: '0xhez2', + signer: '5S' + }) + assert.equal(parseExtrinsic(ex, 1).symbol, 'HEZ') +}) + +test('parseExtrinsic maps asset ids to PEZ/USDT/ASSET-n', () => { + const mk = (id) => mkEx({ + section: 'assets', + method: 'transfer', + args: [numeric(id), scalar('5R'), scalar('9')], + hash: `0xa${id}`, + signer: '5S' + }) + assert.equal(parseExtrinsic(mk(1), 1).symbol, 'PEZ') + assert.equal(parseExtrinsic(mk(1000), 1).symbol, 'USDT') + assert.equal(parseExtrinsic(mk(5), 1).symbol, 'ASSET-5') + assert.equal(parseExtrinsic(mk(5), 1).asset_id, 5) +}) + +test('parseExtrinsic ignores non-transfer extrinsics', () => { + const ex = mkEx({ + section: 'system', + method: 'remark', + args: [scalar('hi')], + hash: '0xnope', + signer: '5S' + }) + assert.equal(parseExtrinsic(ex, 1), null) +}) + +// --- dedup + persistence ---------------------------------------------------- + +test('saveTransfer dedups on hash (INSERT OR IGNORE)', async () => { + const db = await initDb(':memory:') + const tx = { + hash: '0xdup', + sender: '5S', + receiver: '5R', + amount: '100', + asset_id: null, + symbol: 'HEZ', + block_number: 10 + } + await saveTransfer(db, tx) + await saveTransfer(db, tx) // same hash again — must be a no-op + const { total } = await db.get('SELECT COUNT(*) as total FROM transfers') + assert.equal(total, 1) + await db.close() +}) + +test('indexBlock persists only transfer extrinsics from a block', async () => { + const db = await initDb(':memory:') + const signedBlock = { + block: { + extrinsics: [ + mkEx({ section: 'balances', method: 'transfer', args: [scalar('5R'), scalar('1')], hash: '0x1', signer: '5A' }), + mkEx({ section: 'system', method: 'remark', args: [scalar('x')], hash: '0x2', signer: '5A' }), + mkEx({ section: 'assets', method: 'transfer', args: [numeric(1000), scalar('5R'), scalar('2')], hash: '0x3', signer: '5B' }) + ] + } + } + await indexBlock(db, signedBlock, 99) + const rows = await db.all('SELECT hash, symbol FROM transfers ORDER BY hash') + assert.equal(rows.length, 2) + assert.deepEqual(rows.map(r => r.symbol).sort(), ['HEZ', 'USDT']) + await db.close() +}) + +// --- HTTP surface ----------------------------------------------------------- + +test('GET /health returns 200 ok', async () => { + const db = await initDb(':memory:') + const app = createApp(db) + const res = await request(app).get('/health') + assert.equal(res.statusCode, 200) + assert.equal(res.body.status, 'ok') + await db.close() +}) + +test('GET /api/stats reflects indexed count', async () => { + const db = await initDb(':memory:') + await saveTransfer(db, { hash: '0xs1', sender: 'a', receiver: 'b', amount: '1', asset_id: null, symbol: 'HEZ', block_number: 1 }) + const app = createApp(db) + const res = await request(app).get('/api/stats') + assert.equal(res.statusCode, 200) + assert.equal(res.body.total, 1) + await db.close() +}) + +test('GET /api/history/:address filters by sender or receiver', async () => { + const db = await initDb(':memory:') + await saveTransfer(db, { hash: '0xh1', sender: 'alice', receiver: 'bob', amount: '1', asset_id: null, symbol: 'HEZ', block_number: 2 }) + await saveTransfer(db, { hash: '0xh2', sender: 'carol', receiver: 'dave', amount: '1', asset_id: null, symbol: 'HEZ', block_number: 3 }) + await saveTransfer(db, { hash: '0xh3', sender: 'eve', receiver: 'alice', amount: '1', asset_id: null, symbol: 'HEZ', block_number: 4 }) + const app = createApp(db) + const res = await request(app).get('/api/history/alice') + assert.equal(res.statusCode, 200) + assert.equal(res.body.length, 2) // sent one, received one + const hashes = res.body.map(r => r.hash).sort() + assert.deepEqual(hashes, ['0xh1', '0xh3']) + await db.close() +}) diff --git a/package.json b/package.json index f4f61775..d5dbff90 100644 --- a/package.json +++ b/package.json @@ -6,16 +6,16 @@ "scripts": { "build": "npm run build:web && npm run build:sdk-ui && npm run build:mobile", "build:web": "cd web && npm run build", - "build:sdk-ui": "cd /home/mamostehp/pezkuwi-sdk-ui && yarn build", + "build:sdk-ui": "cd \"${SDK_UI_DIR:-../pezkuwi-sdk-ui}\" 2>/dev/null && yarn build || echo 'sdk-ui: skipped (set SDK_UI_DIR to the pezkuwi-sdk-ui checkout to enable)'", "build:mobile": "cd mobile && npx expo export --platform web", "build:parallel": "concurrently \"npm run build:web\" \"npm run build:sdk-ui\"", "dev": "concurrently \"npm run dev:web\" \"npm run dev:mobile\"", "dev:web": "cd web && npm run dev", - "dev:sdk-ui": "cd /home/mamostehp/pezkuwi-sdk-ui && yarn start", + "dev:sdk-ui": "cd \"${SDK_UI_DIR:-../pezkuwi-sdk-ui}\" && yarn start", "dev:mobile": "cd mobile && npm run dev", "install:all": "npm run install:web && npm run install:sdk-ui && npm run install:mobile && npm run install:backend", "install:web": "cd web && npm install", - "install:sdk-ui": "cd /home/mamostehp/pezkuwi-sdk-ui && yarn install", + "install:sdk-ui": "cd \"${SDK_UI_DIR:-../pezkuwi-sdk-ui}\" 2>/dev/null && yarn install || echo 'sdk-ui: skipped (set SDK_UI_DIR to the pezkuwi-sdk-ui checkout to enable)'", "install:mobile": "cd mobile && npm install", "install:backend": "cd backend && npm install", "lint": "npm run lint:web && npm run lint:mobile", diff --git a/shared/lib/p2p-fiat.ts b/shared/lib/p2p-fiat.ts index f0de9164..243ab552 100644 --- a/shared/lib/p2p-fiat.ts +++ b/shared/lib/p2p-fiat.ts @@ -119,6 +119,8 @@ export interface P2PReputation { export interface CreateOfferParams { userId: string; + /** Citizen/visa identity id (needed to authorize the escrow lock) */ + identityId: string; sellerWallet: string; token: CryptoToken; amountCrypto: number; @@ -130,6 +132,8 @@ export interface CreateOfferParams { minOrderAmount?: number; maxOrderAmount?: number; adType?: 'buy' | 'sell'; + /** Signs a message with the wallet that owns `identityId` (signRaw) */ + signMessage: (message: string) => Promise; } export interface AcceptOfferParams { @@ -375,9 +379,54 @@ async function decryptPaymentDetails(encrypted: string): Promise { const { userId, + identityId, sellerWallet, token, amountCrypto, @@ -388,19 +437,42 @@ export async function createFiatOffer(params: CreateOfferParams): Promise { +export async function confirmPaymentReceived( + tradeId: string, + sellerIdentity: string, + signerAddress: string, + signMessage: (message: string) => Promise +): Promise { try { - if (!sellerId) throw new Error('Identity required for P2P trading'); + if (!sellerIdentity) throw new Error('Identity required for P2P trading'); + if (!signerAddress) throw new Error('Connect a wallet to release escrow'); - // 2. Get trade details - const { data: trade, error: tradeError } = await supabase - .from('p2p_fiat_trades') - .select('*') - .eq('id', tradeId) - .single(); - - if (tradeError) throw tradeError; - if (!trade) throw new Error('Trade not found'); - - // Verify caller is the seller - if (trade.seller_id !== sellerId) { - throw new Error('Only seller can confirm payment'); - } - - if (trade.status !== 'payment_sent') { - throw new Error('Payment has not been marked as sent'); - } - - // 3. Get offer to get token type - const { data: offer } = await supabase - .from('p2p_fiat_offers') - .select('token') - .eq('id', trade.offer_id) - .single(); - - if (!offer) throw new Error('Offer not found'); - - toast.info('Releasing crypto to buyer...'); - - // 4. Release escrow internally (NO blockchain tx!) - // This transfers from seller's locked_balance to buyer's available_balance - const { data: releaseResult, error: releaseError } = await supabase.rpc('release_escrow_internal', { - p_from_user_id: trade.seller_id, - p_to_user_id: trade.buyer_id, - p_token: offer.token, - p_amount: trade.crypto_amount, - p_reference_type: 'trade', - p_reference_id: tradeId + // Release is a money-OUT action: it is authorized ONLY via the confirm-payment + // edge function, which verifies the seller's wallet signature + identity + // ownership before calling release_escrow_internal with the service role. + // release_escrow_internal is no longer callable with the anon key. + const timestamp = Date.now(); + const nonce = `cp-${timestamp}-${Math.random().toString(36).slice(2)}-${Math.random().toString(36).slice(2)}`; + const challenge = buildConfirmPaymentChallenge({ + tradeId, + sellerIdentity, + signerAddress, + timestamp, + nonce, }); - if (releaseError) throw releaseError; + toast.info('Sign to release crypto to the buyer...'); + const signature = await signMessage(challenge); - // Parse result - const releaseResponse = typeof releaseResult === 'string' ? JSON.parse(releaseResult) : releaseResult; + const { data, error } = await supabase.functions.invoke('confirm-payment', { + body: { tradeId, sellerIdentity, signerAddress, signature, timestamp, nonce }, + }); - if (!releaseResponse.success) { - throw new Error(releaseResponse.error || 'Failed to release escrow'); + if (error) throw error; + if (!data?.success) { + throw new Error(data?.error || 'Failed to release escrow'); } - // 5. Update trade status - const { error: updateError } = await supabase - .from('p2p_fiat_trades') - .update({ - seller_confirmed_at: new Date().toISOString(), - escrow_released_at: new Date().toISOString(), - status: 'completed', - completed_at: new Date().toISOString() - // NOTE: No escrow_release_tx_hash - internal ledger doesn't use blockchain during trades - }) - .eq('id', tradeId); - - if (updateError) throw updateError; - - // 6. Update reputations - await updateReputations(trade.seller_id, trade.buyer_id, tradeId); - - // 7. Audit log - await logAction('trade', tradeId, 'confirm_payment', { - released_amount: trade.crypto_amount, - token: offer.token, - escrow_type: 'internal_ledger' - }, sellerId); + // Non-financial follow-ups (best effort). The escrow move + trade status + // change already happened atomically server-side. + try { + await updateReputations(data.sellerId, data.buyerId, tradeId); + await logAction('trade', tradeId, 'confirm_payment', { + released_amount: data.amount, + token: data.token, + escrow_type: 'internal_ledger' + }, data.sellerId); + } catch (followupErr) { + console.error('Post-release follow-up failed (non-critical):', followupErr); + } toast.success('Payment confirmed! Crypto released to buyer\'s balance.'); } catch (error: unknown) { @@ -1023,18 +1057,53 @@ export async function getInternalBalance(userId: string, token: CryptoToken): Pr } /** - * Request a withdrawal from internal balance to external wallet - * Calls the process-withdraw edge function which handles the full flow: - * limit check → lock balance → blockchain TX → complete withdrawal + * Canonical withdrawal challenge string. MUST be byte-identical to the server's + * buildWithdrawChallenge (web/supabase/functions/_shared/identity-auth.ts). + */ +export function buildWithdrawChallenge(p: { + identityId: string; + token: string; + amount: number; + destination: string; + signerAddress: string; + timestamp: number; + nonce: string; +}): string { + return [ + 'Pezkuwi P2P Withdrawal', + `identity:${p.identityId}`, + `token:${p.token}`, + `amount:${p.amount}`, + `destination:${p.destination}`, + `signer:${p.signerAddress}`, + `timestamp:${p.timestamp}`, + `nonce:${p.nonce}`, + ].join('\n'); +} + +/** + * Request a withdrawal from internal balance to external wallet. + * + * AUTHORIZATION: the caller must prove ownership of the P2P identity by signing + * a challenge with the wallet that owns it (citizen NFT / visa). The edge + * function derives the user_id server-side from `identityId` after verifying the + * signature and identity ownership — a client-supplied user_id is never trusted. + * + * @param identityId Citizen number (#42--<6d>) or visa number (V-XXXXXX) + * @param signerAddress The connected wallet (must own the identity) + * @param signMessage Signs a message with the connected wallet (signRaw) */ export async function requestWithdraw( - userId: string, + identityId: string, token: CryptoToken, amount: number, - walletAddress: string + walletAddress: string, + signerAddress: string, + signMessage: (message: string) => Promise ): Promise { try { - if (!userId) throw new Error('Identity required for P2P trading'); + if (!identityId) throw new Error('Identity required for P2P trading'); + if (!signerAddress) throw new Error('Connect a wallet to withdraw'); // Validate amount if (amount <= 0) throw new Error('Amount must be greater than 0'); @@ -1044,10 +1113,26 @@ export async function requestWithdraw( throw new Error('Invalid wallet address'); } + // Build + sign the authorization challenge binding the full withdrawal intent. + const timestamp = Date.now(); + const nonce = `wd-${timestamp}-${Math.random().toString(36).slice(2)}-${Math.random().toString(36).slice(2)}`; + const challenge = buildWithdrawChallenge({ + identityId, + token, + amount, + destination: walletAddress, + signerAddress, + timestamp, + nonce, + }); + + toast.info('Sign the request in your wallet to authorize the withdrawal...'); + const signature = await signMessage(challenge); + toast.info('Processing withdrawal...'); const { data, error, response } = await supabase.functions.invoke('process-withdraw', { - body: { userId, token, amount, walletAddress } + body: { identityId, token, amount, walletAddress, signerAddress, signature, timestamp, nonce } }); // Supabase client wraps non-2xx as generic FunctionsHttpError (data=null). @@ -1085,15 +1170,14 @@ export async function getDepositWithdrawHistory(userId: string): Promise { +export async function getBalanceTransactionHistory(userId: string, limit: number = 50): Promise { try { - const { data, error } = await supabase - .from('p2p_balance_transactions') - .select('*') - .order('created_at', { ascending: false }) - .limit(limit); + if (!userId) throw new Error('Identity required for P2P trading'); + + // Scoped SECURITY DEFINER RPC — returns only this user's ledger rows + // (the previous unfiltered SELECT * exposed every user's transactions). + const { data, error } = await supabase.rpc('get_user_balance_transactions', { + p_user_id: userId, + p_limit: limit, + }); if (error) throw error; - return data || []; + return (data as BalanceTransaction[]) || []; } catch (error) { console.error('Get balance transaction history error:', error); return []; diff --git a/shared/lib/presale.ts b/shared/lib/presale.ts index 317b5a83..c5079ee4 100644 --- a/shared/lib/presale.ts +++ b/shared/lib/presale.ts @@ -445,6 +445,10 @@ export async function contribute( if (status.isInBlock) { onStatus?.('Transaction in block...'); } + if (status.isDropped || status.isInvalid || status.isUsurped || status.isRetracted) { + resolve({ success: false, error: 'Transaction was dropped or invalidated by the network. Please try again.' }); + return; + } if (status.isFinalized) { if (dispatchError) { let errorMessage = 'Transaction failed'; @@ -489,6 +493,10 @@ export async function refund( if (status.isInBlock) { onStatus?.('Refund in block...'); } + if (status.isDropped || status.isInvalid || status.isUsurped || status.isRetracted) { + resolve({ success: false, error: 'Refund was dropped or invalidated by the network. Please try again.' }); + return; + } if (status.isFinalized) { if (dispatchError) { let errorMessage = 'Refund failed'; @@ -533,6 +541,10 @@ export async function claimVested( if (status.isInBlock) { onStatus?.('Claim in block...'); } + if (status.isDropped || status.isInvalid || status.isUsurped || status.isRetracted) { + resolve({ success: false, error: 'Claim was dropped or invalidated by the network. Please try again.' }); + return; + } if (status.isFinalized) { if (dispatchError) { let errorMessage = 'Claim failed'; diff --git a/web/Dockerfile b/web/Dockerfile index 6b5b51b9..facd1c91 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -49,5 +49,5 @@ WORKDIR /dist COPY --from=builder /build/web/dist /dist LABEL org.opencontainers.image.source="https://github.com/pezkuwichain/pwap" LABEL org.opencontainers.image.description="pwap/web static SPA — Pezkuwi wallet/exchange frontend" -LABEL org.opencontainers.image.licenses="proprietary" +LABEL org.opencontainers.image.licenses="MIT" CMD ["sh", "-c", "echo 'pwap-web image — extract /dist via: docker create + docker cp'; sleep infinity"] diff --git a/web/eslint.config.js b/web/eslint.config.js index 3b2f2fb5..814e1b64 100644 --- a/web/eslint.config.js +++ b/web/eslint.config.js @@ -8,6 +8,8 @@ export default tseslint.config( { ignores: [ "dist/**", + "supabase/functions/**", + "supabase/migrations/**", "node_modules/**", "eslint.config.js", "postcss.config.js", diff --git a/web/generate-docs-structure.cjs b/web/generate-docs-structure.cjs index b74fa275..40e29bb6 100644 --- a/web/generate-docs-structure.cjs +++ b/web/generate-docs-structure.cjs @@ -17,8 +17,23 @@ const rustdocDestPath = path.join(publicPath, 'sdk_docs'); // Destination for BU const structureOutputPath = path.join(publicPath, 'docs-structure.json'); const rustdocBuildOutputPath = path.join(pezkuwiSdkRoot, 'target', 'doc'); // Output of cargo doc -// Absolute path to rustup (used to build rustdoc) -const rustupPath = '/home/mamostehp/.cargo/bin/rustup'; +// Path to rustup (used to build rustdoc). Resolve dynamically instead of +// hardcoding a per-machine absolute path: prefer $RUSTUP_PATH, then whatever +// is on PATH, then the conventional ~/.cargo/bin/rustup, then bare 'rustup'. +function resolveRustupPath() { + if (process.env.RUSTUP_PATH) return process.env.RUSTUP_PATH; + try { + const which = spawnSync('bash', ['-lc', 'command -v rustup'], { encoding: 'utf8' }); + if (which.status === 0 && which.stdout && which.stdout.trim()) { + return which.stdout.trim(); + } + } catch { /* fall through */ } + const home = process.env.HOME || require('os').homedir(); + const cargoRustup = path.join(home, '.cargo', 'bin', 'rustup'); + if (fs.existsSync(cargoRustup)) return cargoRustup; + return 'rustup'; +} +const rustupPath = resolveRustupPath(); // Path to the rebranding script (now .cjs) const rebrandScriptPath = path.join(__dirname, 'rebrand-rustdoc.cjs'); diff --git a/web/mimari.txt b/web/mimari.txt deleted file mode 100644 index fe6167ef..00000000 --- a/web/mimari.txt +++ /dev/null @@ -1,36907 +0,0 @@ -.: -LICENSE -MULTISIG_CONFIG.md -README.md -SECURITY.md -USDT_MULTISIG_SETUP.md -check-all-pools.mjs -check-asset-metadata.mjs -check-balances.mjs -check-current-state.mjs -check-native-hez.mjs -check-pool-state.mjs -check-whez-owner-balance.mjs -check-whez-ownership.mjs -components.json -dist -index.html -mimari.txt -mint-whez-for-pools.mjs -package-lock.json -package.json -public -setup-all-pools-correct.mjs -setup-whez-pez-pool.mjs -src -sudo-force-mint-whez.mjs -sudo-setteam-and-mint-whez.mjs -sudo-transfer-and-mint-whez.mjs -supabase -tailwind.config.ts -tsconfig.app.json -tsconfig.json -tsconfig.node.json -vite.config.ts -wrap-hez.mjs - -./dist: -DKstate.png -Whitepaper.pdf -assets -index.html -pezkuwichain_logo.png -placeholder.svg -robots.txt - -./dist/assets: -index-B7vMAl0l.js -index-C3erdOIB.js -index-DNb1NUEb.css -index-VGrcO7Nb.js -packageInfo-BM6cBJdR.js - -@alloc -@babel -@esbuild -@eslint -@eslint-community -@floating-ui -@hookform -@humanfs -@humanwhocodes -@isaacs -@jridgewell -@noble -@nodelib -@pkgjs -@polkadot -@polkadot-api -@radix-ui -@remix-run -@rolldown -@rollup -@scure -@substrate -@supabase -@swc -@tailwindcss -@tanstack -@types -@typescript-eslint -@vitejs -acorn -acorn-jsx -ajv -ansi-regex -ansi-styles -any-promise -anymatch -arg -argparse -aria-hidden -autoprefixer -balanced-match -baseline-browser-mapping -binary-extensions -bn.js -brace-expansion -braces -browserslist -callsites -camelcase -camelcase-css -caniuse-lite -chalk -chokidar -class-variance-authority -cliui -clsx -cmdk -color-convert -color-name -commander -concat-map -cross-spawn -cssesc -csstype -d3-array -d3-color -d3-ease -d3-format -d3-interpolate -d3-path -d3-scale -d3-shape -d3-time -d3-time-format -d3-timer -data-uri-to-buffer -date-fns -debug -decamelize -decimal.js-light -deep-is -detect-node-es -didyoumean -dijkstrajs -dlv -dom-helpers -eastasianwidth -electron-to-chromium -embla-carousel -embla-carousel-react -embla-carousel-reactive-utils -emoji-regex -esbuild -escalade -escape-string-regexp -eslint -eslint-plugin-react-hooks -eslint-plugin-react-refresh -eslint-scope -eslint-visitor-keys -espree -esquery -esrecurse -estraverse -esutils -eventemitter3 -fast-deep-equal -fast-equals -fast-glob -fast-json-stable-stringify -fast-levenshtein -fastq -fetch-blob -file-entry-cache -fill-range -find-up -flat-cache -flatted -foreground-child -formdata-polyfill -fraction.js -function-bind -get-caller-file -get-nonce -glob -glob-parent -globals -graphemer -has-flag -hasown -highlight.js -html-parse-stringify -i18next -i18next-browser-languagedetector -ignore -import-fresh -imurmurhash -input-otp -internmap -is-binary-path -is-core-module -is-extglob -is-fullwidth-code-point -is-glob -is-number -isexe -jackspeak -jiti -js-tokens -js-yaml -json-buffer -json-schema-traverse -json-stable-stringify-without-jsonify -json-stringify-safe -keyv -levn -lilconfig -lines-and-columns -locate-path -lodash -lodash.merge -loose-envify -lru-cache -lucide-react -marked -merge2 -micromatch -minimatch -minipass -mock-socket -ms -mz -nanoid -natural-compare -next-themes -nock -node-domexception -node-fetch -node-releases -normalize-path -normalize-range -object-assign -object-hash -optionator -p-limit -p-locate -p-try -package-json-from-dist -parent-module -path-exists -path-key -path-parse -path-scurry -picocolors -picomatch -pify -pirates -pngjs -postcss -postcss-import -postcss-js -postcss-load-config -postcss-nested -postcss-selector-parser -postcss-value-parser -prelude-ls -prop-types -propagate -punycode -qrcode -queue-microtask -react -react-day-picker -react-dom -react-hook-form -react-i18next -react-is -react-remove-scroll -react-remove-scroll-bar -react-resizable-panels -react-router -react-router-dom -react-smooth -react-style-singleton -react-transition-group -read-cache -readdirp -recharts -recharts-scale -require-directory -require-main-filename -resolve -resolve-from -reusify -rollup -run-parallel -rxjs -scale-ts -scheduler -semver -set-blocking -shebang-command -shebang-regex -signal-exit -smoldot -sonner -source-map-js -string-width -string-width-cjs -strip-ansi -strip-ansi-cjs -strip-json-comments -sucrase -supports-color -supports-preserve-symlinks-flag -tailwind-merge -tailwindcss -tailwindcss-animate -thenify -thenify-all -tiny-invariant -to-regex-range -tr46 -ts-api-utils -ts-interface-checker -tslib -type-check -typescript -typescript-eslint -undici-types -update-browserslist-db -uri-js -use-callback-ref -use-sidecar -use-sync-external-store -util-deprecate -uuid -vaul -victory-vendor -vite -void-elements -web-streams-polyfill -webidl-conversions -whatwg-url -which -which-module -word-wrap -wrap-ansi -wrap-ansi-cjs -ws -y18n -yargs -yargs-parser -yocto-queue -zod - -quick-lru - -index.d.ts -index.js -license -package.json -readme.md - -runtime - -LICENSE -README.md -helpers -package.json -regenerator - -AwaitValue.js -OverloadYield.js -applyDecoratedDescriptor.js -applyDecs.js -applyDecs2203.js -applyDecs2203R.js -applyDecs2301.js -applyDecs2305.js -applyDecs2311.js -arrayLikeToArray.js -arrayWithHoles.js -arrayWithoutHoles.js -assertClassBrand.js -assertThisInitialized.js -asyncGeneratorDelegate.js -asyncIterator.js -asyncToGenerator.js -awaitAsyncGenerator.js -callSuper.js -checkInRHS.js -checkPrivateRedeclaration.js -classApplyDescriptorDestructureSet.js -classApplyDescriptorGet.js -classApplyDescriptorSet.js -classCallCheck.js -classCheckPrivateStaticAccess.js -classCheckPrivateStaticFieldDescriptor.js -classExtractFieldDescriptor.js -classNameTDZError.js -classPrivateFieldDestructureSet.js -classPrivateFieldGet.js -classPrivateFieldGet2.js -classPrivateFieldInitSpec.js -classPrivateFieldLooseBase.js -classPrivateFieldLooseKey.js -classPrivateFieldSet.js -classPrivateFieldSet2.js -classPrivateGetter.js -classPrivateMethodGet.js -classPrivateMethodInitSpec.js -classPrivateMethodSet.js -classPrivateSetter.js -classStaticPrivateFieldDestructureSet.js -classStaticPrivateFieldSpecGet.js -classStaticPrivateFieldSpecSet.js -classStaticPrivateMethodGet.js -classStaticPrivateMethodSet.js -construct.js -createClass.js -createForOfIteratorHelper.js -createForOfIteratorHelperLoose.js -createSuper.js -decorate.js -defaults.js -defineAccessor.js -defineEnumerableProperties.js -defineProperty.js -dispose.js -esm -extends.js -get.js -getPrototypeOf.js -identity.js -importDeferProxy.js -inherits.js -inheritsLoose.js -initializerDefineProperty.js -initializerWarningHelper.js -instanceof.js -interopRequireDefault.js -interopRequireWildcard.js -isNativeFunction.js -isNativeReflectConstruct.js -iterableToArray.js -iterableToArrayLimit.js -jsx.js -maybeArrayLike.js -newArrowCheck.js -nonIterableRest.js -nonIterableSpread.js -nullishReceiverError.js -objectDestructuringEmpty.js -objectSpread.js -objectSpread2.js -objectWithoutProperties.js -objectWithoutPropertiesLoose.js -possibleConstructorReturn.js -readOnlyError.js -regenerator.js -regeneratorAsync.js -regeneratorAsyncGen.js -regeneratorAsyncIterator.js -regeneratorDefine.js -regeneratorKeys.js -regeneratorRuntime.js -regeneratorValues.js -set.js -setFunctionName.js -setPrototypeOf.js -skipFirstGeneratorNext.js -slicedToArray.js -superPropBase.js -superPropGet.js -superPropSet.js -taggedTemplateLiteral.js -taggedTemplateLiteralLoose.js -tdz.js -temporalRef.js -temporalUndefined.js -toArray.js -toConsumableArray.js -toPrimitive.js -toPropertyKey.js -toSetter.js -tsRewriteRelativeImportExtensions.js -typeof.js -unsupportedIterableToArray.js -using.js -usingCtx.js -wrapAsyncGenerator.js -wrapNativeSuper.js -wrapRegExp.js -writeOnlyError.js - -AwaitValue.js -OverloadYield.js -applyDecoratedDescriptor.js -applyDecs.js -applyDecs2203.js -applyDecs2203R.js -applyDecs2301.js -applyDecs2305.js -applyDecs2311.js -arrayLikeToArray.js -arrayWithHoles.js -arrayWithoutHoles.js -assertClassBrand.js -assertThisInitialized.js -asyncGeneratorDelegate.js -asyncIterator.js -asyncToGenerator.js -awaitAsyncGenerator.js -callSuper.js -checkInRHS.js -checkPrivateRedeclaration.js -classApplyDescriptorDestructureSet.js -classApplyDescriptorGet.js -classApplyDescriptorSet.js -classCallCheck.js -classCheckPrivateStaticAccess.js -classCheckPrivateStaticFieldDescriptor.js -classExtractFieldDescriptor.js -classNameTDZError.js -classPrivateFieldDestructureSet.js -classPrivateFieldGet.js -classPrivateFieldGet2.js -classPrivateFieldInitSpec.js -classPrivateFieldLooseBase.js -classPrivateFieldLooseKey.js -classPrivateFieldSet.js -classPrivateFieldSet2.js -classPrivateGetter.js -classPrivateMethodGet.js -classPrivateMethodInitSpec.js -classPrivateMethodSet.js -classPrivateSetter.js -classStaticPrivateFieldDestructureSet.js -classStaticPrivateFieldSpecGet.js -classStaticPrivateFieldSpecSet.js -classStaticPrivateMethodGet.js -classStaticPrivateMethodSet.js -construct.js -createClass.js -createForOfIteratorHelper.js -createForOfIteratorHelperLoose.js -createSuper.js -decorate.js -defaults.js -defineAccessor.js -defineEnumerableProperties.js -defineProperty.js -dispose.js -extends.js -get.js -getPrototypeOf.js -identity.js -importDeferProxy.js -inherits.js -inheritsLoose.js -initializerDefineProperty.js -initializerWarningHelper.js -instanceof.js -interopRequireDefault.js -interopRequireWildcard.js -isNativeFunction.js -isNativeReflectConstruct.js -iterableToArray.js -iterableToArrayLimit.js -jsx.js -maybeArrayLike.js -newArrowCheck.js -nonIterableRest.js -nonIterableSpread.js -nullishReceiverError.js -objectDestructuringEmpty.js -objectSpread.js -objectSpread2.js -objectWithoutProperties.js -objectWithoutPropertiesLoose.js -package.json -possibleConstructorReturn.js -readOnlyError.js -regenerator.js -regeneratorAsync.js -regeneratorAsyncGen.js -regeneratorAsyncIterator.js -regeneratorDefine.js -regeneratorKeys.js -regeneratorRuntime.js -regeneratorValues.js -set.js -setFunctionName.js -setPrototypeOf.js -skipFirstGeneratorNext.js -slicedToArray.js -superPropBase.js -superPropGet.js -superPropSet.js -taggedTemplateLiteral.js -taggedTemplateLiteralLoose.js -tdz.js -temporalRef.js -temporalUndefined.js -toArray.js -toConsumableArray.js -toPrimitive.js -toPropertyKey.js -toSetter.js -tsRewriteRelativeImportExtensions.js -typeof.js -unsupportedIterableToArray.js -using.js -usingCtx.js -wrapAsyncGenerator.js -wrapNativeSuper.js -wrapRegExp.js -writeOnlyError.js - -index.js - -linux-x64 - -README.md -bin -package.json - -esbuild - -config-array -config-helpers -core -eslintrc -js -object-schema -plugin-kit - -LICENSE -README.md -dist -package.json - -cjs -esm - -index.cjs -index.d.cts -std__path -types.cts - -posix.cjs -windows.cjs - -index.d.ts -index.js -std__path -types.d.ts -types.ts - -posix.js -windows.js - -LICENSE -README.md -dist -package.json - -cjs -esm - -index.cjs -index.d.cts -types.cts - -index.d.ts -index.js -types.d.ts -types.ts - -LICENSE -README.md -dist -package.json - -cjs -esm - -types.d.cts - -types.d.ts - -LICENSE -README.md -conf -dist -lib -package.json -universal.js - -config-schema.js -environments.js - -eslintrc-universal.cjs -eslintrc-universal.cjs.map -eslintrc.cjs -eslintrc.cjs.map -eslintrc.d.cts - -cascading-config-array-factory.js -config-array -config-array-factory.js -flat-compat.js -index-universal.js -index.js -shared -types - -config-array.js -config-dependency.js -extracted-config.js -ignore-pattern.js -index.js -override-tester.js - -ajv.js -config-ops.js -config-validator.js -deep-merge-arrays.js -deprecation-warnings.js -naming.js -relative-module-resolver.js -types.js - -index.d.ts - -globals - -globals.json -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -package.json -src -types - -configs -index.js - -eslint-all.js -eslint-recommended.js - -index.d.ts - -LICENSE -README.md -dist -package.json - -cjs -esm - -index.cjs -index.d.cts -types.cts - -index.d.ts -index.js -types.d.ts -types.ts - -LICENSE -README.md -dist -package.json - -cjs -esm - -index.cjs -index.d.cts -types.cts - -index.d.ts -index.js -types.d.ts -types.ts - -eslint-utils -regexpp - -LICENSE -README.md -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -package.json - -eslint-visitor-keys - -LICENSE -README.md -dist -lib -package.json - -eslint-visitor-keys.cjs -eslint-visitor-keys.d.cts -index.d.ts -visitor-keys.d.ts - -index.js -visitor-keys.js - -LICENSE -README.md -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -package.json - -core -dom -react-dom -utils - -LICENSE -README.md -dist -package.json - -floating-ui.core.browser.min.mjs -floating-ui.core.browser.mjs -floating-ui.core.d.mts -floating-ui.core.d.ts -floating-ui.core.esm.js -floating-ui.core.mjs -floating-ui.core.umd.js -floating-ui.core.umd.min.js - -LICENSE -README.md -dist -package.json - -floating-ui.dom.browser.min.mjs -floating-ui.dom.browser.mjs -floating-ui.dom.d.mts -floating-ui.dom.d.ts -floating-ui.dom.esm.js -floating-ui.dom.mjs -floating-ui.dom.umd.js -floating-ui.dom.umd.min.js - -LICENSE -README.md -dist -package.json - -floating-ui.react-dom.d.mts -floating-ui.react-dom.d.ts -floating-ui.react-dom.esm.js -floating-ui.react-dom.mjs -floating-ui.react-dom.umd.js -floating-ui.react-dom.umd.min.js - -LICENSE -README.md -dist -dom -package.json - -floating-ui.utils.d.mts -floating-ui.utils.d.ts -floating-ui.utils.dom.d.mts -floating-ui.utils.dom.d.ts -floating-ui.utils.dom.esm.js -floating-ui.utils.dom.mjs -floating-ui.utils.dom.umd.js -floating-ui.utils.dom.umd.min.js -floating-ui.utils.esm.js -floating-ui.utils.mjs -floating-ui.utils.umd.js -floating-ui.utils.umd.min.js - -floating-ui.utils.dom.d.ts -floating-ui.utils.dom.esm.js -floating-ui.utils.dom.umd.js -package.json - -resolvers - -LICENSE -README.md -ajv -arktype -class-validator -computed-types -dist -effect-ts -fluentvalidation-ts -io-ts -joi -nope -package.json -superstruct -typanion -typebox -typeschema -valibot -vest -vine -yup -zod - -dist -package.json -src - -ajv.d.ts -ajv.js -ajv.js.map -ajv.mjs -ajv.modern.mjs -ajv.modern.mjs.map -ajv.module.js -ajv.module.js.map -ajv.umd.js -ajv.umd.js.map -index.d.ts -types.d.ts - -__tests__ -ajv.ts -index.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -ajv.ts - -data.ts - -ajv.ts.snap - -dist -package.json -src - -arktype.d.ts -arktype.js -arktype.js.map -arktype.mjs -arktype.modern.mjs -arktype.modern.mjs.map -arktype.module.js -arktype.module.js.map -arktype.umd.js -arktype.umd.js.map -index.d.ts -types.d.ts - -__tests__ -arktype.ts -index.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -arktype.ts - -data.ts - -arktype.ts.snap - -dist -package.json -src - -class-validator.d.ts -class-validator.js -class-validator.js.map -class-validator.mjs -class-validator.modern.mjs -class-validator.modern.mjs.map -class-validator.module.js -class-validator.module.js.map -class-validator.umd.js -class-validator.umd.js.map -index.d.ts -types.d.ts - -__tests__ -class-validator.ts -index.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -class-validator.ts - -data.ts - -class-validator.ts.snap - -dist -package.json -src - -computed-types.d.ts -computed-types.js -computed-types.js.map -computed-types.mjs -computed-types.modern.mjs -computed-types.modern.mjs.map -computed-types.module.js -computed-types.module.js.map -computed-types.umd.js -computed-types.umd.js.map -index.d.ts -types.d.ts - -__tests__ -computed-types.ts -index.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -computed-types.ts - -data.ts - -computed-types.ts.snap - -index.d.ts -resolvers.js -resolvers.js.map -resolvers.mjs -resolvers.mjs.map -resolvers.module.js -resolvers.module.js.map -resolvers.umd.js -resolvers.umd.js.map -toNestErrors.d.ts -validateFieldsNatively.d.ts - -dist -package.json -src - -effect-ts.d.ts -effect-ts.js -effect-ts.js.map -effect-ts.mjs -effect-ts.modern.mjs -effect-ts.modern.mjs.map -effect-ts.module.js -effect-ts.module.js.map -effect-ts.umd.js -effect-ts.umd.js.map -index.d.ts -types.d.ts - -__tests__ -effect-ts.ts -index.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -effect-ts.ts - -data.ts - -effect-ts.ts.snap - -dist -package.json -src - -fluentvalidation-ts.d.ts -fluentvalidation-ts.js -fluentvalidation-ts.js.map -fluentvalidation-ts.mjs -fluentvalidation-ts.modern.mjs -fluentvalidation-ts.modern.mjs.map -fluentvalidation-ts.module.js -fluentvalidation-ts.module.js.map -fluentvalidation-ts.umd.js -fluentvalidation-ts.umd.js.map -index.d.ts - -__tests__ -fluentvalidation-ts.ts -index.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -fluentvalidation-ts.ts - -data.ts - -fluentvalidation-ts.ts.snap - -dist -package.json -src - -arrayToPath.d.ts -errorsToRecord.d.ts -index.d.ts -io-ts.d.ts -io-ts.js -io-ts.js.map -io-ts.mjs -io-ts.modern.mjs -io-ts.modern.mjs.map -io-ts.module.js -io-ts.module.js.map -io-ts.umd.js -io-ts.umd.js.map -types.d.ts - -__tests__ -arrayToPath.ts -errorsToRecord.ts -index.ts -io-ts.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -errorsToRecord.ts -io-ts.ts - -data.ts - -io-ts.ts.snap - -dist -package.json -src - -index.d.ts -joi.d.ts -joi.js -joi.js.map -joi.mjs -joi.modern.mjs -joi.modern.mjs.map -joi.module.js -joi.module.js.map -joi.umd.js -joi.umd.js.map -types.d.ts - -__tests__ -index.ts -joi.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -joi.ts - -data.ts - -joi.ts.snap - -dist -package.json -src - -index.d.ts -nope.d.ts -nope.js -nope.js.map -nope.mjs -nope.modern.mjs -nope.modern.mjs.map -nope.module.js -nope.module.js.map -nope.umd.js -nope.umd.js.map -types.d.ts - -__tests__ -index.ts -nope.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -nope.ts - -data.ts - -nope.ts.snap - -dist -package.json -src - -index.d.ts -superstruct.d.ts -superstruct.js -superstruct.js.map -superstruct.mjs -superstruct.modern.mjs -superstruct.modern.mjs.map -superstruct.module.js -superstruct.module.js.map -superstruct.umd.js -superstruct.umd.js.map -types.d.ts - -__tests__ -index.ts -superstruct.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -superstruct.ts - -data.ts - -superstruct.ts.snap - -dist -package.json -src - -index.d.ts -typanion.d.ts -typanion.js -typanion.js.map -typanion.mjs -typanion.modern.mjs -typanion.modern.mjs.map -typanion.module.js -typanion.module.js.map -typanion.umd.js -typanion.umd.js.map -types.d.ts - -__tests__ -index.ts -typanion.ts -types.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -typanion.ts - -data.ts - -typanion.ts.snap - -dist -package.json -src - -index.d.ts -typebox.d.ts -typebox.js -typebox.js.map -typebox.mjs -typebox.modern.mjs -typebox.modern.mjs.map -typebox.module.js -typebox.module.js.map -typebox.umd.js -typebox.umd.js.map -types.d.ts - -__tests__ -index.ts -typebox.ts -types.ts - -Form-compiler.tsx -Form-native-validation-compiler.tsx -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -typebox-compiler.ts -typebox.ts - -data.ts - -typebox-compiler.ts.snap -typebox.ts.snap - -dist -package.json -src - -index.d.ts -types.d.ts -typeschema.d.ts -typeschema.js -typeschema.js.map -typeschema.mjs -typeschema.modern.mjs -typeschema.modern.mjs.map -typeschema.module.js -typeschema.module.js.map -typeschema.umd.js -typeschema.umd.js.map - -__tests__ -index.ts -types.ts -typeschema.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -typeschema.ts - -data.ts - -typeschema.ts.snap - -dist -package.json -src - -index.d.ts -types.d.ts -valibot.d.ts -valibot.js -valibot.js.map -valibot.mjs -valibot.modern.mjs -valibot.modern.mjs.map -valibot.module.js -valibot.module.js.map -valibot.umd.js -valibot.umd.js.map - -__tests__ -index.ts -types.ts -valibot.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -valibot.ts - -data.ts - -valibot.ts.snap - -dist -package.json -src - -index.d.ts -types.d.ts -vest.d.ts -vest.js -vest.js.map -vest.mjs -vest.modern.mjs -vest.modern.mjs.map -vest.module.js -vest.module.js.map -vest.umd.js -vest.umd.js.map - -__tests__ -index.ts -types.ts -vest.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -vest.ts - -data.ts - -vest.ts.snap - -dist -package.json -src - -index.d.ts -types.d.ts -vine.d.ts -vine.js -vine.js.map -vine.mjs -vine.modern.mjs -vine.modern.mjs.map -vine.module.js -vine.module.js.map -vine.umd.js -vine.umd.js.map - -__tests__ -index.ts -types.ts -vine.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -vine.ts - -data.ts - -vine.ts.snap - -dist -package.json -src - -index.d.ts -yup.d.ts -yup.js -yup.js.map -yup.mjs -yup.modern.mjs -yup.modern.mjs.map -yup.module.js -yup.module.js.map -yup.umd.js -yup.umd.js.map - -__tests__ -index.ts -yup.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -yup.ts - -data.ts - -yup.ts.snap - -dist -package.json -src - -index.d.ts -types.d.ts -zod.d.ts -zod.js -zod.js.map -zod.mjs -zod.modern.mjs -zod.modern.mjs.map -zod.module.js -zod.module.js.map -zod.umd.js -zod.umd.js.map - -__tests__ -index.ts -types.ts -zod.ts - -Form-native-validation.tsx -Form.tsx -__fixtures__ -__snapshots__ -zod.ts - -data.ts - -zod.ts.snap - -core -node - -LICENSE -README.md -dist -package.json -src - -errors.d.ts -fsx.d.ts -hfs.d.ts -index.d.ts -path.d.ts - -errors.js -hfs.js -index.js -path.js - -LICENSE -README.md -dist -package.json -src - -index.d.ts -node-fsx.d.ts -node-hfs.d.ts - -index.js -node-hfs.js - -module-importer -retry - -CHANGELOG.md -LICENSE -README.md -dist -package.json -src - -module-importer.cjs -module-importer.d.cts -module-importer.d.ts -module-importer.js - -module-importer.cjs -module-importer.js - -LICENSE -README.md -dist -package.json - -retrier.cjs -retrier.d.cts -retrier.d.ts -retrier.js -retrier.min.js -retrier.mjs - -cliui - -LICENSE.txt -README.md -build -index.mjs -package.json - -index.cjs -index.d.cts -lib - -index.js - -gen-mapping -resolve-uri -sourcemap-codec -trace-mapping - -LICENSE -README.md -dist -package.json -src -types - -gen-mapping.mjs -gen-mapping.mjs.map -gen-mapping.umd.js -gen-mapping.umd.js.map -types - -gen-mapping.d.ts -set-array.d.ts -sourcemap-segment.d.ts -types.d.ts - -gen-mapping.ts -set-array.ts -sourcemap-segment.ts -types.ts - -gen-mapping.d.cts -gen-mapping.d.cts.map -gen-mapping.d.mts -gen-mapping.d.mts.map -set-array.d.cts -set-array.d.cts.map -set-array.d.mts -set-array.d.mts.map -sourcemap-segment.d.cts -sourcemap-segment.d.cts.map -sourcemap-segment.d.mts -sourcemap-segment.d.mts.map -types.d.cts -types.d.cts.map -types.d.mts -types.d.mts.map - -LICENSE -README.md -dist -package.json - -resolve-uri.mjs -resolve-uri.mjs.map -resolve-uri.umd.js -resolve-uri.umd.js.map -types - -resolve-uri.d.ts - -LICENSE -README.md -dist -package.json -src -types - -sourcemap-codec.mjs -sourcemap-codec.mjs.map -sourcemap-codec.umd.js -sourcemap-codec.umd.js.map - -scopes.ts -sourcemap-codec.ts -strings.ts -vlq.ts - -scopes.d.cts -scopes.d.cts.map -scopes.d.mts -scopes.d.mts.map -sourcemap-codec.d.cts -sourcemap-codec.d.cts.map -sourcemap-codec.d.mts -sourcemap-codec.d.mts.map -strings.d.cts -strings.d.cts.map -strings.d.mts -strings.d.mts.map -vlq.d.cts -vlq.d.cts.map -vlq.d.mts -vlq.d.mts.map - -LICENSE -README.md -dist -package.json -src -types - -trace-mapping.mjs -trace-mapping.mjs.map -trace-mapping.umd.js -trace-mapping.umd.js.map - -binary-search.ts -by-source.ts -flatten-map.ts -resolve.ts -sort.ts -sourcemap-segment.ts -strip-filename.ts -trace-mapping.ts -types.ts - -binary-search.d.cts -binary-search.d.cts.map -binary-search.d.mts -binary-search.d.mts.map -by-source.d.cts -by-source.d.cts.map -by-source.d.mts -by-source.d.mts.map -flatten-map.d.cts -flatten-map.d.cts.map -flatten-map.d.mts -flatten-map.d.mts.map -resolve.d.cts -resolve.d.cts.map -resolve.d.mts -resolve.d.mts.map -sort.d.cts -sort.d.cts.map -sort.d.mts -sort.d.mts.map -sourcemap-segment.d.cts -sourcemap-segment.d.cts.map -sourcemap-segment.d.mts -sourcemap-segment.d.mts.map -strip-filename.d.cts -strip-filename.d.cts.map -strip-filename.d.mts -strip-filename.d.mts.map -trace-mapping.d.cts -trace-mapping.d.cts.map -trace-mapping.d.mts -trace-mapping.d.mts.map -types.d.cts -types.d.cts.map -types.d.mts -types.d.mts.map - -curves -hashes - -LICENSE -README.md -_shortw_utils.d.ts -_shortw_utils.d.ts.map -_shortw_utils.js -_shortw_utils.js.map -abstract -bls12-381.d.ts -bls12-381.d.ts.map -bls12-381.js -bls12-381.js.map -bn254.d.ts -bn254.d.ts.map -bn254.js -bn254.js.map -ed25519.d.ts -ed25519.d.ts.map -ed25519.js -ed25519.js.map -ed448.d.ts -ed448.d.ts.map -ed448.js -ed448.js.map -esm -index.d.ts -index.d.ts.map -index.js -index.js.map -jubjub.d.ts -jubjub.d.ts.map -jubjub.js -jubjub.js.map -misc.d.ts -misc.d.ts.map -misc.js -misc.js.map -nist.d.ts -nist.d.ts.map -nist.js -nist.js.map -p256.d.ts -p256.d.ts.map -p256.js -p256.js.map -p384.d.ts -p384.d.ts.map -p384.js -p384.js.map -p521.d.ts -p521.d.ts.map -p521.js -p521.js.map -package.json -pasta.d.ts -pasta.d.ts.map -pasta.js -pasta.js.map -secp256k1.d.ts -secp256k1.d.ts.map -secp256k1.js -secp256k1.js.map -src -utils.d.ts -utils.d.ts.map -utils.js -utils.js.map - -bls.d.ts -bls.d.ts.map -bls.js -bls.js.map -curve.d.ts -curve.d.ts.map -curve.js -curve.js.map -edwards.d.ts -edwards.d.ts.map -edwards.js -edwards.js.map -fft.d.ts -fft.d.ts.map -fft.js -fft.js.map -hash-to-curve.d.ts -hash-to-curve.d.ts.map -hash-to-curve.js -hash-to-curve.js.map -modular.d.ts -modular.d.ts.map -modular.js -modular.js.map -montgomery.d.ts -montgomery.d.ts.map -montgomery.js -montgomery.js.map -poseidon.d.ts -poseidon.d.ts.map -poseidon.js -poseidon.js.map -tower.d.ts -tower.d.ts.map -tower.js -tower.js.map -utils.d.ts -utils.d.ts.map -utils.js -utils.js.map -weierstrass.d.ts -weierstrass.d.ts.map -weierstrass.js -weierstrass.js.map - -_shortw_utils.d.ts -_shortw_utils.d.ts.map -_shortw_utils.js -_shortw_utils.js.map -abstract -bls12-381.d.ts -bls12-381.d.ts.map -bls12-381.js -bls12-381.js.map -bn254.d.ts -bn254.d.ts.map -bn254.js -bn254.js.map -ed25519.d.ts -ed25519.d.ts.map -ed25519.js -ed25519.js.map -ed448.d.ts -ed448.d.ts.map -ed448.js -ed448.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -jubjub.d.ts -jubjub.d.ts.map -jubjub.js -jubjub.js.map -misc.d.ts -misc.d.ts.map -misc.js -misc.js.map -nist.d.ts -nist.d.ts.map -nist.js -nist.js.map -p256.d.ts -p256.d.ts.map -p256.js -p256.js.map -p384.d.ts -p384.d.ts.map -p384.js -p384.js.map -p521.d.ts -p521.d.ts.map -p521.js -p521.js.map -package.json -pasta.d.ts -pasta.d.ts.map -pasta.js -pasta.js.map -secp256k1.d.ts -secp256k1.d.ts.map -secp256k1.js -secp256k1.js.map -utils.d.ts -utils.d.ts.map -utils.js -utils.js.map - -bls.d.ts -bls.d.ts.map -bls.js -bls.js.map -curve.d.ts -curve.d.ts.map -curve.js -curve.js.map -edwards.d.ts -edwards.d.ts.map -edwards.js -edwards.js.map -fft.d.ts -fft.d.ts.map -fft.js -fft.js.map -hash-to-curve.d.ts -hash-to-curve.d.ts.map -hash-to-curve.js -hash-to-curve.js.map -modular.d.ts -modular.d.ts.map -modular.js -modular.js.map -montgomery.d.ts -montgomery.d.ts.map -montgomery.js -montgomery.js.map -poseidon.d.ts -poseidon.d.ts.map -poseidon.js -poseidon.js.map -tower.d.ts -tower.d.ts.map -tower.js -tower.js.map -utils.d.ts -utils.d.ts.map -utils.js -utils.js.map -weierstrass.d.ts -weierstrass.d.ts.map -weierstrass.js -weierstrass.js.map - -_shortw_utils.ts -abstract -bls12-381.ts -bn254.ts -ed25519.ts -ed448.ts -index.ts -jubjub.ts -misc.ts -nist.ts -p256.ts -p384.ts -p521.ts -package.json -pasta.ts -secp256k1.ts -utils.ts - -bls.ts -curve.ts -edwards.ts -fft.ts -hash-to-curve.ts -modular.ts -montgomery.ts -poseidon.ts -tower.ts -utils.ts -weierstrass.ts - -LICENSE -README.md -_assert.d.ts -_assert.d.ts.map -_assert.js -_assert.js.map -_blake.d.ts -_blake.d.ts.map -_blake.js -_blake.js.map -_md.d.ts -_md.d.ts.map -_md.js -_md.js.map -_u64.d.ts -_u64.d.ts.map -_u64.js -_u64.js.map -argon2.d.ts -argon2.d.ts.map -argon2.js -argon2.js.map -blake1.d.ts -blake1.d.ts.map -blake1.js -blake1.js.map -blake2.d.ts -blake2.d.ts.map -blake2.js -blake2.js.map -blake2b.d.ts -blake2b.d.ts.map -blake2b.js -blake2b.js.map -blake2s.d.ts -blake2s.d.ts.map -blake2s.js -blake2s.js.map -blake3.d.ts -blake3.d.ts.map -blake3.js -blake3.js.map -crypto.d.ts -crypto.d.ts.map -crypto.js -crypto.js.map -cryptoNode.d.ts -cryptoNode.d.ts.map -cryptoNode.js -cryptoNode.js.map -eskdf.d.ts -eskdf.d.ts.map -eskdf.js -eskdf.js.map -esm -hkdf.d.ts -hkdf.d.ts.map -hkdf.js -hkdf.js.map -hmac.d.ts -hmac.d.ts.map -hmac.js -hmac.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -legacy.d.ts -legacy.d.ts.map -legacy.js -legacy.js.map -package.json -pbkdf2.d.ts -pbkdf2.d.ts.map -pbkdf2.js -pbkdf2.js.map -ripemd160.d.ts -ripemd160.d.ts.map -ripemd160.js -ripemd160.js.map -scrypt.d.ts -scrypt.d.ts.map -scrypt.js -scrypt.js.map -sha1.d.ts -sha1.d.ts.map -sha1.js -sha1.js.map -sha2.d.ts -sha2.d.ts.map -sha2.js -sha2.js.map -sha256.d.ts -sha256.d.ts.map -sha256.js -sha256.js.map -sha3-addons.d.ts -sha3-addons.d.ts.map -sha3-addons.js -sha3-addons.js.map -sha3.d.ts -sha3.d.ts.map -sha3.js -sha3.js.map -sha512.d.ts -sha512.d.ts.map -sha512.js -sha512.js.map -src -utils.d.ts -utils.d.ts.map -utils.js -utils.js.map - -_assert.d.ts -_assert.d.ts.map -_assert.js -_assert.js.map -_blake.d.ts -_blake.d.ts.map -_blake.js -_blake.js.map -_md.d.ts -_md.d.ts.map -_md.js -_md.js.map -_u64.d.ts -_u64.d.ts.map -_u64.js -_u64.js.map -argon2.d.ts -argon2.d.ts.map -argon2.js -argon2.js.map -blake1.d.ts -blake1.d.ts.map -blake1.js -blake1.js.map -blake2.d.ts -blake2.d.ts.map -blake2.js -blake2.js.map -blake2b.d.ts -blake2b.d.ts.map -blake2b.js -blake2b.js.map -blake2s.d.ts -blake2s.d.ts.map -blake2s.js -blake2s.js.map -blake3.d.ts -blake3.d.ts.map -blake3.js -blake3.js.map -crypto.d.ts -crypto.d.ts.map -crypto.js -crypto.js.map -cryptoNode.d.ts -cryptoNode.d.ts.map -cryptoNode.js -cryptoNode.js.map -eskdf.d.ts -eskdf.d.ts.map -eskdf.js -eskdf.js.map -hkdf.d.ts -hkdf.d.ts.map -hkdf.js -hkdf.js.map -hmac.d.ts -hmac.d.ts.map -hmac.js -hmac.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -legacy.d.ts -legacy.d.ts.map -legacy.js -legacy.js.map -package.json -pbkdf2.d.ts -pbkdf2.d.ts.map -pbkdf2.js -pbkdf2.js.map -ripemd160.d.ts -ripemd160.d.ts.map -ripemd160.js -ripemd160.js.map -scrypt.d.ts -scrypt.d.ts.map -scrypt.js -scrypt.js.map -sha1.d.ts -sha1.d.ts.map -sha1.js -sha1.js.map -sha2.d.ts -sha2.d.ts.map -sha2.js -sha2.js.map -sha256.d.ts -sha256.d.ts.map -sha256.js -sha256.js.map -sha3-addons.d.ts -sha3-addons.d.ts.map -sha3-addons.js -sha3-addons.js.map -sha3.d.ts -sha3.d.ts.map -sha3.js -sha3.js.map -sha512.d.ts -sha512.d.ts.map -sha512.js -sha512.js.map -utils.d.ts -utils.d.ts.map -utils.js -utils.js.map - -_assert.ts -_blake.ts -_md.ts -_u64.ts -argon2.ts -blake1.ts -blake2.ts -blake2b.ts -blake2s.ts -blake3.ts -crypto.ts -cryptoNode.ts -eskdf.ts -hkdf.ts -hmac.ts -index.ts -legacy.ts -pbkdf2.ts -ripemd160.ts -scrypt.ts -sha1.ts -sha2.ts -sha256.ts -sha3-addons.ts -sha3.ts -sha512.ts -utils.ts - -fs.scandir -fs.stat -fs.walk - -LICENSE -README.md -out -package.json - -adapters -constants.d.ts -constants.js -index.d.ts -index.js -providers -settings.d.ts -settings.js -types -utils - -fs.d.ts -fs.js - -async.d.ts -async.js -common.d.ts -common.js -sync.d.ts -sync.js - -index.d.ts -index.js - -fs.d.ts -fs.js -index.d.ts -index.js - -LICENSE -README.md -out -package.json - -adapters -index.d.ts -index.js -providers -settings.d.ts -settings.js -types - -fs.d.ts -fs.js - -async.d.ts -async.js -sync.d.ts -sync.js - -index.d.ts -index.js - -LICENSE -README.md -out -package.json - -index.d.ts -index.js -providers -readers -settings.d.ts -settings.js -types - -async.d.ts -async.js -index.d.ts -index.js -stream.d.ts -stream.js -sync.d.ts -sync.js - -async.d.ts -async.js -common.d.ts -common.js -reader.d.ts -reader.js -sync.d.ts -sync.js - -index.d.ts -index.js - -parseargs - -CHANGELOG.md -LICENSE -README.md -examples -index.js -internal -package.json -utils.js - -is-default-value.js -limit-long-syntax.js -negate.js -no-repeated-options.js -ordered-options.mjs -simple-hard-coded.js - -errors.js -primordials.js -util.js -validators.js - -api -api-augment -api-base -api-derive -extension-dapp -extension-inject -keyring -networks -rpc-augment -rpc-core -rpc-provider -types -types-augment -types-codec -types-create -types-known -types-support -util -util-crypto -wasm-bridge -wasm-crypto -wasm-crypto-asmjs -wasm-crypto-init -wasm-crypto-wasm -wasm-util -x-bigint -x-fetch -x-global -x-randomvalues -x-textdecoder -x-textencoder -x-ws - -LICENSE -README.md -augment.d.ts -augment.js -base -bundle-polkadot-api.js -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -promise -rx -submittable -types -util - -Decorate.d.ts -Decorate.js -Events.d.ts -Events.js -Getters.d.ts -Getters.js -Init.d.ts -Init.js -find.d.ts -find.js -index.d.ts -index.js -types.d.ts -types.js - -augment.d.ts -augment.js -base -bundle.d.ts -bundle.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -promise -rx -submittable -types -util - -Decorate.d.ts -Decorate.js -Events.d.ts -Events.js -Getters.d.ts -Getters.js -Init.d.ts -Init.js -find.d.ts -find.js -index.d.ts -index.js -types.d.ts -types.js - -Api.d.ts -Api.js -Combinator.d.ts -Combinator.js -decorateMethod.d.ts -decorateMethod.js -index.d.ts -index.js -types.d.ts -types.js - -Api.d.ts -Api.js -decorateMethod.d.ts -decorateMethod.js -index.d.ts -index.js - -Result.d.ts -Result.js -createClass.d.ts -createClass.js -createSubmittable.d.ts -createSubmittable.js -index.d.ts -index.js -types.d.ts -types.js - -calls.d.ts -calls.js -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -storage.d.ts -storage.js -submittable.d.ts -submittable.js - -augmentObject.d.ts -augmentObject.js -decorate.d.ts -decorate.js -filterEvents.d.ts -filterEvents.js -index.d.ts -index.js -isKeyringPair.d.ts -isKeyringPair.js -logging.d.ts -logging.js -validate.d.ts -validate.js - -eventemitter3 - -LICENSE -README.md -dist -index.d.ts -index.js -index.mjs -package.json - -eventemitter3.esm.js -eventemitter3.esm.min.js -eventemitter3.esm.min.js.map -eventemitter3.umd.js -eventemitter3.umd.min.js -eventemitter3.umd.min.js.map - -Api.d.ts -Api.js -Combinator.d.ts -Combinator.js -decorateMethod.d.ts -decorateMethod.js -index.d.ts -index.js -types.d.ts -types.js - -Api.d.ts -Api.js -decorateMethod.d.ts -decorateMethod.js -index.d.ts -index.js - -Result.d.ts -Result.js -createClass.d.ts -createClass.js -createSubmittable.d.ts -createSubmittable.js -index.d.ts -index.js -types.d.ts -types.js - -calls.d.ts -calls.js -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -storage.d.ts -storage.js -submittable.d.ts -submittable.js - -augmentObject.d.ts -augmentObject.js -decorate.d.ts -decorate.js -filterEvents.d.ts -filterEvents.js -index.d.ts -index.js -isKeyringPair.d.ts -isKeyringPair.js -logging.d.ts -logging.js -validate.d.ts -validate.js - -LICENSE -README.md -assetHubKusama -assetHubPolkadot -base.d.ts -base.js -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -kusama -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -polkadot -substrate - -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -query.d.ts -query.js -registry.d.ts -registry.js -runtime.d.ts -runtime.js -tx.d.ts -tx.js - -consts.js -errors.js -events.js -index.js -query.js -registry.js -runtime.js -tx.js - -assetHubKusama -assetHubPolkadot -base.d.ts -base.js -bundle.d.ts -bundle.js -index.d.ts -index.js -kusama -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -polkadot -substrate - -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -query.d.ts -query.js -registry.d.ts -registry.js -runtime.d.ts -runtime.js -tx.d.ts -tx.js - -consts.js -errors.js -events.js -index.js -query.js -registry.js -runtime.js -tx.js - -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -query.d.ts -query.js -registry.d.ts -registry.js -runtime.d.ts -runtime.js -tx.d.ts -tx.js - -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -query.d.ts -query.js -registry.d.ts -registry.js -runtime.d.ts -runtime.js -tx.d.ts -tx.js - -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -query.d.ts -query.js -registry.d.ts -registry.js -runtime.d.ts -runtime.js -tx.d.ts -tx.js - -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -query.d.ts -query.js -registry.d.ts -registry.js -runtime.d.ts -runtime.js -tx.d.ts -tx.js - -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -query.d.ts -query.js -registry.d.ts -registry.js -runtime.d.ts -runtime.js -tx.d.ts -tx.js - -consts.d.ts -consts.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -query.d.ts -query.js -registry.d.ts -registry.js -runtime.d.ts -runtime.js -tx.d.ts -tx.js - -LICENSE -README.md -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types - -bundle.d.ts -bundle.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types - -api.d.ts -api.js -base.d.ts -base.js -calls.d.ts -calls.js -consts.d.ts -consts.js -derive.d.ts -derive.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -rpc.d.ts -rpc.js -storage.d.ts -storage.js -submittable.d.ts -submittable.js - -api.d.ts -api.js -base.d.ts -base.js -calls.d.ts -calls.js -consts.d.ts -consts.js -derive.d.ts -derive.js -errors.d.ts -errors.js -events.d.ts -events.js -index.d.ts -index.js -rpc.d.ts -rpc.js -storage.d.ts -storage.js -submittable.d.ts -submittable.js - -LICENSE -README.md -accounts -alliance -augment.d.ts -augment.js -bagsList -balances -bounties -bundle.d.ts -bundle.js -chain -cjs -collective -contracts -council -crowdloan -democracy -derive.d.ts -derive.js -elections -imOnline -index.d.ts -index.js -membership -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -parachains -session -society -staking -technicalCommittee -treasury -tx -type -types.d.ts -types.js -util - -accountId.d.ts -accountId.js -flags.d.ts -flags.js -idAndIndex.d.ts -idAndIndex.js -idToIndex.d.ts -idToIndex.js -identity.d.ts -identity.js -index.d.ts -index.js -indexToId.d.ts -indexToId.js -indexes.d.ts -indexes.js -info.d.ts -info.js -types.d.ts -types.js - -index.d.ts -index.js - -get.d.ts -get.js -getExpanded.d.ts -getExpanded.js -index.d.ts -index.js -listNodes.d.ts -listNodes.js -types.d.ts -types.js -util.d.ts -util.js - -account.d.ts -account.js -all.d.ts -all.js -index.d.ts -index.js -types.d.ts -types.js -votingBalances.d.ts -votingBalances.js - -bounties.d.ts -bounties.js -helpers -index.d.ts -index.js - -filterBountyProposals.d.ts -filterBountyProposals.js - -bestNumber.d.ts -bestNumber.js -bestNumberFinalized.d.ts -bestNumberFinalized.js -bestNumberLag.d.ts -bestNumberLag.js -getBlock.d.ts -getBlock.js -getBlockByNumber.d.ts -getBlockByNumber.js -getHeader.d.ts -getHeader.js -index.d.ts -index.js -subscribeFinalizedBlocks.d.ts -subscribeFinalizedBlocks.js -subscribeFinalizedHeads.d.ts -subscribeFinalizedHeads.js -subscribeNewBlocks.d.ts -subscribeNewBlocks.js -subscribeNewHeads.d.ts -subscribeNewHeads.js -util.d.ts -util.js - -accounts -alliance -augment.d.ts -augment.js -bagsList -balances -bounties -bundle.d.ts -bundle.js -chain -collective -contracts -council -crowdloan -democracy -derive.d.ts -derive.js -elections -imOnline -index.d.ts -index.js -membership -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -parachains -session -society -staking -technicalCommittee -treasury -tx -type -types.d.ts -types.js -util - -accountId.d.ts -accountId.js -flags.d.ts -flags.js -idAndIndex.d.ts -idAndIndex.js -idToIndex.d.ts -idToIndex.js -identity.d.ts -identity.js -index.d.ts -index.js -indexToId.d.ts -indexToId.js -indexes.d.ts -indexes.js -info.d.ts -info.js -types.d.ts -types.js - -index.d.ts -index.js - -get.d.ts -get.js -getExpanded.d.ts -getExpanded.js -index.d.ts -index.js -listNodes.d.ts -listNodes.js -types.d.ts -types.js -util.d.ts -util.js - -account.d.ts -account.js -all.d.ts -all.js -index.d.ts -index.js -types.d.ts -types.js -votingBalances.d.ts -votingBalances.js - -bounties.d.ts -bounties.js -helpers -index.d.ts -index.js - -filterBountyProposals.d.ts -filterBountyProposals.js - -bestNumber.d.ts -bestNumber.js -bestNumberFinalized.d.ts -bestNumberFinalized.js -bestNumberLag.d.ts -bestNumberLag.js -getBlock.d.ts -getBlock.js -getBlockByNumber.d.ts -getBlockByNumber.js -getHeader.d.ts -getHeader.js -index.d.ts -index.js -subscribeFinalizedBlocks.d.ts -subscribeFinalizedBlocks.js -subscribeFinalizedHeads.d.ts -subscribeFinalizedHeads.js -subscribeNewBlocks.d.ts -subscribeNewBlocks.js -subscribeNewHeads.d.ts -subscribeNewHeads.js -util.d.ts -util.js - -helpers.d.ts -helpers.js -index.d.ts -index.js -members.d.ts -members.js -prime.d.ts -prime.js -proposals.d.ts -proposals.js -types.d.ts -types.js - -fees.d.ts -fees.js -index.d.ts -index.js - -index.d.ts -index.js -types.d.ts -types.js -votes.d.ts -votes.js -votesOf.d.ts -votesOf.js - -childKey.d.ts -childKey.js -contributions.d.ts -contributions.js -index.d.ts -index.js -ownContributions.d.ts -ownContributions.js -types.d.ts -types.js -util.d.ts -util.js - -dispatchQueue.d.ts -dispatchQueue.js -index.d.ts -index.js -locks.d.ts -locks.js -nextExternal.d.ts -nextExternal.js -preimages.d.ts -preimages.js -proposals.d.ts -proposals.js -referendumIds.d.ts -referendumIds.js -referendums.d.ts -referendums.js -referendumsActive.d.ts -referendumsActive.js -referendumsFinished.d.ts -referendumsFinished.js -referendumsInfo.d.ts -referendumsInfo.js -sqrtElectorate.d.ts -sqrtElectorate.js -types.d.ts -types.js -util.d.ts -util.js - -index.d.ts -index.js -info.d.ts -info.js -types.d.ts -types.js - -index.d.ts -index.js -receivedHeartbeats.d.ts -receivedHeartbeats.js - -index.d.ts -index.js - -index.d.ts -index.js -info.d.ts -info.js -overview.d.ts -overview.js -types.d.ts -types.js -util.d.ts -util.js - -index.d.ts -index.js -indexes.d.ts -indexes.js -info.d.ts -info.js -progress.d.ts -progress.js -types.d.ts -types.js - -candidates.d.ts -candidates.js -index.d.ts -index.js -info.d.ts -info.js -member.d.ts -member.js -members.d.ts -members.js -types.d.ts -types.js - -account.d.ts -account.js -cache.d.ts -cache.js -currentPoints.d.ts -currentPoints.js -electedInfo.d.ts -electedInfo.js -erasExposure.d.ts -erasExposure.js -erasHistoric.d.ts -erasHistoric.js -erasPoints.d.ts -erasPoints.js -erasPrefs.d.ts -erasPrefs.js -erasRewards.d.ts -erasRewards.js -erasSlashes.d.ts -erasSlashes.js -index.d.ts -index.js -keys.d.ts -keys.js -overview.d.ts -overview.js -ownExposure.d.ts -ownExposure.js -ownSlashes.d.ts -ownSlashes.js -query.d.ts -query.js -stakerExposure.d.ts -stakerExposure.js -stakerPoints.d.ts -stakerPoints.js -stakerPrefs.d.ts -stakerPrefs.js -stakerRewards.d.ts -stakerRewards.js -stakerSlashes.d.ts -stakerSlashes.js -stashes.d.ts -stashes.js -types.d.ts -types.js -util.d.ts -util.js -validators.d.ts -validators.js -waitingInfo.d.ts -waitingInfo.js - -index.d.ts -index.js - -index.d.ts -index.js -proposals.d.ts -proposals.js - -constants.d.ts -constants.js -events.d.ts -events.js -extrinsicInfo.d.ts -extrinsicInfo.js -index.d.ts -index.js -signingInfo.d.ts -signingInfo.js - -HeaderExtended.d.ts -HeaderExtended.js -SignedBlockExtended.d.ts -SignedBlockExtended.js -index.d.ts -index.js -types.d.ts -types.js -util.d.ts -util.js - -approvalFlagsToBools.d.ts -approvalFlagsToBools.js -blockNumber.d.ts -blockNumber.js -cache.d.ts -cache.js -cacheImpl.d.ts -cacheImpl.js -first.d.ts -first.js -index.d.ts -index.js -lazy.d.ts -lazy.js -types.d.ts -types.js - -helpers.d.ts -helpers.js -index.d.ts -index.js -members.d.ts -members.js -prime.d.ts -prime.js -proposals.d.ts -proposals.js -types.d.ts -types.js - -fees.d.ts -fees.js -index.d.ts -index.js - -index.d.ts -index.js -types.d.ts -types.js -votes.d.ts -votes.js -votesOf.d.ts -votesOf.js - -childKey.d.ts -childKey.js -contributions.d.ts -contributions.js -index.d.ts -index.js -ownContributions.d.ts -ownContributions.js -types.d.ts -types.js -util.d.ts -util.js - -dispatchQueue.d.ts -dispatchQueue.js -index.d.ts -index.js -locks.d.ts -locks.js -nextExternal.d.ts -nextExternal.js -preimages.d.ts -preimages.js -proposals.d.ts -proposals.js -referendumIds.d.ts -referendumIds.js -referendums.d.ts -referendums.js -referendumsActive.d.ts -referendumsActive.js -referendumsFinished.d.ts -referendumsFinished.js -referendumsInfo.d.ts -referendumsInfo.js -sqrtElectorate.d.ts -sqrtElectorate.js -types.d.ts -types.js -util.d.ts -util.js - -index.d.ts -index.js -info.d.ts -info.js -types.d.ts -types.js - -index.d.ts -index.js -receivedHeartbeats.d.ts -receivedHeartbeats.js - -index.d.ts -index.js - -index.d.ts -index.js -info.d.ts -info.js -overview.d.ts -overview.js -types.d.ts -types.js -util.d.ts -util.js - -index.d.ts -index.js -indexes.d.ts -indexes.js -info.d.ts -info.js -progress.d.ts -progress.js -types.d.ts -types.js - -candidates.d.ts -candidates.js -index.d.ts -index.js -info.d.ts -info.js -member.d.ts -member.js -members.d.ts -members.js -types.d.ts -types.js - -account.d.ts -account.js -cache.d.ts -cache.js -currentPoints.d.ts -currentPoints.js -electedInfo.d.ts -electedInfo.js -erasExposure.d.ts -erasExposure.js -erasHistoric.d.ts -erasHistoric.js -erasPoints.d.ts -erasPoints.js -erasPrefs.d.ts -erasPrefs.js -erasRewards.d.ts -erasRewards.js -erasSlashes.d.ts -erasSlashes.js -index.d.ts -index.js -keys.d.ts -keys.js -overview.d.ts -overview.js -ownExposure.d.ts -ownExposure.js -ownSlashes.d.ts -ownSlashes.js -query.d.ts -query.js -stakerExposure.d.ts -stakerExposure.js -stakerPoints.d.ts -stakerPoints.js -stakerPrefs.d.ts -stakerPrefs.js -stakerRewards.d.ts -stakerRewards.js -stakerSlashes.d.ts -stakerSlashes.js -stashes.d.ts -stashes.js -types.d.ts -types.js -util.d.ts -util.js -validators.d.ts -validators.js -waitingInfo.d.ts -waitingInfo.js - -index.d.ts -index.js - -index.d.ts -index.js -proposals.d.ts -proposals.js - -constants.d.ts -constants.js -events.d.ts -events.js -extrinsicInfo.d.ts -extrinsicInfo.js -index.d.ts -index.js -signingInfo.d.ts -signingInfo.js - -HeaderExtended.d.ts -HeaderExtended.js -SignedBlockExtended.d.ts -SignedBlockExtended.js -index.d.ts -index.js -types.d.ts -types.js -util.d.ts -util.js - -approvalFlagsToBools.d.ts -approvalFlagsToBools.js -blockNumber.d.ts -blockNumber.js -cache.d.ts -cache.js -cacheImpl.d.ts -cacheImpl.js -first.d.ts -first.js -index.d.ts -index.js -lazy.d.ts -lazy.js -types.d.ts -types.js - -LICENSE -README.md -bundle-polkadot-extension-dapp.js -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -util.d.ts -util.js -wrapBytes.d.ts -wrapBytes.js - -bundle.d.ts -bundle.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -util.d.ts -util.js -wrapBytes.d.ts -wrapBytes.js - -LICENSE -README.md -bundle.d.ts -bundle.js -chrome.d.ts -chrome.js -cjs -crossenv.d.ts -crossenv.js -cyrb53.d.ts -cyrb53.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types.d.ts -types.js - -bundle.d.ts -bundle.js -chrome.d.ts -chrome.js -crossenv.d.ts -crossenv.js -cyrb53.d.ts -cyrb53.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types.d.ts -types.js - -LICENSE -README.md -bundle-polkadot-keyring.js -bundle.d.ts -bundle.js -cjs -defaults.d.ts -defaults.js -index.d.ts -index.js -keyring.d.ts -keyring.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -pair -pairs.d.ts -pairs.js -testing.d.ts -testing.js -testingPairs.d.ts -testingPairs.js -types.d.ts -types.js - -bundle.d.ts -bundle.js -defaults.d.ts -defaults.js -index.d.ts -index.js -keyring.d.ts -keyring.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -pair -pairs.d.ts -pairs.js -testing.d.ts -testing.js -testingPairs.d.ts -testingPairs.js -types.d.ts -types.js - -decode.d.ts -decode.js -defaults.d.ts -defaults.js -encode.d.ts -encode.js -index.d.ts -index.js -nobody.d.ts -nobody.js -toJson.d.ts -toJson.js -types.d.ts -types.js - -decode.d.ts -decode.js -defaults.d.ts -defaults.js -encode.d.ts -encode.js -index.d.ts -index.js -nobody.d.ts -nobody.js -toJson.d.ts -toJson.js -types.d.ts -types.js - -LICENSE -README.md -cjs -defaults -index.d.ts -index.js -interfaces.d.ts -interfaces.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types.d.ts -types.js - -defaults -index.d.ts -index.js -interfaces.d.ts -interfaces.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types.d.ts -types.js - -genesis.d.ts -genesis.js -icons.d.ts -icons.js -index.d.ts -index.js -ledger.d.ts -ledger.js -testnets.d.ts -testnets.js - -genesis.d.ts -genesis.js -icons.d.ts -icons.js -index.d.ts -index.js -ledger.d.ts -ledger.js -testnets.d.ts -testnets.js - -LICENSE -README.md -augment -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -index.d.ts -index.js -jsonrpc.d.ts -jsonrpc.js - -augment -bundle.d.ts -bundle.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -index.d.ts -index.js -jsonrpc.d.ts -jsonrpc.js - -LICENSE -README.md -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types -util - -bundle.d.ts -bundle.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types -util - -base.d.ts -base.js -index.d.ts -index.js -jsonrpc.d.ts -jsonrpc.js - -drr.d.ts -drr.js -index.d.ts -index.js -memo.d.ts -memo.js -refCountDelay.d.ts -refCountDelay.js - -base.d.ts -base.js -index.d.ts -index.js -jsonrpc.d.ts -jsonrpc.js - -drr.d.ts -drr.js -index.d.ts -index.js -memo.d.ts -memo.js -refCountDelay.d.ts -refCountDelay.js - -LICENSE -README.md -bundle.d.ts -bundle.js -cjs -coder -defaults.d.ts -defaults.js -http -index.d.ts -index.js -lru.d.ts -lru.js -mock -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -substrate-connect -types.d.ts -types.js -ws - -bundle.d.ts -bundle.js -coder -defaults.d.ts -defaults.js -http -index.d.ts -index.js -lru.d.ts -lru.js -mock -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -substrate-connect -types.d.ts -types.js -ws - -error.d.ts -error.js -index.d.ts -index.js - -index.d.ts -index.js -types.d.ts -types.js - -index.d.ts -index.js -mockHttp.d.ts -mockHttp.js -mockWs.d.ts -mockWs.js -types.d.ts -types.js - -Health.d.ts -Health.js -index.d.ts -index.js -types.d.ts -types.js - -errors.d.ts -errors.js -index.d.ts -index.js - -error.d.ts -error.js -index.d.ts -index.js - -index.d.ts -index.js -types.d.ts -types.js - -index.d.ts -index.js -mockHttp.d.ts -mockHttp.js -mockWs.d.ts -mockWs.js -types.d.ts -types.js - -eventemitter3 - -LICENSE -README.md -dist -index.d.ts -index.js -index.mjs -package.json - -eventemitter3.esm.js -eventemitter3.esm.min.js -eventemitter3.esm.min.js.map -eventemitter3.umd.js -eventemitter3.umd.min.js -eventemitter3.umd.min.js.map - -Health.d.ts -Health.js -index.d.ts -index.js -types.d.ts -types.js - -errors.d.ts -errors.js -index.d.ts -index.js - -LICENSE -README.md -bundle-polkadot-types.js -bundle.d.ts -bundle.js -cjs -codec -create -ethereum -extrinsic -generic -index.d.ts -index.js -index.types.d.ts -index.types.js -interfaces -lookup.d.ts -lookup.js -metadata -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -primitive -types -util - -bundle.d.ts -bundle.js -codec -create -ethereum -extrinsic -generic -index.d.ts -index.js -index.types.d.ts -index.types.js -interfaces -lookup.d.ts -lookup.js -metadata -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -primitive -types -util - -index.d.ts -index.js -types.d.ts -types.js - -createClass.d.ts -createClass.js -createType.d.ts -createType.js -index.d.ts -index.js -lazy.d.ts -lazy.js -registry.d.ts -registry.js -types.d.ts -types.js - -AccountId.d.ts -AccountId.js -LookupSource.d.ts -LookupSource.js -index.d.ts -index.js - -Extrinsic.d.ts -Extrinsic.js -ExtrinsicEra.d.ts -ExtrinsicEra.js -ExtrinsicPayload.d.ts -ExtrinsicPayload.js -ExtrinsicPayloadUnknown.d.ts -ExtrinsicPayloadUnknown.js -ExtrinsicUnknown.d.ts -ExtrinsicUnknown.js -SignerPayload.d.ts -SignerPayload.js -constants.d.ts -constants.js -index.d.ts -index.js -signedExtensions -types.d.ts -types.js -util.d.ts -util.js -v4 -v5 - -emptyCheck.d.ts -emptyCheck.js -index.d.ts -index.js -polkadot.d.ts -polkadot.js -shell.d.ts -shell.js -statemint.d.ts -statemint.js -substrate.d.ts -substrate.js -types.d.ts -types.js - -Extrinsic.d.ts -Extrinsic.js -ExtrinsicPayload.d.ts -ExtrinsicPayload.js -ExtrinsicSignature.d.ts -ExtrinsicSignature.js -index.d.ts -index.js - -Extrinsic.d.ts -Extrinsic.js -ExtrinsicPayload.d.ts -ExtrinsicPayload.js -ExtrinsicSignature.d.ts -ExtrinsicSignature.js -GeneralExtrinsic.d.ts -GeneralExtrinsic.js -index.d.ts -index.js - -AccountId.d.ts -AccountId.js -AccountIndex.d.ts -AccountIndex.js -Block.d.ts -Block.js -Call.d.ts -Call.js -ChainProperties.d.ts -ChainProperties.js -ConsensusEngineId.d.ts -ConsensusEngineId.js -Event.d.ts -Event.js -LookupSource.d.ts -LookupSource.js -MultiAddress.d.ts -MultiAddress.js -Vote.d.ts -Vote.js -index.d.ts -index.js - -alias.d.ts -alias.js -assetConversion -assets -attestations -aura -author -authorship -babe -balances -beefy -benchmark -blockbuilder -bridges -chain -childstate -claims -collective -consensus -contracts -contractsAbi -crowdloan -cumulus -definitions.d.ts -definitions.js -democracy -dev -discovery -dryRunApi -elections -engine -essentials.d.ts -essentials.js -eth -evm -extrinsics -finality -fungibles -genericAsset -genesisBuilder -gilt -grandpa -identity -imOnline -index.d.ts -index.js -jsonrpc.d.ts -jsonrpc.js -lottery -metadata -mixnet -mmr -nfts -nimbus -nompools -offchain -offences -ormlOracle -ormlTokens -parachains -payment -poll -pow -proxy -purchase -recovery -rpc -runtime -scaleInfo -scheduler -session -society -staking -state -statement -support -syncstate -system -treasury -txpayment -txqueue -types.d.ts -types.js -uniques -utility -vesting -xcm -xcmPaymentApi -xcmRuntimeApi - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -hashers.d.ts -hashers.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js -v10.d.ts -v10.js -v11.d.ts -v11.js -v12.d.ts -v12.js -v13.d.ts -v13.js -v14.d.ts -v14.js -v15.d.ts -v15.js -v16.d.ts -v16.js -v9.d.ts -v9.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -hrmp.d.ts -hrmp.js -index.d.ts -index.js -runtime.d.ts -runtime.js -slots.d.ts -slots.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js -v0.d.ts -v0.js -v1.d.ts -v1.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js -v0.d.ts -v0.js -v1.d.ts -v1.js -v2.d.ts -v2.js -v3.d.ts -v3.js -v4.d.ts -v4.js -v5.d.ts -v5.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -MagicNumber.d.ts -MagicNumber.js -Metadata.d.ts -Metadata.js -MetadataVersioned.d.ts -MetadataVersioned.js -PortableRegistry -decorate -index.d.ts -index.js -types.d.ts -types.js -util -v10 -v11 -v12 -v13 -v14 -v15 -v16 -v9 -versions.d.ts -versions.js - -PortableRegistry.d.ts -PortableRegistry.js -index.d.ts -index.js -toV1.d.ts -toV1.js - -constants -errors -events -extrinsics -index.d.ts -index.js -storage -types.d.ts -types.js -util.d.ts -util.js - -index.d.ts -index.js - -index.d.ts -index.js - -index.d.ts -index.js - -createUnchecked.d.ts -createUnchecked.js -index.d.ts -index.js - -createFunction.d.ts -createFunction.js -getHasher.d.ts -getHasher.js -getStorage.d.ts -getStorage.js -index.d.ts -index.js -substrate.d.ts -substrate.js -util.d.ts -util.js - -extractTypes.d.ts -extractTypes.js -flattenUniq.d.ts -flattenUniq.js -getSiName.d.ts -getSiName.js -getUniqTypes.d.ts -getUniqTypes.js -index.d.ts -index.js -testUtil.d.ts -testUtil.js -toCallsOnly.d.ts -toCallsOnly.js -types.d.ts -types.js -validateTypes.d.ts -validateTypes.js - -toV11.d.ts -toV11.js - -toV12.d.ts -toV12.js - -toV13.d.ts -toV13.js - -toV14.d.ts -toV14.js - -toV15.d.ts -toV15.js - -toV16.d.ts -toV16.js - -toLatest.d.ts -toLatest.js - -toV10.d.ts -toV10.js - -Data.d.ts -Data.js -StorageKey.d.ts -StorageKey.js -index.d.ts -index.js -types.d.ts -types.js - -augmentLookup.d.ts -augmentLookup.js -augmentRegistry.d.ts -augmentRegistry.js -calls.d.ts -calls.js -codec.d.ts -codec.js -definitions.d.ts -definitions.js -detect.d.ts -detect.js -events.d.ts -events.js -extrinsic.d.ts -extrinsic.js -index.d.ts -index.js -interfaces.d.ts -interfaces.js -registry.d.ts -registry.js - -index.d.ts -index.js -storage.d.ts -storage.js - -index.d.ts -index.js -types.d.ts -types.js - -createClass.d.ts -createClass.js -createType.d.ts -createType.js -index.d.ts -index.js -lazy.d.ts -lazy.js -registry.d.ts -registry.js -types.d.ts -types.js - -AccountId.d.ts -AccountId.js -LookupSource.d.ts -LookupSource.js -index.d.ts -index.js - -Extrinsic.d.ts -Extrinsic.js -ExtrinsicEra.d.ts -ExtrinsicEra.js -ExtrinsicPayload.d.ts -ExtrinsicPayload.js -ExtrinsicPayloadUnknown.d.ts -ExtrinsicPayloadUnknown.js -ExtrinsicUnknown.d.ts -ExtrinsicUnknown.js -SignerPayload.d.ts -SignerPayload.js -constants.d.ts -constants.js -index.d.ts -index.js -signedExtensions -types.d.ts -types.js -util.d.ts -util.js -v4 -v5 - -emptyCheck.d.ts -emptyCheck.js -index.d.ts -index.js -polkadot.d.ts -polkadot.js -shell.d.ts -shell.js -statemint.d.ts -statemint.js -substrate.d.ts -substrate.js -types.d.ts -types.js - -Extrinsic.d.ts -Extrinsic.js -ExtrinsicPayload.d.ts -ExtrinsicPayload.js -ExtrinsicSignature.d.ts -ExtrinsicSignature.js -index.d.ts -index.js - -Extrinsic.d.ts -Extrinsic.js -ExtrinsicPayload.d.ts -ExtrinsicPayload.js -ExtrinsicSignature.d.ts -ExtrinsicSignature.js -GeneralExtrinsic.d.ts -GeneralExtrinsic.js -index.d.ts -index.js - -AccountId.d.ts -AccountId.js -AccountIndex.d.ts -AccountIndex.js -Block.d.ts -Block.js -Call.d.ts -Call.js -ChainProperties.d.ts -ChainProperties.js -ConsensusEngineId.d.ts -ConsensusEngineId.js -Event.d.ts -Event.js -LookupSource.d.ts -LookupSource.js -MultiAddress.d.ts -MultiAddress.js -Vote.d.ts -Vote.js -index.d.ts -index.js - -alias.d.ts -alias.js -assetConversion -assets -attestations -aura -author -authorship -babe -balances -beefy -benchmark -blockbuilder -bridges -chain -childstate -claims -collective -consensus -contracts -contractsAbi -crowdloan -cumulus -definitions.d.ts -definitions.js -democracy -dev -discovery -dryRunApi -elections -engine -essentials.d.ts -essentials.js -eth -evm -extrinsics -finality -fungibles -genericAsset -genesisBuilder -gilt -grandpa -identity -imOnline -index.d.ts -index.js -jsonrpc.d.ts -jsonrpc.js -lottery -metadata -mixnet -mmr -nfts -nimbus -nompools -offchain -offences -ormlOracle -ormlTokens -parachains -payment -poll -pow -proxy -purchase -recovery -rpc -runtime -scaleInfo -scheduler -session -society -staking -state -statement -support -syncstate -system -treasury -txpayment -txqueue -types.d.ts -types.js -uniques -utility -vesting -xcm -xcmPaymentApi -xcmRuntimeApi - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -hashers.d.ts -hashers.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js -v10.d.ts -v10.js -v11.d.ts -v11.js -v12.d.ts -v12.js -v13.d.ts -v13.js -v14.d.ts -v14.js -v15.d.ts -v15.js -v16.d.ts -v16.js -v9.d.ts -v9.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -hrmp.d.ts -hrmp.js -index.d.ts -index.js -runtime.d.ts -runtime.js -slots.d.ts -slots.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js -v0.d.ts -v0.js -v1.d.ts -v1.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -rpc.d.ts -rpc.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -types.d.ts -types.js -v0.d.ts -v0.js -v1.d.ts -v1.js -v2.d.ts -v2.js -v3.d.ts -v3.js -v4.d.ts -v4.js -v5.d.ts -v5.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -definitions.d.ts -definitions.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d.ts -types.js - -MagicNumber.d.ts -MagicNumber.js -Metadata.d.ts -Metadata.js -MetadataVersioned.d.ts -MetadataVersioned.js -PortableRegistry -README.md -decorate -index.d.ts -index.js -types.d.ts -types.js -util -v10 -v11 -v12 -v13 -v14 -v15 -v16 -v9 -versions.d.ts -versions.js - -PortableRegistry.d.ts -PortableRegistry.js -index.d.ts -index.js -toV1.d.ts -toV1.js - -constants -errors -events -extrinsics -index.d.ts -index.js -storage -types.d.ts -types.js -util.d.ts -util.js - -index.d.ts -index.js - -index.d.ts -index.js - -index.d.ts -index.js - -createUnchecked.d.ts -createUnchecked.js -index.d.ts -index.js - -createFunction.d.ts -createFunction.js -getHasher.d.ts -getHasher.js -getStorage.d.ts -getStorage.js -index.d.ts -index.js -substrate.d.ts -substrate.js -util.d.ts -util.js - -extractTypes.d.ts -extractTypes.js -flattenUniq.d.ts -flattenUniq.js -getSiName.d.ts -getSiName.js -getUniqTypes.d.ts -getUniqTypes.js -index.d.ts -index.js -testUtil.d.ts -testUtil.js -toCallsOnly.d.ts -toCallsOnly.js -types.d.ts -types.js -validateTypes.d.ts -validateTypes.js - -toV11.d.ts -toV11.js - -toV12.d.ts -toV12.js - -toV13.d.ts -toV13.js - -toV14.d.ts -toV14.js - -toV15.d.ts -toV15.js - -toV16.d.ts -toV16.js - -toLatest.d.ts -toLatest.js - -toV10.d.ts -toV10.js - -Data.d.ts -Data.js -StorageKey.d.ts -StorageKey.js -index.d.ts -index.js -types.d.ts -types.js - -augmentLookup.d.ts -augmentLookup.js -augmentRegistry.d.ts -augmentRegistry.js -calls.d.ts -calls.js -codec.d.ts -codec.js -definitions.d.ts -definitions.js -detect.d.ts -detect.js -events.d.ts -events.js -extrinsic.d.ts -extrinsic.js -index.d.ts -index.js -interfaces.d.ts -interfaces.js -registry.d.ts -registry.js - -index.d.ts -index.js -storage.d.ts -storage.js - -LICENSE -README.md -augment.d.ts -augment.js -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -lookup -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -registry - -augment.d.ts -augment.js -bundle.d.ts -bundle.js -index.d.ts -index.js -lookup -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -registry - -assetHubKusama.d.ts -assetHubKusama.js -assetHubPolkadot.d.ts -assetHubPolkadot.js -definitions.d.ts -definitions.js -index.d.ts -index.js -kusama.d.ts -kusama.js -polkadot.d.ts -polkadot.js -substrate.d.ts -substrate.js -types-assetHubKusama.d.ts -types-assetHubKusama.js -types-assetHubPolkadot.d.ts -types-assetHubPolkadot.js -types-kusama.d.ts -types-kusama.js -types-polkadot.d.ts -types-polkadot.js -types-substrate.d.ts -types-substrate.js -types.d.ts -types.js - -assetHubKusama.d.ts -assetHubKusama.js -assetHubPolkadot.d.ts -assetHubPolkadot.js -index.d.ts -index.js -interfaces.d.ts -interfaces.js -kusama.d.ts -kusama.js -polkadot.d.ts -polkadot.js -substrate.d.ts -substrate.js - -assetHubKusama.d.ts -assetHubKusama.js -assetHubPolkadot.d.ts -assetHubPolkadot.js -definitions.d.ts -definitions.js -index.d.ts -index.js -kusama.d.ts -kusama.js -polkadot.d.ts -polkadot.js -substrate.d.ts -substrate.js -types-assetHubKusama.d.ts -types-assetHubKusama.js -types-assetHubPolkadot.d.ts -types-assetHubPolkadot.js -types-kusama.d.ts -types-kusama.js -types-polkadot.d.ts -types-polkadot.js -types-substrate.d.ts -types-substrate.js -types.d.ts -types.js - -assetHubKusama.d.ts -assetHubKusama.js -assetHubPolkadot.d.ts -assetHubPolkadot.js -index.d.ts -index.js -interfaces.d.ts -interfaces.js -kusama.d.ts -kusama.js -polkadot.d.ts -polkadot.js -substrate.d.ts -substrate.js - -LICENSE -README.md -abstract -base -bundle.d.ts -bundle.js -cjs -extended -index.d.ts -index.js -native -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -primitive -types -utils - -Array.d.ts -Array.js -Base.d.ts -Base.js -Int.d.ts -Int.js -Object.d.ts -Object.js -index.d.ts -index.js - -Compact.d.ts -Compact.js -DoNotConstruct.d.ts -DoNotConstruct.js -Enum.d.ts -Enum.js -Int.d.ts -Int.js -Null.d.ts -Null.js -Option.d.ts -Option.js -Result.d.ts -Result.js -Tuple.d.ts -Tuple.js -UInt.d.ts -UInt.js -Vec.d.ts -Vec.js -VecAny.d.ts -VecAny.js -VecFixed.d.ts -VecFixed.js -index.d.ts -index.js - -abstract -base -bundle.d.ts -bundle.js -extended -index.d.ts -index.js -native -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -primitive -types -utils - -Array.d.ts -Array.js -Base.d.ts -Base.js -Int.d.ts -Int.js -Object.d.ts -Object.js -index.d.ts -index.js - -Compact.d.ts -Compact.js -DoNotConstruct.d.ts -DoNotConstruct.js -Enum.d.ts -Enum.js -Int.d.ts -Int.js -Null.d.ts -Null.js -Option.d.ts -Option.js -Result.d.ts -Result.js -Tuple.d.ts -Tuple.js -UInt.d.ts -UInt.js -Vec.d.ts -Vec.js -VecAny.d.ts -VecAny.js -VecFixed.d.ts -VecFixed.js -index.d.ts -index.js - -BTreeMap.d.ts -BTreeMap.js -BTreeSet.d.ts -BTreeSet.js -BitVec.d.ts -BitVec.js -Bytes.d.ts -Bytes.js -HashMap.d.ts -HashMap.js -Linkage.d.ts -Linkage.js -Map.d.ts -Map.js -OptionBool.d.ts -OptionBool.js -Range.d.ts -Range.js -RangeInclusive.d.ts -RangeInclusive.js -Type.d.ts -Type.js -U8aFixed.d.ts -U8aFixed.js -WrapperKeepOpaque.d.ts -WrapperKeepOpaque.js -WrapperOpaque.d.ts -WrapperOpaque.js -index.d.ts -index.js - -Bool.d.ts -Bool.js -Date.d.ts -Date.js -Float.d.ts -Float.js -Json.d.ts -Json.js -Raw.d.ts -Raw.js -Set.d.ts -Set.js -Struct.d.ts -Struct.data.js -Struct.js -Text.d.ts -Text.js -index.d.ts -index.js - -F32.d.ts -F32.js -F64.d.ts -F64.js -I128.d.ts -I128.js -I16.d.ts -I16.js -I256.d.ts -I256.js -I32.d.ts -I32.js -I64.d.ts -I64.js -I8.d.ts -I8.js -ISize.d.ts -ISize.js -U128.d.ts -U128.js -U16.d.ts -U16.js -U256.d.ts -U256.js -U32.d.ts -U32.js -U64.d.ts -U64.js -U8.d.ts -U8.js -USize.d.ts -USize.js -index.d.ts -index.js - -codec.d.ts -codec.js -helpers.d.ts -helpers.js -index.d.ts -index.js -interfaces.d.ts -interfaces.js -registry.d.ts -registry.js - -compareArray.d.ts -compareArray.js -compareMap.d.ts -compareMap.js -compareSet.d.ts -compareSet.js -decodeU8a.d.ts -decodeU8a.js -index.d.ts -index.js -sanitize.d.ts -sanitize.js -sortValues.d.ts -sortValues.js -toConstructors.d.ts -toConstructors.js -typesToMap.d.ts -typesToMap.js -util.d.ts -util.js - -BTreeMap.d.ts -BTreeMap.js -BTreeSet.d.ts -BTreeSet.js -BitVec.d.ts -BitVec.js -Bytes.d.ts -Bytes.js -HashMap.d.ts -HashMap.js -Linkage.d.ts -Linkage.js -Map.d.ts -Map.js -OptionBool.d.ts -OptionBool.js -Range.d.ts -Range.js -RangeInclusive.d.ts -RangeInclusive.js -Type.d.ts -Type.js -U8aFixed.d.ts -U8aFixed.js -WrapperKeepOpaque.d.ts -WrapperKeepOpaque.js -WrapperOpaque.d.ts -WrapperOpaque.js -index.d.ts -index.js - -Bool.d.ts -Bool.js -Date.d.ts -Date.js -Float.d.ts -Float.js -Json.d.ts -Json.js -Raw.d.ts -Raw.js -Set.d.ts -Set.js -Struct.d.ts -Struct.data.js -Struct.js -Text.d.ts -Text.js -index.d.ts -index.js - -F32.d.ts -F32.js -F64.d.ts -F64.js -I128.d.ts -I128.js -I16.d.ts -I16.js -I256.d.ts -I256.js -I32.d.ts -I32.js -I64.d.ts -I64.js -I8.d.ts -I8.js -ISize.d.ts -ISize.js -U128.d.ts -U128.js -U16.d.ts -U16.js -U256.d.ts -U256.js -U32.d.ts -U32.js -U64.d.ts -U64.js -U8.d.ts -U8.js -USize.d.ts -USize.js -index.d.ts -index.js - -codec.d.ts -codec.js -helpers.d.ts -helpers.js -index.d.ts -index.js -interfaces.d.ts -interfaces.js -registry.d.ts -registry.js - -compareArray.d.ts -compareArray.js -compareMap.d.ts -compareMap.js -compareSet.d.ts -compareSet.js -decodeU8a.d.ts -decodeU8a.js -index.d.ts -index.js -sanitize.d.ts -sanitize.js -sortValues.d.ts -sortValues.js -toConstructors.d.ts -toConstructors.js -typesToMap.d.ts -typesToMap.js -util.d.ts -util.js - -LICENSE -README.md -bundle.d.ts -bundle.js -cjs -create -exports.d.ts -exports.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types -util - -bundle.d.ts -bundle.js -create -exports.d.ts -exports.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types -util - -class.d.ts -class.js -index.d.ts -index.js -type.d.ts -type.js - -augmentRegistry.d.ts -augmentRegistry.js -index.d.ts -index.js -lookup.d.ts -lookup.js -types.d.ts -types.js - -encodeTypes.d.ts -encodeTypes.js -getTypeDef.d.ts -getTypeDef.js -index.d.ts -index.js -typeSplit.d.ts -typeSplit.js -xcm.d.ts -xcm.js - -class.d.ts -class.js -index.d.ts -index.js -type.d.ts -type.js - -augmentRegistry.d.ts -augmentRegistry.js -index.d.ts -index.js -lookup.d.ts -lookup.js -types.d.ts -types.js - -encodeTypes.d.ts -encodeTypes.js -getTypeDef.d.ts -getTypeDef.js -index.d.ts -index.js -typeSplit.d.ts -typeSplit.js -xcm.d.ts -xcm.js - -LICENSE -README.md -bundle.d.ts -bundle.js -chain -cjs -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -spec -upgrades -util.d.ts -util.js - -index.d.ts -index.js - -bundle.d.ts -bundle.js -chain -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -spec -upgrades -util.d.ts -util.js - -index.d.ts -index.js - -centrifuge-chain.d.ts -centrifuge-chain.js -index.d.ts -index.js -kusama.d.ts -kusama.js -node-template.d.ts -node-template.js -node.d.ts -node.js -polkadot.d.ts -polkadot.js -rococo.d.ts -rococo.js -shell.d.ts -shell.js -statemine.d.ts -statemine.js -statemint.d.ts -statemint.js -westend.d.ts -westend.js -westmint.d.ts -westmint.js - -e2e -index.d.ts -index.js -manual -types.d.ts -types.js - -index.d.ts -index.js -kusama.d.ts -kusama.js -polkadot.d.ts -polkadot.js -westend.d.ts -westend.js - -index.d.ts -index.js -kusama.d.ts -kusama.js -polkadot.d.ts -polkadot.js -westend.d.ts -westend.js - -centrifuge-chain.d.ts -centrifuge-chain.js -index.d.ts -index.js -kusama.d.ts -kusama.js -node-template.d.ts -node-template.js -node.d.ts -node.js -polkadot.d.ts -polkadot.js -rococo.d.ts -rococo.js -shell.d.ts -shell.js -statemine.d.ts -statemine.js -statemint.d.ts -statemint.js -westend.d.ts -westend.js -westmint.d.ts -westmint.js - -e2e -index.d.ts -index.js -manual -types.d.ts -types.js - -index.d.ts -index.js -kusama.d.ts -kusama.js -polkadot.d.ts -polkadot.js -westend.d.ts -westend.js - -index.d.ts -index.js -kusama.d.ts -kusama.js -polkadot.d.ts -polkadot.js -westend.d.ts -westend.js - -LICENSE -README.md -cjs -index.d.ts -index.js -json -metadata -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -index.d.ts -index.js -metadata -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -static-kusama.d.ts -static-kusama.js -static-polkadot.d.ts -static-polkadot.js -static-substrate-contracts-node.d.ts -static-substrate-contracts-node.js -static-substrate.d.ts -static-substrate.js -v10 -v11 -v12 -v13 -v14 -v15 -v16 -v9 - -substrate-hex.d.ts -substrate-hex.js - -substrate-hex.d.ts -substrate-hex.js - -substrate-hex.d.ts -substrate-hex.js - -kusama-hex.d.ts -kusama-hex.js -polkadot-hex.d.ts -polkadot-hex.js -substrate-hex.d.ts -substrate-hex.js - -kusama-hex.d.ts -kusama-hex.js -kusama-rpc.d.ts -kusama-rpc.js -kusama-ver.d.ts -kusama-ver.js -polkadot-hex.d.ts -polkadot-hex.js -polkadot-rpc.d.ts -polkadot-rpc.js -polkadot-ver.d.ts -polkadot-ver.js -substrate-contracts-node-hex.d.ts -substrate-contracts-node-hex.js -substrate-contracts-node-rpc.d.ts -substrate-contracts-node-rpc.js -substrate-contracts-node-ver.d.ts -substrate-contracts-node-ver.js -substrate-hex.d.ts -substrate-hex.js -substrate-rpc.d.ts -substrate-rpc.js -substrate-ver.d.ts -substrate-ver.js - -asset-hub-kusama-hex.d.ts -asset-hub-kusama-hex.js -asset-hub-kusama-rpc.d.ts -asset-hub-kusama-rpc.js -asset-hub-kusama-ver.d.ts -asset-hub-kusama-ver.js -asset-hub-polkadot-hex.d.ts -asset-hub-polkadot-hex.js -asset-hub-polkadot-rpc.d.ts -asset-hub-polkadot-rpc.js -asset-hub-polkadot-ver.d.ts -asset-hub-polkadot-ver.js -kusama-hex.d.ts -kusama-hex.js -kusama-rpc.d.ts -kusama-rpc.js -kusama-ver.d.ts -kusama-ver.js -polkadot-hex.d.ts -polkadot-hex.js -polkadot-rpc.d.ts -polkadot-rpc.js -polkadot-ver.d.ts -polkadot-ver.js -substrate-hex.d.ts -substrate-hex.js -substrate-rpc.d.ts -substrate-rpc.js -substrate-ver.d.ts -substrate-ver.js - -substrate-hex.d.ts -substrate-hex.js -substrate-rpc.d.ts -substrate-rpc.js -substrate-ver.d.ts -substrate-ver.js - -substrate-hex.d.ts -substrate-hex.js - -AccountIdVec.001.json -EventRecord.001.json -EventRecord.002.json -EventRecord.003.json -ExtrinsicStatus.001.json -GrandpaRoundstate.001.json -Header.001.json -Header.002.json -Header.003.json -Header.004.json -RuntimeVersion.002.json -SignedBlock.002.json -SignedBlock.003.00.json -SignedBlock.003.01.json -SignedBlock.004.immortal.json -SignedBlock.004.mortal.json -SignedBlock.005.json -StorageChangeSet.001.json - -README.md -static-kusama.d.ts -static-kusama.js -static-polkadot.d.ts -static-polkadot.js -static-substrate-contracts-node.d.ts -static-substrate-contracts-node.js -static-substrate.d.ts -static-substrate.js -v10 -v11 -v12 -v13 -v14 -v15 -v16 -v9 - -substrate-hex.d.ts -substrate-hex.js -substrate-json.json - -substrate-hex.d.ts -substrate-hex.js -substrate-json.json - -substrate-hex.d.ts -substrate-hex.js -substrate-json.json - -kusama-hex.d.ts -kusama-hex.js -kusama-json.json -polkadot-hex.d.ts -polkadot-hex.js -polkadot-json.json -substrate-hex.d.ts -substrate-hex.js -substrate-json.json - -kusama-hex.d.ts -kusama-hex.js -kusama-json.json -kusama-rpc.d.ts -kusama-rpc.js -kusama-types.json -kusama-ver.d.ts -kusama-ver.js -polkadot-hex.d.ts -polkadot-hex.js -polkadot-json.json -polkadot-rpc.d.ts -polkadot-rpc.js -polkadot-types.json -polkadot-ver.d.ts -polkadot-ver.js -substrate-contracts-node-hex.d.ts -substrate-contracts-node-hex.js -substrate-contracts-node-rpc.d.ts -substrate-contracts-node-rpc.js -substrate-contracts-node-ver.d.ts -substrate-contracts-node-ver.js -substrate-hex.d.ts -substrate-hex.js -substrate-json.json -substrate-rpc.d.ts -substrate-rpc.js -substrate-types.json -substrate-ver.d.ts -substrate-ver.js - -asset-hub-kusama-hex.d.ts -asset-hub-kusama-hex.js -asset-hub-kusama-json.json -asset-hub-kusama-rpc.d.ts -asset-hub-kusama-rpc.js -asset-hub-kusama-types.json -asset-hub-kusama-ver.d.ts -asset-hub-kusama-ver.js -asset-hub-polkadot-hex.d.ts -asset-hub-polkadot-hex.js -asset-hub-polkadot-json.json -asset-hub-polkadot-rpc.d.ts -asset-hub-polkadot-rpc.js -asset-hub-polkadot-types.json -asset-hub-polkadot-ver.d.ts -asset-hub-polkadot-ver.js -kusama-hex.d.ts -kusama-hex.js -kusama-json.json -kusama-rpc.d.ts -kusama-rpc.js -kusama-types.json -kusama-ver.d.ts -kusama-ver.js -polkadot-hex.d.ts -polkadot-hex.js -polkadot-json.json -polkadot-rpc.d.ts -polkadot-rpc.js -polkadot-types.json -polkadot-ver.d.ts -polkadot-ver.js -substrate-hex.d.ts -substrate-hex.js -substrate-json.json -substrate-rpc.d.ts -substrate-rpc.js -substrate-types.json -substrate-ver.d.ts -substrate-ver.js - -substrate-hex.d.ts -substrate-hex.js -substrate-json.json -substrate-rpc.d.ts -substrate-rpc.js -substrate-types.json -substrate-ver.d.ts -substrate-ver.js - -substrate-hex.d.ts -substrate-hex.js -substrate-json.json - -LICENSE -README.md -array -assert.d.ts -assert.js -bi -bn -buffer -bundle-polkadot-util.js -bundle.d.ts -bundle.js -cjs -compact -detectPackage.d.ts -detectPackage.js -extractTime.d.ts -extractTime.js -float -format -has.d.ts -has.js -hex -index.d.ts -index.js -is -lazy.d.ts -lazy.js -logger.d.ts -logger.js -memoize.d.ts -memoize.js -nextTick.d.ts -nextTick.js -noop.d.ts -noop.js -number -object -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -promisify.d.ts -promisify.js -string -stringify.d.ts -stringify.js -types.d.ts -types.js -u8a - -chunk.d.ts -chunk.js -filter.d.ts -filter.js -flatten.d.ts -flatten.js -index.d.ts -index.js -range.d.ts -range.js -shuffle.d.ts -shuffle.js -unzip.d.ts -unzip.js -zip.d.ts -zip.js - -consts.d.ts -consts.js -helpers.d.ts -helpers.js -index.d.ts -index.js -min.d.ts -min.js -sqrt.d.ts -sqrt.js -toBigInt.d.ts -toBigInt.js -toHex.d.ts -toHex.js -toU8a.d.ts -toU8a.js - -bn.d.ts -bn.js -consts.d.ts -consts.js -fromHex.d.ts -fromHex.js -index.d.ts -index.js -min.d.ts -min.js -sqrt.d.ts -sqrt.js -toBn.d.ts -toBn.js -toHex.d.ts -toHex.js -toU8a.d.ts -toU8a.js - -index.d.ts -index.js -toU8a.d.ts -toU8a.js - -array -assert.d.ts -assert.js -bi -bn -buffer -bundle.d.ts -bundle.js -compact -detectPackage.d.ts -detectPackage.js -extractTime.d.ts -extractTime.js -float -format -has.d.ts -has.js -hex -index.d.ts -index.js -is -lazy.d.ts -lazy.js -logger.d.ts -logger.js -memoize.d.ts -memoize.js -nextTick.d.ts -nextTick.js -noop.d.ts -noop.js -number -object -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -promisify.d.ts -promisify.js -string -stringify.d.ts -stringify.js -types.d.ts -types.js -u8a - -chunk.d.ts -chunk.js -filter.d.ts -filter.js -flatten.d.ts -flatten.js -index.d.ts -index.js -range.d.ts -range.js -shuffle.d.ts -shuffle.js -unzip.d.ts -unzip.js -zip.d.ts -zip.js - -consts.d.ts -consts.js -helpers.d.ts -helpers.js -index.d.ts -index.js -min.d.ts -min.js -sqrt.d.ts -sqrt.js -toBigInt.d.ts -toBigInt.js -toHex.d.ts -toHex.js -toU8a.d.ts -toU8a.js - -bn.d.ts -bn.js -consts.d.ts -consts.js -fromHex.d.ts -fromHex.js -index.d.ts -index.js -min.d.ts -min.js -sqrt.d.ts -sqrt.js -toBn.d.ts -toBn.js -toHex.d.ts -toHex.js -toU8a.d.ts -toU8a.js - -index.d.ts -index.js -toU8a.d.ts -toU8a.js - -addLength.d.ts -addLength.js -defaults.d.ts -defaults.js -fromU8a.d.ts -fromU8a.js -index.d.ts -index.js -stripLength.d.ts -stripLength.js -toU8a.d.ts -toU8a.js -types.d.ts -types.js - -index.d.ts -index.js -toU8a.d.ts -toU8a.js - -formatBalance.d.ts -formatBalance.js -formatDate.d.ts -formatDate.js -formatDecimal.d.ts -formatDecimal.js -formatElapsed.d.ts -formatElapsed.js -formatNumber.d.ts -formatNumber.js -getSeparator.d.ts -getSeparator.js -index.d.ts -index.js -si.d.ts -si.js - -addPrefix.d.ts -addPrefix.js -fixLength.d.ts -fixLength.js -hasPrefix.d.ts -hasPrefix.js -index.d.ts -index.js -stripPrefix.d.ts -stripPrefix.js -toBigInt.d.ts -toBigInt.js -toBn.d.ts -toBn.js -toNumber.d.ts -toNumber.js -toString.d.ts -toString.js -toU8a.d.ts -toU8a.js -toU8aBuffer.d.ts -toU8aBuffer.js - -array.d.ts -array.js -ascii.d.ts -ascii.js -bigInt.d.ts -bigInt.js -bn.d.ts -bn.js -boolean.d.ts -boolean.js -buffer.d.ts -buffer.js -childClass.d.ts -childClass.js -class.d.ts -class.js -codec.d.ts -codec.js -compact.d.ts -compact.js -error.d.ts -error.js -function.d.ts -function.js -helpers.d.ts -helpers.js -hex.d.ts -hex.js -index.d.ts -index.js -instanceOf.d.ts -instanceOf.js -ip.d.ts -ip.js -jsonObject.d.ts -jsonObject.js -null.d.ts -null.js -number.d.ts -number.js -object.d.ts -object.js -observable.d.ts -observable.js -promise.d.ts -promise.js -riscv.d.ts -riscv.js -string.d.ts -string.js -testChain.d.ts -testChain.js -toBigInt.d.ts -toBigInt.js -toBn.d.ts -toBn.js -u8a.d.ts -u8a.js -undefined.d.ts -undefined.js -utf8.d.ts -utf8.js -wasm.d.ts -wasm.js - -index.d.ts -index.js -toHex.d.ts -toHex.js -toU8a.d.ts -toU8a.js - -clear.d.ts -clear.js -copy.d.ts -copy.js -entries.d.ts -entries.js -index.d.ts -index.js -keys.d.ts -keys.js -property.d.ts -property.js -spread.d.ts -spread.js -values.d.ts -values.js - -camelCase.d.ts -camelCase.js -index.d.ts -index.js -lowerFirst.d.ts -lowerFirst.js -shorten.d.ts -shorten.js -toHex.d.ts -toHex.js -toU8a.d.ts -toU8a.js - -cmp.d.ts -cmp.js -concat.d.ts -concat.js -concatBuffer.d.ts -concatBuffer.js -empty.d.ts -empty.js -eq.d.ts -eq.js -fixLength.d.ts -fixLength.js -index.d.ts -index.js -sorted.d.ts -sorted.js -toBigInt.d.ts -toBigInt.js -toBn.d.ts -toBn.js -toBuffer.d.ts -toBuffer.js -toFloat.d.ts -toFloat.js -toHex.d.ts -toHex.js -toHexBuffer.d.ts -toHexBuffer.js -toNumber.d.ts -toNumber.js -toString.d.ts -toString.js -toU8a.d.ts -toU8a.js -wrap.d.ts -wrap.js - -addLength.d.ts -addLength.js -defaults.d.ts -defaults.js -fromU8a.d.ts -fromU8a.js -index.d.ts -index.js -stripLength.d.ts -stripLength.js -toU8a.d.ts -toU8a.js -types.d.ts -types.js - -index.d.ts -index.js -toU8a.d.ts -toU8a.js - -formatBalance.d.ts -formatBalance.js -formatDate.d.ts -formatDate.js -formatDecimal.d.ts -formatDecimal.js -formatElapsed.d.ts -formatElapsed.js -formatNumber.d.ts -formatNumber.js -getSeparator.d.ts -getSeparator.js -index.d.ts -index.js -si.d.ts -si.js - -addPrefix.d.ts -addPrefix.js -fixLength.d.ts -fixLength.js -hasPrefix.d.ts -hasPrefix.js -index.d.ts -index.js -stripPrefix.d.ts -stripPrefix.js -toBigInt.d.ts -toBigInt.js -toBn.d.ts -toBn.js -toNumber.d.ts -toNumber.js -toString.d.ts -toString.js -toU8a.d.ts -toU8a.js -toU8aBuffer.d.ts -toU8aBuffer.js - -array.d.ts -array.js -ascii.d.ts -ascii.js -bigInt.d.ts -bigInt.js -bn.d.ts -bn.js -boolean.d.ts -boolean.js -buffer.d.ts -buffer.js -childClass.d.ts -childClass.js -class.d.ts -class.js -codec.d.ts -codec.js -compact.d.ts -compact.js -error.d.ts -error.js -function.d.ts -function.js -helpers.d.ts -helpers.js -hex.d.ts -hex.js -index.d.ts -index.js -instanceOf.d.ts -instanceOf.js -ip.d.ts -ip.js -jsonObject.d.ts -jsonObject.js -null.d.ts -null.js -number.d.ts -number.js -object.d.ts -object.js -observable.d.ts -observable.js -promise.d.ts -promise.js -riscv.d.ts -riscv.js -string.d.ts -string.js -testChain.d.ts -testChain.js -toBigInt.d.ts -toBigInt.js -toBn.d.ts -toBn.js -u8a.d.ts -u8a.js -undefined.d.ts -undefined.js -utf8.d.ts -utf8.js -wasm.d.ts -wasm.js - -index.d.ts -index.js -toHex.d.ts -toHex.js -toU8a.d.ts -toU8a.js - -clear.d.ts -clear.js -copy.d.ts -copy.js -entries.d.ts -entries.js -index.d.ts -index.js -keys.d.ts -keys.js -property.d.ts -property.js -spread.d.ts -spread.js -values.d.ts -values.js - -camelCase.d.ts -camelCase.js -index.d.ts -index.js -lowerFirst.d.ts -lowerFirst.js -shorten.d.ts -shorten.js -toHex.d.ts -toHex.js -toU8a.d.ts -toU8a.js - -cmp.d.ts -cmp.js -concat.d.ts -concat.js -concatBuffer.d.ts -concatBuffer.js -empty.d.ts -empty.js -eq.d.ts -eq.js -fixLength.d.ts -fixLength.js -index.d.ts -index.js -sorted.d.ts -sorted.js -toBigInt.d.ts -toBigInt.js -toBn.d.ts -toBn.js -toBuffer.d.ts -toBuffer.js -toFloat.d.ts -toFloat.js -toHex.d.ts -toHex.js -toHexBuffer.d.ts -toHexBuffer.js -toNumber.d.ts -toNumber.js -toString.d.ts -toString.js -toU8a.d.ts -toU8a.js -wrap.d.ts -wrap.js - -LICENSE -README.md -address -base32 -base58 -base64 -blake2 -bn.d.ts -bn.js -bundle-polkadot-util-crypto.js -bundle.d.ts -bundle.js -bundleInit.d.ts -bundleInit.js -cjs -crypto.d.ts -crypto.js -ed25519 -ethereum -hd -helpers.d.ts -helpers.js -hmac -index.d.ts -index.js -json -keccak -key -mnemonic -nacl -networks.d.ts -networks.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -pbkdf2 -random -scrypt -secp256k1 -sha -signature -sr25519 -types.d.ts -types.js -xxhash - -addressToEvm.d.ts -addressToEvm.js -check.d.ts -check.js -checksum.d.ts -checksum.js -decode.d.ts -decode.js -defaults.d.ts -defaults.js -derive.d.ts -derive.js -encode.d.ts -encode.js -encodeDerived.d.ts -encodeDerived.js -encodeMulti.d.ts -encodeMulti.js -eq.d.ts -eq.js -evmToAddress.d.ts -evmToAddress.js -index.d.ts -index.js -is.d.ts -is.js -keyDerived.d.ts -keyDerived.js -keyMulti.d.ts -keyMulti.js -setSS58Format.d.ts -setSS58Format.js -sort.d.ts -sort.js -sshash.d.ts -sshash.js -types.d.ts -types.js -util.d.ts -util.js -validate.d.ts -validate.js - -bs32.d.ts -bs32.js -helpers.d.ts -helpers.js -index.d.ts -index.js - -bs58.d.ts -bs58.js -index.d.ts -index.js - -bs64.d.ts -bs64.js -index.d.ts -index.js -pad.d.ts -pad.js -trim.d.ts -trim.js - -asU8a.d.ts -asU8a.js -index.d.ts -index.js - -address -base32 -base58 -base64 -blake2 -bn.d.ts -bn.js -bundle.d.ts -bundle.js -bundleInit.d.ts -bundleInit.js -crypto.d.ts -crypto.js -ed25519 -ethereum -hd -helpers.d.ts -helpers.js -hmac -index.d.ts -index.js -json -keccak -key -mnemonic -nacl -networks.d.ts -networks.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -pbkdf2 -random -scrypt -secp256k1 -sha -signature -sr25519 -types.d.ts -types.js -xxhash - -addressToEvm.d.ts -addressToEvm.js -check.d.ts -check.js -checksum.d.ts -checksum.js -decode.d.ts -decode.js -defaults.d.ts -defaults.js -derive.d.ts -derive.js -encode.d.ts -encode.js -encodeDerived.d.ts -encodeDerived.js -encodeMulti.d.ts -encodeMulti.js -eq.d.ts -eq.js -evmToAddress.d.ts -evmToAddress.js -index.d.ts -index.js -is.d.ts -is.js -keyDerived.d.ts -keyDerived.js -keyMulti.d.ts -keyMulti.js -setSS58Format.d.ts -setSS58Format.js -sort.d.ts -sort.js -sshash.d.ts -sshash.js -types.d.ts -types.js -util.d.ts -util.js -validate.d.ts -validate.js - -bs32.d.ts -bs32.js -helpers.d.ts -helpers.js -index.d.ts -index.js - -bs58.d.ts -bs58.js -index.d.ts -index.js - -bs64.d.ts -bs64.js -index.d.ts -index.js -pad.d.ts -pad.js -trim.d.ts -trim.js - -asU8a.d.ts -asU8a.js -index.d.ts -index.js - -deriveHard.d.ts -deriveHard.js -index.d.ts -index.js -pair -sign.d.ts -sign.js -verify.d.ts -verify.js - -fromRandom.d.ts -fromRandom.js -fromSecret.d.ts -fromSecret.js -fromSeed.d.ts -fromSeed.js -fromString.d.ts -fromString.js - -encode.d.ts -encode.js -index.d.ts -index.js -isAddress.d.ts -isAddress.js -isChecksum.d.ts -isChecksum.js - -ethereum -index.d.ts -index.js -ledger -validatePath.d.ts -validatePath.js - -index.d.ts -index.js - -derivePrivate.d.ts -derivePrivate.js -index.d.ts -index.js -master.d.ts -master.js - -index.d.ts -index.js -shaAsU8a.d.ts -shaAsU8a.js - -constants.d.ts -constants.js -decrypt.d.ts -decrypt.js -decryptData.d.ts -decryptData.js -encrypt.d.ts -encrypt.js -encryptFormat.d.ts -encryptFormat.js -index.d.ts -index.js -types.d.ts -types.js - -asU8a.d.ts -asU8a.js -index.d.ts -index.js - -DeriveJunction.d.ts -DeriveJunction.js -extractPath.d.ts -extractPath.js -extractSuri.d.ts -extractSuri.js -fromPath.d.ts -fromPath.js -hdkdDerive.d.ts -hdkdDerive.js -hdkdEcdsa.d.ts -hdkdEcdsa.js -hdkdEd25519.d.ts -hdkdEd25519.js -hdkdSr25519.d.ts -hdkdSr25519.js -index.d.ts -index.js - -bip39.d.ts -bip39.js -generate.d.ts -generate.js -index.d.ts -index.js -toEntropy.d.ts -toEntropy.js -toLegacySeed.d.ts -toLegacySeed.js -toMiniSecret.d.ts -toMiniSecret.js -validate.d.ts -validate.js -wordlists - -en.d.ts -en.js -es.d.ts -es.js -fr.d.ts -fr.js -index.d.ts -index.js -it.d.ts -it.js -jp.d.ts -jp.js -ko.d.ts -ko.js -zh-s.d.ts -zh-s.js -zh-t.d.ts -zh-t.js - -decrypt.d.ts -decrypt.js -encrypt.d.ts -encrypt.js -index.d.ts -index.js -tweetnacl.d.ts -tweetnacl.js - -encode.d.ts -encode.js -index.d.ts -index.js - -asNumber.d.ts -asNumber.js -asU8a.d.ts -asU8a.js -index.d.ts -index.js - -defaults.d.ts -defaults.js -encode.d.ts -encode.js -fromU8a.d.ts -fromU8a.js -index.d.ts -index.js -toU8a.d.ts -toU8a.js -types.d.ts -types.js - -compress.d.ts -compress.js -deriveHard.d.ts -deriveHard.js -expand.d.ts -expand.js -hasher.d.ts -hasher.js -index.d.ts -index.js -pair -recover.d.ts -recover.js -sign.d.ts -sign.js -tweakAdd.d.ts -tweakAdd.js -types.d.ts -types.js -verify.d.ts -verify.js - -fromSeed.d.ts -fromSeed.js - -asU8a.d.ts -asU8a.js -index.d.ts -index.js - -index.d.ts -index.js -verify.d.ts -verify.js - -agreement.d.ts -agreement.js -derive.d.ts -derive.js -deriveHard.d.ts -deriveHard.js -derivePublic.d.ts -derivePublic.js -deriveSoft.d.ts -deriveSoft.js -index.d.ts -index.js -pair -sign.d.ts -sign.js -verify.d.ts -verify.js -vrfSign.d.ts -vrfSign.js -vrfVerify.d.ts -vrfVerify.js - -fromSeed.d.ts -fromSeed.js -fromU8a.d.ts -fromU8a.js -toU8a.d.ts -toU8a.js - -asU8a.d.ts -asU8a.js -index.d.ts -index.js -xxhash64.d.ts -xxhash64.js - -deriveHard.d.ts -deriveHard.js -index.d.ts -index.js -pair -sign.d.ts -sign.js -verify.d.ts -verify.js - -fromRandom.d.ts -fromRandom.js -fromSecret.d.ts -fromSecret.js -fromSeed.d.ts -fromSeed.js -fromString.d.ts -fromString.js - -encode.d.ts -encode.js -index.d.ts -index.js -isAddress.d.ts -isAddress.js -isChecksum.d.ts -isChecksum.js - -ethereum -index.d.ts -index.js -ledger -validatePath.d.ts -validatePath.js - -index.d.ts -index.js - -derivePrivate.d.ts -derivePrivate.js -index.d.ts -index.js -master.d.ts -master.js - -index.d.ts -index.js -shaAsU8a.d.ts -shaAsU8a.js - -constants.d.ts -constants.js -decrypt.d.ts -decrypt.js -decryptData.d.ts -decryptData.js -encrypt.d.ts -encrypt.js -encryptFormat.d.ts -encryptFormat.js -index.d.ts -index.js -types.d.ts -types.js - -asU8a.d.ts -asU8a.js -index.d.ts -index.js - -DeriveJunction.d.ts -DeriveJunction.js -extractPath.d.ts -extractPath.js -extractSuri.d.ts -extractSuri.js -fromPath.d.ts -fromPath.js -hdkdDerive.d.ts -hdkdDerive.js -hdkdEcdsa.d.ts -hdkdEcdsa.js -hdkdEd25519.d.ts -hdkdEd25519.js -hdkdSr25519.d.ts -hdkdSr25519.js -index.d.ts -index.js - -bip39.d.ts -bip39.js -generate.d.ts -generate.js -index.d.ts -index.js -toEntropy.d.ts -toEntropy.js -toLegacySeed.d.ts -toLegacySeed.js -toMiniSecret.d.ts -toMiniSecret.js -validate.d.ts -validate.js -wordlists - -en.d.ts -en.js -es.d.ts -es.js -fr.d.ts -fr.js -index.d.ts -index.js -it.d.ts -it.js -jp.d.ts -jp.js -ko.d.ts -ko.js -zh-s.d.ts -zh-s.js -zh-t.d.ts -zh-t.js - -decrypt.d.ts -decrypt.js -encrypt.d.ts -encrypt.js -index.d.ts -index.js -tweetnacl.d.ts -tweetnacl.js - -encode.d.ts -encode.js -index.d.ts -index.js - -asNumber.d.ts -asNumber.js -asU8a.d.ts -asU8a.js -index.d.ts -index.js - -defaults.d.ts -defaults.js -encode.d.ts -encode.js -fromU8a.d.ts -fromU8a.js -index.d.ts -index.js -toU8a.d.ts -toU8a.js -types.d.ts -types.js - -compress.d.ts -compress.js -deriveHard.d.ts -deriveHard.js -expand.d.ts -expand.js -hasher.d.ts -hasher.js -index.d.ts -index.js -pair -recover.d.ts -recover.js -sign.d.ts -sign.js -tweakAdd.d.ts -tweakAdd.js -types.d.ts -types.js -verify.d.ts -verify.js - -fromSeed.d.ts -fromSeed.js - -asU8a.d.ts -asU8a.js -index.d.ts -index.js - -index.d.ts -index.js -verify.d.ts -verify.js - -agreement.d.ts -agreement.js -derive.d.ts -derive.js -deriveHard.d.ts -deriveHard.js -derivePublic.d.ts -derivePublic.js -deriveSoft.d.ts -deriveSoft.js -index.d.ts -index.js -pair -sign.d.ts -sign.js -verify.d.ts -verify.js -vrfSign.d.ts -vrfSign.js -vrfVerify.d.ts -vrfVerify.js - -fromSeed.d.ts -fromSeed.js -fromU8a.d.ts -fromU8a.js -toU8a.d.ts -toU8a.js - -asU8a.d.ts -asU8a.js -index.d.ts -index.js -xxhash64.d.ts -xxhash64.js - -LICENSE -README.md -bridge.d.ts -bridge.js -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -init.d.ts -init.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types.d.ts -types.js -wbg.d.ts -wbg.js - -bridge.d.ts -bridge.js -bundle.d.ts -bundle.js -index.d.ts -index.js -init.d.ts -init.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types.d.ts -types.js -wbg.d.ts -wbg.js - -LICENSE -README.md -bundle-polkadot-wasm-crypto.js -bundle.d.ts -bundle.js -cjs -index.d.ts -index.js -init.d.ts -init.js -initNone.d.ts -initNone.js -initOnlyAsm.d.ts -initOnlyAsm.js -initOnlyWasm.d.ts -initOnlyWasm.js -initWasmAsm.d.ts -initWasmAsm.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -bundle.d.ts -bundle.js -index.d.ts -index.js -init.d.ts -init.js -initNone.d.ts -initNone.js -initOnlyAsm.d.ts -initOnlyAsm.js -initOnlyWasm.d.ts -initOnlyWasm.js -initWasmAsm.d.ts -initWasmAsm.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -LICENSE -README.md -bundle.d.ts -bundle.js -cjs -deno -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -bundle.d.ts -bundle.js -cjs -data.d.ts -data.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -data.d.ts -data.js - -data.d.ts -data.js - -LICENSE -README.md -asm.d.ts -asm.js -both.d.ts -both.js -bundle.d.ts -bundle.js -cjs -none.d.ts -none.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types.d.ts -types.js -wasm.d.ts -wasm.js - -asm.d.ts -asm.js -both.d.ts -both.js -bundle.d.ts -bundle.js -none.d.ts -none.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js -types.d.ts -types.js -wasm.d.ts -wasm.js - -LICENSE -README.md -bundle.d.ts -bundle.js -cjs -deno -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -bundle.d.ts -bundle.js -bytes.d.ts -bytes.js -cjs -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -bytes.d.ts -bytes.js - -bytes.d.ts -bytes.js - -LICENSE -README.md -base64.d.ts -base64.js -bundle.d.ts -bundle.js -cjs -fflate.d.ts -fflate.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -base64.d.ts -base64.js -bundle.d.ts -bundle.js -fflate.d.ts -fflate.js -index.d.ts -index.js -package.json -packageDetect.d.ts -packageDetect.js -packageInfo.d.ts -packageInfo.js - -LICENSE -README.md -cjs -index.d.ts -index.js -package.json -packageInfo.d.ts -packageInfo.js -shim.d.ts -shim.js - -index.d.ts -index.js -package.json -packageInfo.d.ts -packageInfo.js -shim.d.ts -shim.js - -LICENSE -README.md -browser.d.ts -browser.js -cjs -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js - -browser.d.ts -browser.js -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js - -LICENSE -README.md -cjs -index.d.ts -index.js -package.json -packageInfo.d.ts -packageInfo.js - -index.d.ts -index.js -package.json -packageInfo.d.ts -packageInfo.js - -LICENSE -README.md -browser.d.ts -browser.js -cjs -fallback.d.ts -fallback.js -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js - -browser.d.ts -browser.js -fallback.d.ts -fallback.js -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js - -LICENSE -README.md -browser.d.ts -browser.js -cjs -fallback.d.ts -fallback.js -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js -typeCheck.d.ts -typeCheck.js - -browser.d.ts -browser.js -fallback.d.ts -fallback.js -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js -typeCheck.d.ts -typeCheck.js - -LICENSE -README.md -browser.d.ts -browser.js -cjs -fallback.d.ts -fallback.js -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js -typeCheck.d.ts -typeCheck.js - -browser.d.ts -browser.js -fallback.d.ts -fallback.js -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js -typeCheck.d.ts -typeCheck.js - -LICENSE -README.md -browser.d.ts -browser.js -cjs -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js - -browser.d.ts -browser.js -node.d.ts -node.js -package.json -packageInfo.d.ts -packageInfo.js -react-native.d.ts -react-native.js -shim.d.ts -shim.js - -json-rpc-provider -json-rpc-provider-proxy -metadata-builders -observable-client -substrate-bindings -substrate-client -utils - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -min - -index.d.ts -index.js -index.js.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -min - -index.d.ts -index.js -index.js.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -min - -index.d.ts -index.js -index.js.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -min - -index.d.ts -index.js -index.js.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -min - -index.d.ts -index.js -index.js.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -min - -index.d.ts -index.js -index.js.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -min - -index.d.ts -index.js -index.js.map - -number -primitive -react-accordion -react-alert-dialog -react-arrow -react-aspect-ratio -react-avatar -react-checkbox -react-collapsible -react-collection -react-compose-refs -react-context -react-context-menu -react-dialog -react-direction -react-dismissable-layer -react-dropdown-menu -react-focus-guards -react-focus-scope -react-hover-card -react-id -react-label -react-menu -react-menubar -react-navigation-menu -react-popover -react-popper -react-portal -react-presence -react-primitive -react-progress -react-radio-group -react-roving-focus -react-scroll-area -react-select -react-separator -react-slider -react-slot -react-switch -react-tabs -react-toast -react-toggle -react-toggle-group -react-tooltip -react-use-callback-ref -react-use-controllable-state -react-use-effect-event -react-use-escape-keydown -react-use-is-hydrated -react-use-layout-effect -react-use-previous -react-use-rect -react-use-size -react-visually-hidden -rect - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json -src - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -alert-dialog.test.tsx -alert-dialog.tsx -index.ts - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json -src - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -index.ts -use-effect-event.tsx - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json -src - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -index.ts -use-is-hydrated.tsx - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -router - -CHANGELOG.md -LICENSE.md -README.md -dist -history.ts -index.ts -package.json -router.ts -utils.ts - -history.d.ts -index.d.ts -router.cjs.js -router.cjs.js.map -router.d.ts -router.js -router.js.map -router.umd.js -router.umd.js.map -router.umd.min.js -router.umd.min.js.map -utils.d.ts - -pluginutils - -LICENSE -dist -package.json - -index.cjs -index.d.cts -index.d.ts -index.js - -rollup-linux-x64-gnu -rollup-linux-x64-musl - -README.md -package.json -rollup.linux-x64-gnu.node - -README.md -package.json -rollup.linux-x64-musl.node - -base - -LICENSE -README.md -index.ts -lib -package.json - -esm -index.d.ts -index.d.ts.map -index.js -index.js.map - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -connect -connect-extension-protocol -connect-known-chains -light-client-extension-helpers -ss58-registry - -CHANGELOG.md -LICENSE -README.md -dist -package.json -src -test -typedoc.json - -index.cjs -index.cjs.map -index.d.cts -index.d.ts -index.js -index.js.map -worker-node.cjs -worker-node.cjs.map -worker-node.d.cts -worker-node.d.ts -worker-node.js -worker-node.js.map -worker.cjs -worker.cjs.map -worker.d.cts -worker.d.ts -worker.js -worker.js.map - -WellKnownChain.ts -connector -index.ts -worker-node.ts -worker.ts - -extension.ts -getSpec.ts -index.ts -smoldot-light.test.ts -smoldot-light.ts -types.ts - -flaky - -sanity.test.ts - -LICENSE -README.md -dist -package.json - -commonjs -esm - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -LICENSE -README.md -dist -package.json - -commonjs -esm - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -specs - -ksmcc3.d.ts -ksmcc3.d.ts.map -ksmcc3.js -ksmcc3.js.map -ksmcc3_asset_hub.d.ts -ksmcc3_asset_hub.d.ts.map -ksmcc3_asset_hub.js -ksmcc3_asset_hub.js.map -ksmcc3_bridge_hub.d.ts -ksmcc3_bridge_hub.d.ts.map -ksmcc3_bridge_hub.js -ksmcc3_bridge_hub.js.map -ksmcc3_people.d.ts -ksmcc3_people.d.ts.map -ksmcc3_people.js -ksmcc3_people.js.map -paseo.d.ts -paseo.d.ts.map -paseo.js -paseo.js.map -polkadot.d.ts -polkadot.d.ts.map -polkadot.js -polkadot.js.map -polkadot_asset_hub.d.ts -polkadot_asset_hub.d.ts.map -polkadot_asset_hub.js -polkadot_asset_hub.js.map -polkadot_bridge_hub.d.ts -polkadot_bridge_hub.d.ts.map -polkadot_bridge_hub.js -polkadot_bridge_hub.js.map -polkadot_collectives.d.ts -polkadot_collectives.d.ts.map -polkadot_collectives.js -polkadot_collectives.js.map -polkadot_people.d.ts -polkadot_people.d.ts.map -polkadot_people.js -polkadot_people.js.map -rococo_v2_2.d.ts -rococo_v2_2.d.ts.map -rococo_v2_2.js -rococo_v2_2.js.map -rococo_v2_2_asset_hub.d.ts -rococo_v2_2_asset_hub.d.ts.map -rococo_v2_2_asset_hub.js -rococo_v2_2_asset_hub.js.map -rococo_v2_2_bridge_hub.d.ts -rococo_v2_2_bridge_hub.d.ts.map -rococo_v2_2_bridge_hub.js -rococo_v2_2_bridge_hub.js.map -westend2.d.ts -westend2.d.ts.map -westend2.js -westend2.js.map -westend2_asset_hub.d.ts -westend2_asset_hub.d.ts.map -westend2_asset_hub.js -westend2_asset_hub.js.map -westend2_bridge_hub.d.ts -westend2_bridge_hub.d.ts.map -westend2_bridge_hub.js -westend2_bridge_hub.js.map -westend2_collectives.d.ts -westend2_collectives.d.ts.map -westend2_collectives.js -westend2_collectives.js.map -westend_people.d.ts -westend_people.d.ts.map -westend_people.js -westend_people.js.map - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -specs - -ksmcc3.d.ts -ksmcc3.d.ts.map -ksmcc3.js -ksmcc3.js.map -ksmcc3_asset_hub.d.ts -ksmcc3_asset_hub.d.ts.map -ksmcc3_asset_hub.js -ksmcc3_asset_hub.js.map -ksmcc3_bridge_hub.d.ts -ksmcc3_bridge_hub.d.ts.map -ksmcc3_bridge_hub.js -ksmcc3_bridge_hub.js.map -ksmcc3_people.d.ts -ksmcc3_people.d.ts.map -ksmcc3_people.js -ksmcc3_people.js.map -paseo.d.ts -paseo.d.ts.map -paseo.js -paseo.js.map -polkadot.d.ts -polkadot.d.ts.map -polkadot.js -polkadot.js.map -polkadot_asset_hub.d.ts -polkadot_asset_hub.d.ts.map -polkadot_asset_hub.js -polkadot_asset_hub.js.map -polkadot_bridge_hub.d.ts -polkadot_bridge_hub.d.ts.map -polkadot_bridge_hub.js -polkadot_bridge_hub.js.map -polkadot_collectives.d.ts -polkadot_collectives.d.ts.map -polkadot_collectives.js -polkadot_collectives.js.map -polkadot_people.d.ts -polkadot_people.d.ts.map -polkadot_people.js -polkadot_people.js.map -rococo_v2_2.d.ts -rococo_v2_2.d.ts.map -rococo_v2_2.js -rococo_v2_2.js.map -rococo_v2_2_asset_hub.d.ts -rococo_v2_2_asset_hub.d.ts.map -rococo_v2_2_asset_hub.js -rococo_v2_2_asset_hub.js.map -rococo_v2_2_bridge_hub.d.ts -rococo_v2_2_bridge_hub.d.ts.map -rococo_v2_2_bridge_hub.js -rococo_v2_2_bridge_hub.js.map -westend2.d.ts -westend2.d.ts.map -westend2.js -westend2.js.map -westend2_asset_hub.d.ts -westend2_asset_hub.d.ts.map -westend2_asset_hub.js -westend2_asset_hub.js.map -westend2_bridge_hub.d.ts -westend2_bridge_hub.d.ts.map -westend2_bridge_hub.js -westend2_bridge_hub.js.map -westend2_collectives.d.ts -westend2_collectives.d.ts.map -westend2_collectives.js -westend2_collectives.js.map -westend_people.d.ts -westend_people.d.ts.map -westend_people.js -westend_people.js.map - -LICENSE -README.md -dist -package.json - -background -chunk-7VMHRXA3.mjs -chunk-7VMHRXA3.mjs.map -chunk-CKFPCLAG.mjs -chunk-CKFPCLAG.mjs.map -chunk-FJY652KW.mjs -chunk-FJY652KW.mjs.map -chunk-INDV5VY4.mjs -chunk-INDV5VY4.mjs.map -chunk-KOQEJYB7.mjs -chunk-KOQEJYB7.mjs.map -chunk-TMDP3M7I.mjs -chunk-TMDP3M7I.mjs.map -chunk-XBPBI72X.mjs -chunk-XBPBI72X.mjs.map -chunk-XEY7HSUM.mjs -chunk-XEY7HSUM.mjs.map -content-script -extension-page -known-chain-specs -smoldot -types-BlA9-2mv.d.mts -types-CpJ7qODO.d.mts -utils -web-page - -background-helper.d.mts -background-helper.mjs -background-helper.mjs.map - -content-script-helper.d.mts -content-script-helper.mjs -content-script-helper.mjs.map - -extension-page-helper.d.mts -extension-page-helper.mjs -extension-page-helper.mjs.map - -index.d.mts -index.mjs -index.mjs.map -ksmcc3.d.mts -ksmcc3.mjs -ksmcc3.mjs.map -polkadot.d.mts -polkadot.mjs -polkadot.mjs.map -rococo_v2_2.d.mts -rococo_v2_2.mjs -rococo_v2_2.mjs.map -westend2.d.mts -westend2.mjs -westend2.mjs.map - -index.d.mts -index.mjs -index.mjs.map - -index.d.mts -index.mjs -index.mjs.map - -web-page-helper.d.mts -web-page-helper.mjs -web-page-helper.mjs.map - -CHANGELOG.md -LICENSE -README.md -cjs -esm -index.d.ts -package.json - -index.js -package.json - -index.js -package.json - -auth-js -functions-js -node-fetch -postgrest-js -realtime-js -storage-js -supabase-js - -LICENSE -README.md -dist -package.json -src - -main -module -tsconfig.module.tsbuildinfo -tsconfig.tsbuildinfo - -AuthAdminApi.d.ts -AuthAdminApi.d.ts.map -AuthAdminApi.js -AuthAdminApi.js.map -AuthClient.d.ts -AuthClient.d.ts.map -AuthClient.js -AuthClient.js.map -GoTrueAdminApi.d.ts -GoTrueAdminApi.d.ts.map -GoTrueAdminApi.js -GoTrueAdminApi.js.map -GoTrueClient.d.ts -GoTrueClient.d.ts.map -GoTrueClient.js -GoTrueClient.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -lib - -base64url.d.ts -base64url.d.ts.map -base64url.js -base64url.js.map -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -error-codes.d.ts -error-codes.d.ts.map -error-codes.js -error-codes.js.map -errors.d.ts -errors.d.ts.map -errors.js -errors.js.map -fetch.d.ts -fetch.d.ts.map -fetch.js -fetch.js.map -helpers.d.ts -helpers.d.ts.map -helpers.js -helpers.js.map -local-storage.d.ts -local-storage.d.ts.map -local-storage.js -local-storage.js.map -locks.d.ts -locks.d.ts.map -locks.js -locks.js.map -polyfills.d.ts -polyfills.d.ts.map -polyfills.js -polyfills.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map -version.d.ts -version.d.ts.map -version.js -version.js.map -web3 -webauthn.d.ts -webauthn.d.ts.map -webauthn.dom.d.ts -webauthn.dom.d.ts.map -webauthn.dom.js -webauthn.dom.js.map -webauthn.errors.d.ts -webauthn.errors.d.ts.map -webauthn.errors.js -webauthn.errors.js.map -webauthn.js -webauthn.js.map - -ethereum.d.ts -ethereum.d.ts.map -ethereum.js -ethereum.js.map -solana.d.ts -solana.d.ts.map -solana.js -solana.js.map - -AuthAdminApi.d.ts -AuthAdminApi.d.ts.map -AuthAdminApi.js -AuthAdminApi.js.map -AuthClient.d.ts -AuthClient.d.ts.map -AuthClient.js -AuthClient.js.map -GoTrueAdminApi.d.ts -GoTrueAdminApi.d.ts.map -GoTrueAdminApi.js -GoTrueAdminApi.js.map -GoTrueClient.d.ts -GoTrueClient.d.ts.map -GoTrueClient.js -GoTrueClient.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -lib - -base64url.d.ts -base64url.d.ts.map -base64url.js -base64url.js.map -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -error-codes.d.ts -error-codes.d.ts.map -error-codes.js -error-codes.js.map -errors.d.ts -errors.d.ts.map -errors.js -errors.js.map -fetch.d.ts -fetch.d.ts.map -fetch.js -fetch.js.map -helpers.d.ts -helpers.d.ts.map -helpers.js -helpers.js.map -local-storage.d.ts -local-storage.d.ts.map -local-storage.js -local-storage.js.map -locks.d.ts -locks.d.ts.map -locks.js -locks.js.map -polyfills.d.ts -polyfills.d.ts.map -polyfills.js -polyfills.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map -version.d.ts -version.d.ts.map -version.js -version.js.map -web3 -webauthn.d.ts -webauthn.d.ts.map -webauthn.dom.d.ts -webauthn.dom.d.ts.map -webauthn.dom.js -webauthn.dom.js.map -webauthn.errors.d.ts -webauthn.errors.d.ts.map -webauthn.errors.js -webauthn.errors.js.map -webauthn.js -webauthn.js.map - -ethereum.d.ts -ethereum.d.ts.map -ethereum.js -ethereum.js.map -solana.d.ts -solana.d.ts.map -solana.js -solana.js.map - -AuthAdminApi.ts -AuthClient.ts -GoTrueAdminApi.ts -GoTrueClient.ts -index.ts -lib - -base64url.ts -constants.ts -error-codes.ts -errors.ts -fetch.ts -helpers.ts -local-storage.ts -locks.ts -polyfills.ts -types.ts -version.ts -web3 -webauthn.dom.ts -webauthn.errors.ts -webauthn.ts - -ethereum.ts -solana.ts - -README.md -dist -package.json -src - -main -module -tsconfig.module.tsbuildinfo -tsconfig.tsbuildinfo - -FunctionsClient.d.ts -FunctionsClient.d.ts.map -FunctionsClient.js -FunctionsClient.js.map -helper.d.ts -helper.d.ts.map -helper.js -helper.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map -version.d.ts -version.d.ts.map -version.js -version.js.map - -FunctionsClient.d.ts -FunctionsClient.d.ts.map -FunctionsClient.js -FunctionsClient.js.map -helper.d.ts -helper.d.ts.map -helper.js -helper.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map -version.d.ts -version.d.ts.map -version.js -version.js.map - -FunctionsClient.ts -edge-runtime.d.ts -helper.ts -index.ts -types.ts -version.ts - -LICENSE.md -README.md -browser.js -lib -package.json - -index.es.js -index.js -index.mjs - -README.md -dist -package.json -src - -cjs -esm -tsconfig.tsbuildinfo - -PostgrestBuilder.d.ts -PostgrestBuilder.d.ts.map -PostgrestBuilder.js -PostgrestBuilder.js.map -PostgrestClient.d.ts -PostgrestClient.d.ts.map -PostgrestClient.js -PostgrestClient.js.map -PostgrestError.d.ts -PostgrestError.d.ts.map -PostgrestError.js -PostgrestError.js.map -PostgrestFilterBuilder.d.ts -PostgrestFilterBuilder.d.ts.map -PostgrestFilterBuilder.js -PostgrestFilterBuilder.js.map -PostgrestQueryBuilder.d.ts -PostgrestQueryBuilder.d.ts.map -PostgrestQueryBuilder.js -PostgrestQueryBuilder.js.map -PostgrestTransformBuilder.d.ts -PostgrestTransformBuilder.d.ts.map -PostgrestTransformBuilder.js -PostgrestTransformBuilder.js.map -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -select-query-parser -types -version.d.ts -version.d.ts.map -version.js -version.js.map - -parser.d.ts -parser.d.ts.map -parser.js -parser.js.map -result.d.ts -result.d.ts.map -result.js -result.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map -utils.d.ts -utils.d.ts.map -utils.js -utils.js.map - -common -types.d.ts -types.d.ts.map -types.js -types.js.map - -common.d.ts -common.d.ts.map -common.js -common.js.map -rpc.d.ts -rpc.d.ts.map -rpc.js -rpc.js.map - -wrapper.mjs - -PostgrestBuilder.ts -PostgrestClient.ts -PostgrestError.ts -PostgrestFilterBuilder.ts -PostgrestQueryBuilder.ts -PostgrestTransformBuilder.ts -constants.ts -index.ts -select-query-parser -types -version.ts - -parser.ts -result.ts -types.ts -utils.ts - -common -types.ts - -common.ts -rpc.ts - -README.md -dist -package.json -src - -main -module -tsconfig.module.tsbuildinfo -tsconfig.tsbuildinfo - -RealtimeChannel.d.ts -RealtimeChannel.d.ts.map -RealtimeChannel.js -RealtimeChannel.js.map -RealtimeClient.d.ts -RealtimeClient.d.ts.map -RealtimeClient.js -RealtimeClient.js.map -RealtimePresence.d.ts -RealtimePresence.d.ts.map -RealtimePresence.js -RealtimePresence.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -lib - -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -push.d.ts -push.d.ts.map -push.js -push.js.map -serializer.d.ts -serializer.d.ts.map -serializer.js -serializer.js.map -timer.d.ts -timer.d.ts.map -timer.js -timer.js.map -transformers.d.ts -transformers.d.ts.map -transformers.js -transformers.js.map -version.d.ts -version.d.ts.map -version.js -version.js.map -websocket-factory.d.ts -websocket-factory.d.ts.map -websocket-factory.js -websocket-factory.js.map - -RealtimeChannel.d.ts -RealtimeChannel.d.ts.map -RealtimeChannel.js -RealtimeChannel.js.map -RealtimeClient.d.ts -RealtimeClient.d.ts.map -RealtimeClient.js -RealtimeClient.js.map -RealtimePresence.d.ts -RealtimePresence.d.ts.map -RealtimePresence.js -RealtimePresence.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -lib - -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -push.d.ts -push.d.ts.map -push.js -push.js.map -serializer.d.ts -serializer.d.ts.map -serializer.js -serializer.js.map -timer.d.ts -timer.d.ts.map -timer.js -timer.js.map -transformers.d.ts -transformers.d.ts.map -transformers.js -transformers.js.map -version.d.ts -version.d.ts.map -version.js -version.js.map -websocket-factory.d.ts -websocket-factory.d.ts.map -websocket-factory.js -websocket-factory.js.map - -RealtimeChannel.ts -RealtimeClient.ts -RealtimePresence.ts -index.ts -lib - -constants.ts -push.ts -serializer.ts -timer.ts -transformers.ts -version.ts -websocket-factory.ts - -README.md -dist -package.json -src - -main -module -tsconfig.module.tsbuildinfo -tsconfig.tsbuildinfo -umd - -StorageClient.d.ts -StorageClient.d.ts.map -StorageClient.js -StorageClient.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -lib -packages - -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -errors.d.ts -errors.d.ts.map -errors.js -errors.js.map -fetch.d.ts -fetch.d.ts.map -fetch.js -fetch.js.map -helpers.d.ts -helpers.d.ts.map -helpers.js -helpers.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map -vectors -version.d.ts -version.d.ts.map -version.js -version.js.map - -StorageVectorsClient.d.ts -StorageVectorsClient.d.ts.map -StorageVectorsClient.js -StorageVectorsClient.js.map -VectorBucketApi.d.ts -VectorBucketApi.d.ts.map -VectorBucketApi.js -VectorBucketApi.js.map -VectorDataApi.d.ts -VectorDataApi.d.ts.map -VectorDataApi.js -VectorDataApi.js.map -VectorIndexApi.d.ts -VectorIndexApi.d.ts.map -VectorIndexApi.js -VectorIndexApi.js.map -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -errors.d.ts -errors.d.ts.map -errors.js -errors.js.map -fetch.d.ts -fetch.d.ts.map -fetch.js -fetch.js.map -helpers.d.ts -helpers.d.ts.map -helpers.js -helpers.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map - -BlobDownloadBuilder.d.ts -BlobDownloadBuilder.d.ts.map -BlobDownloadBuilder.js -BlobDownloadBuilder.js.map -StorageAnalyticsApi.d.ts -StorageAnalyticsApi.d.ts.map -StorageAnalyticsApi.js -StorageAnalyticsApi.js.map -StorageBucketApi.d.ts -StorageBucketApi.d.ts.map -StorageBucketApi.js -StorageBucketApi.js.map -StorageFileApi.d.ts -StorageFileApi.d.ts.map -StorageFileApi.js -StorageFileApi.js.map -StreamDownloadBuilder.d.ts -StreamDownloadBuilder.d.ts.map -StreamDownloadBuilder.js -StreamDownloadBuilder.js.map - -StorageClient.d.ts -StorageClient.d.ts.map -StorageClient.js -StorageClient.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -lib -packages - -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -errors.d.ts -errors.d.ts.map -errors.js -errors.js.map -fetch.d.ts -fetch.d.ts.map -fetch.js -fetch.js.map -helpers.d.ts -helpers.d.ts.map -helpers.js -helpers.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map -vectors -version.d.ts -version.d.ts.map -version.js -version.js.map - -StorageVectorsClient.d.ts -StorageVectorsClient.d.ts.map -StorageVectorsClient.js -StorageVectorsClient.js.map -VectorBucketApi.d.ts -VectorBucketApi.d.ts.map -VectorBucketApi.js -VectorBucketApi.js.map -VectorDataApi.d.ts -VectorDataApi.d.ts.map -VectorDataApi.js -VectorDataApi.js.map -VectorIndexApi.d.ts -VectorIndexApi.d.ts.map -VectorIndexApi.js -VectorIndexApi.js.map -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -errors.d.ts -errors.d.ts.map -errors.js -errors.js.map -fetch.d.ts -fetch.d.ts.map -fetch.js -fetch.js.map -helpers.d.ts -helpers.d.ts.map -helpers.js -helpers.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -types.d.ts -types.d.ts.map -types.js -types.js.map - -BlobDownloadBuilder.d.ts -BlobDownloadBuilder.d.ts.map -BlobDownloadBuilder.js -BlobDownloadBuilder.js.map -StorageAnalyticsApi.d.ts -StorageAnalyticsApi.d.ts.map -StorageAnalyticsApi.js -StorageAnalyticsApi.js.map -StorageBucketApi.d.ts -StorageBucketApi.d.ts.map -StorageBucketApi.js -StorageBucketApi.js.map -StorageFileApi.d.ts -StorageFileApi.d.ts.map -StorageFileApi.js -StorageFileApi.js.map -StreamDownloadBuilder.d.ts -StreamDownloadBuilder.d.ts.map -StreamDownloadBuilder.js -StreamDownloadBuilder.js.map - -supabase.js - -StorageClient.ts -index.ts -lib -packages - -constants.ts -errors.ts -fetch.ts -helpers.ts -index.ts -types.ts -vectors -version.ts - -StorageVectorsClient.ts -VectorBucketApi.ts -VectorDataApi.ts -VectorIndexApi.ts -constants.ts -errors.ts -fetch.ts -helpers.ts -index.ts -types.ts - -BlobDownloadBuilder.ts -StorageAnalyticsApi.ts -StorageBucketApi.ts -StorageFileApi.ts -StreamDownloadBuilder.ts - -README.md -dist -package.json -src - -main -module -umd - -SupabaseClient.d.ts -SupabaseClient.d.ts.map -SupabaseClient.js -SupabaseClient.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -lib - -SupabaseAuthClient.d.ts -SupabaseAuthClient.d.ts.map -SupabaseAuthClient.js -SupabaseAuthClient.js.map -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -fetch.d.ts -fetch.d.ts.map -fetch.js -fetch.js.map -helpers.d.ts -helpers.d.ts.map -helpers.js -helpers.js.map -rest -types.d.ts -types.d.ts.map -types.js -types.js.map -version.d.ts -version.d.ts.map -version.js -version.js.map - -types - -common - -common.d.ts -common.d.ts.map -common.js -common.js.map -rpc.d.ts -rpc.d.ts.map -rpc.js -rpc.js.map - -SupabaseClient.d.ts -SupabaseClient.d.ts.map -SupabaseClient.js -SupabaseClient.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -lib - -SupabaseAuthClient.d.ts -SupabaseAuthClient.d.ts.map -SupabaseAuthClient.js -SupabaseAuthClient.js.map -constants.d.ts -constants.d.ts.map -constants.js -constants.js.map -fetch.d.ts -fetch.d.ts.map -fetch.js -fetch.js.map -helpers.d.ts -helpers.d.ts.map -helpers.js -helpers.js.map -rest -types.d.ts -types.d.ts.map -types.js -types.js.map -version.d.ts -version.d.ts.map -version.js -version.js.map - -types - -common - -common.d.ts -common.d.ts.map -common.js -common.js.map -rpc.d.ts -rpc.d.ts.map -rpc.js -rpc.js.map - -supabase.js - -SupabaseClient.ts -index.ts -lib - -SupabaseAuthClient.ts -constants.ts -fetch.ts -helpers.ts -rest -types.ts -version.ts - -types - -common - -common.ts -rpc.ts - -core -core-linux-x64-gnu -core-linux-x64-musl -counter -types - -README.md -Visitor.d.ts -Visitor.js -binding.d.ts -binding.js -index.d.ts -index.js -package.json -postinstall.js -spack.d.ts -spack.js -util.d.ts -util.js - -README.md -package.json -swc.linux-x64-gnu.node - -README.md -package.json -swc.linux-x64-musl.node - -CHANGELOG.md -README.md -index.js -package.json - -LICENSE -README.md -assumptions.d.ts -assumptions.js -index.d.ts -index.js -package.json - -typography - -LICENSE -README.md -package.json -src - -index.d.ts -index.js -index.test.js -styles.js -utils.js - -query-core -react-query - -LICENSE -build -package.json -src - -legacy -modern - -chunk-PXG64RU4.js -chunk-PXG64RU4.js.map -focusManager.cjs -focusManager.cjs.map -focusManager.d.cts -focusManager.d.ts -focusManager.js -focusManager.js.map -hydration-CeGZtiZv.d.ts -hydration-DWB9yu-g.d.cts -hydration.cjs -hydration.cjs.map -hydration.d.cts -hydration.d.ts -hydration.js -hydration.js.map -index.cjs -index.cjs.map -index.d.cts -index.d.ts -index.js -index.js.map -infiniteQueryBehavior.cjs -infiniteQueryBehavior.cjs.map -infiniteQueryBehavior.d.cts -infiniteQueryBehavior.d.ts -infiniteQueryBehavior.js -infiniteQueryBehavior.js.map -infiniteQueryObserver.cjs -infiniteQueryObserver.cjs.map -infiniteQueryObserver.d.cts -infiniteQueryObserver.d.ts -infiniteQueryObserver.js -infiniteQueryObserver.js.map -mutation.cjs -mutation.cjs.map -mutation.d.cts -mutation.d.ts -mutation.js -mutation.js.map -mutationCache.cjs -mutationCache.cjs.map -mutationCache.d.cts -mutationCache.d.ts -mutationCache.js -mutationCache.js.map -mutationObserver.cjs -mutationObserver.cjs.map -mutationObserver.d.cts -mutationObserver.d.ts -mutationObserver.js -mutationObserver.js.map -notifyManager.cjs -notifyManager.cjs.map -notifyManager.d.cts -notifyManager.d.ts -notifyManager.js -notifyManager.js.map -onlineManager.cjs -onlineManager.cjs.map -onlineManager.d.cts -onlineManager.d.ts -onlineManager.js -onlineManager.js.map -queriesObserver.cjs -queriesObserver.cjs.map -queriesObserver.d.cts -queriesObserver.d.ts -queriesObserver.js -queriesObserver.js.map -query.cjs -query.cjs.map -query.d.cts -query.d.ts -query.js -query.js.map -queryCache.cjs -queryCache.cjs.map -queryCache.d.cts -queryCache.d.ts -queryCache.js -queryCache.js.map -queryClient.cjs -queryClient.cjs.map -queryClient.d.cts -queryClient.d.ts -queryClient.js -queryClient.js.map -queryObserver.cjs -queryObserver.cjs.map -queryObserver.d.cts -queryObserver.d.ts -queryObserver.js -queryObserver.js.map -removable.cjs -removable.cjs.map -removable.d.cts -removable.d.ts -removable.js -removable.js.map -retryer.cjs -retryer.cjs.map -retryer.d.cts -retryer.d.ts -retryer.js -retryer.js.map -streamedQuery.cjs -streamedQuery.cjs.map -streamedQuery.d.cts -streamedQuery.d.ts -streamedQuery.js -streamedQuery.js.map -subscribable.cjs -subscribable.cjs.map -subscribable.d.cts -subscribable.d.ts -subscribable.js -subscribable.js.map -thenable.cjs -thenable.cjs.map -thenable.d.cts -thenable.d.ts -thenable.js -thenable.js.map -timeoutManager.cjs -timeoutManager.cjs.map -timeoutManager.d.cts -timeoutManager.d.ts -timeoutManager.js -timeoutManager.js.map -types.cjs -types.cjs.map -types.d.cts -types.d.ts -types.js -types.js.map -utils.cjs -utils.cjs.map -utils.d.cts -utils.d.ts -utils.js -utils.js.map - -focusManager.cjs -focusManager.cjs.map -focusManager.d.cts -focusManager.d.ts -focusManager.js -focusManager.js.map -hydration-CeGZtiZv.d.ts -hydration-DWB9yu-g.d.cts -hydration.cjs -hydration.cjs.map -hydration.d.cts -hydration.d.ts -hydration.js -hydration.js.map -index.cjs -index.cjs.map -index.d.cts -index.d.ts -index.js -index.js.map -infiniteQueryBehavior.cjs -infiniteQueryBehavior.cjs.map -infiniteQueryBehavior.d.cts -infiniteQueryBehavior.d.ts -infiniteQueryBehavior.js -infiniteQueryBehavior.js.map -infiniteQueryObserver.cjs -infiniteQueryObserver.cjs.map -infiniteQueryObserver.d.cts -infiniteQueryObserver.d.ts -infiniteQueryObserver.js -infiniteQueryObserver.js.map -mutation.cjs -mutation.cjs.map -mutation.d.cts -mutation.d.ts -mutation.js -mutation.js.map -mutationCache.cjs -mutationCache.cjs.map -mutationCache.d.cts -mutationCache.d.ts -mutationCache.js -mutationCache.js.map -mutationObserver.cjs -mutationObserver.cjs.map -mutationObserver.d.cts -mutationObserver.d.ts -mutationObserver.js -mutationObserver.js.map -notifyManager.cjs -notifyManager.cjs.map -notifyManager.d.cts -notifyManager.d.ts -notifyManager.js -notifyManager.js.map -onlineManager.cjs -onlineManager.cjs.map -onlineManager.d.cts -onlineManager.d.ts -onlineManager.js -onlineManager.js.map -queriesObserver.cjs -queriesObserver.cjs.map -queriesObserver.d.cts -queriesObserver.d.ts -queriesObserver.js -queriesObserver.js.map -query.cjs -query.cjs.map -query.d.cts -query.d.ts -query.js -query.js.map -queryCache.cjs -queryCache.cjs.map -queryCache.d.cts -queryCache.d.ts -queryCache.js -queryCache.js.map -queryClient.cjs -queryClient.cjs.map -queryClient.d.cts -queryClient.d.ts -queryClient.js -queryClient.js.map -queryObserver.cjs -queryObserver.cjs.map -queryObserver.d.cts -queryObserver.d.ts -queryObserver.js -queryObserver.js.map -removable.cjs -removable.cjs.map -removable.d.cts -removable.d.ts -removable.js -removable.js.map -retryer.cjs -retryer.cjs.map -retryer.d.cts -retryer.d.ts -retryer.js -retryer.js.map -streamedQuery.cjs -streamedQuery.cjs.map -streamedQuery.d.cts -streamedQuery.d.ts -streamedQuery.js -streamedQuery.js.map -subscribable.cjs -subscribable.cjs.map -subscribable.d.cts -subscribable.d.ts -subscribable.js -subscribable.js.map -thenable.cjs -thenable.cjs.map -thenable.d.cts -thenable.d.ts -thenable.js -thenable.js.map -timeoutManager.cjs -timeoutManager.cjs.map -timeoutManager.d.cts -timeoutManager.d.ts -timeoutManager.js -timeoutManager.js.map -types.cjs -types.cjs.map -types.d.cts -types.d.ts -types.js -types.js.map -utils.cjs -utils.cjs.map -utils.d.cts -utils.d.ts -utils.js -utils.js.map - -focusManager.ts -hydration.ts -index.ts -infiniteQueryBehavior.ts -infiniteQueryObserver.ts -mutation.ts -mutationCache.ts -mutationObserver.ts -notifyManager.ts -onlineManager.ts -queriesObserver.ts -query.ts -queryCache.ts -queryClient.ts -queryObserver.ts -removable.ts -retryer.ts -streamedQuery.ts -subscribable.ts -thenable.ts -timeoutManager.ts -types.ts -utils.ts - -LICENSE -README.md -build -package.json -src - -codemods -legacy -modern -query-codemods - -src - -utils -v4 -v5 - -index.cjs -transformers - -query-cache-transformer.cjs -query-client-transformer.cjs -use-query-like-transformer.cjs - -key-transformation.cjs -replace-import-specifier.cjs -utils - -replacers - -key-replacer.cjs - -is-loading -keep-previous-data -remove-overloads -rename-hydrate -rename-properties - -is-loading.cjs - -README.md -keep-previous-data.cjs -utils - -already-has-placeholder-data-property.cjs - -remove-overloads.cjs -transformers -utils - -filter-aware-usage-transformer.cjs -query-fn-aware-usage-transformer.cjs - -index.cjs -unknown-usage-error.cjs - -rename-hydrate.cjs - -rename-properties.cjs - -HydrationBoundary.cjs -HydrationBoundary.cjs.map -HydrationBoundary.d.cts -HydrationBoundary.d.ts -HydrationBoundary.js -HydrationBoundary.js.map -IsRestoringProvider.cjs -IsRestoringProvider.cjs.map -IsRestoringProvider.d.cts -IsRestoringProvider.d.ts -IsRestoringProvider.js -IsRestoringProvider.js.map -QueryClientProvider.cjs -QueryClientProvider.cjs.map -QueryClientProvider.d.cts -QueryClientProvider.d.ts -QueryClientProvider.js -QueryClientProvider.js.map -QueryErrorResetBoundary.cjs -QueryErrorResetBoundary.cjs.map -QueryErrorResetBoundary.d.cts -QueryErrorResetBoundary.d.ts -QueryErrorResetBoundary.js -QueryErrorResetBoundary.js.map -errorBoundaryUtils.cjs -errorBoundaryUtils.cjs.map -errorBoundaryUtils.d.cts -errorBoundaryUtils.d.ts -errorBoundaryUtils.js -errorBoundaryUtils.js.map -index.cjs -index.cjs.map -index.d.cts -index.d.ts -index.js -index.js.map -infiniteQueryOptions.cjs -infiniteQueryOptions.cjs.map -infiniteQueryOptions.d.cts -infiniteQueryOptions.d.ts -infiniteQueryOptions.js -infiniteQueryOptions.js.map -mutationOptions.cjs -mutationOptions.cjs.map -mutationOptions.d.cts -mutationOptions.d.ts -mutationOptions.js -mutationOptions.js.map -queryOptions.cjs -queryOptions.cjs.map -queryOptions.d.cts -queryOptions.d.ts -queryOptions.js -queryOptions.js.map -suspense.cjs -suspense.cjs.map -suspense.d.cts -suspense.d.ts -suspense.js -suspense.js.map -types.cjs -types.cjs.map -types.d.cts -types.d.ts -types.js -types.js.map -useBaseQuery.cjs -useBaseQuery.cjs.map -useBaseQuery.d.cts -useBaseQuery.d.ts -useBaseQuery.js -useBaseQuery.js.map -useInfiniteQuery.cjs -useInfiniteQuery.cjs.map -useInfiniteQuery.d.cts -useInfiniteQuery.d.ts -useInfiniteQuery.js -useInfiniteQuery.js.map -useIsFetching.cjs -useIsFetching.cjs.map -useIsFetching.d.cts -useIsFetching.d.ts -useIsFetching.js -useIsFetching.js.map -useMutation.cjs -useMutation.cjs.map -useMutation.d.cts -useMutation.d.ts -useMutation.js -useMutation.js.map -useMutationState.cjs -useMutationState.cjs.map -useMutationState.d.cts -useMutationState.d.ts -useMutationState.js -useMutationState.js.map -usePrefetchInfiniteQuery.cjs -usePrefetchInfiniteQuery.cjs.map -usePrefetchInfiniteQuery.d.cts -usePrefetchInfiniteQuery.d.ts -usePrefetchInfiniteQuery.js -usePrefetchInfiniteQuery.js.map -usePrefetchQuery.cjs -usePrefetchQuery.cjs.map -usePrefetchQuery.d.cts -usePrefetchQuery.d.ts -usePrefetchQuery.js -usePrefetchQuery.js.map -useQueries.cjs -useQueries.cjs.map -useQueries.d.cts -useQueries.d.ts -useQueries.js -useQueries.js.map -useQuery.cjs -useQuery.cjs.map -useQuery.d.cts -useQuery.d.ts -useQuery.js -useQuery.js.map -useSuspenseInfiniteQuery.cjs -useSuspenseInfiniteQuery.cjs.map -useSuspenseInfiniteQuery.d.cts -useSuspenseInfiniteQuery.d.ts -useSuspenseInfiniteQuery.js -useSuspenseInfiniteQuery.js.map -useSuspenseQueries.cjs -useSuspenseQueries.cjs.map -useSuspenseQueries.d.cts -useSuspenseQueries.d.ts -useSuspenseQueries.js -useSuspenseQueries.js.map -useSuspenseQuery.cjs -useSuspenseQuery.cjs.map -useSuspenseQuery.d.cts -useSuspenseQuery.d.ts -useSuspenseQuery.js -useSuspenseQuery.js.map - -HydrationBoundary.cjs -HydrationBoundary.cjs.map -HydrationBoundary.d.cts -HydrationBoundary.d.ts -HydrationBoundary.js -HydrationBoundary.js.map -IsRestoringProvider.cjs -IsRestoringProvider.cjs.map -IsRestoringProvider.d.cts -IsRestoringProvider.d.ts -IsRestoringProvider.js -IsRestoringProvider.js.map -QueryClientProvider.cjs -QueryClientProvider.cjs.map -QueryClientProvider.d.cts -QueryClientProvider.d.ts -QueryClientProvider.js -QueryClientProvider.js.map -QueryErrorResetBoundary.cjs -QueryErrorResetBoundary.cjs.map -QueryErrorResetBoundary.d.cts -QueryErrorResetBoundary.d.ts -QueryErrorResetBoundary.js -QueryErrorResetBoundary.js.map -errorBoundaryUtils.cjs -errorBoundaryUtils.cjs.map -errorBoundaryUtils.d.cts -errorBoundaryUtils.d.ts -errorBoundaryUtils.js -errorBoundaryUtils.js.map -index.cjs -index.cjs.map -index.d.cts -index.d.ts -index.js -index.js.map -infiniteQueryOptions.cjs -infiniteQueryOptions.cjs.map -infiniteQueryOptions.d.cts -infiniteQueryOptions.d.ts -infiniteQueryOptions.js -infiniteQueryOptions.js.map -mutationOptions.cjs -mutationOptions.cjs.map -mutationOptions.d.cts -mutationOptions.d.ts -mutationOptions.js -mutationOptions.js.map -queryOptions.cjs -queryOptions.cjs.map -queryOptions.d.cts -queryOptions.d.ts -queryOptions.js -queryOptions.js.map -suspense.cjs -suspense.cjs.map -suspense.d.cts -suspense.d.ts -suspense.js -suspense.js.map -types.cjs -types.cjs.map -types.d.cts -types.d.ts -types.js -types.js.map -useBaseQuery.cjs -useBaseQuery.cjs.map -useBaseQuery.d.cts -useBaseQuery.d.ts -useBaseQuery.js -useBaseQuery.js.map -useInfiniteQuery.cjs -useInfiniteQuery.cjs.map -useInfiniteQuery.d.cts -useInfiniteQuery.d.ts -useInfiniteQuery.js -useInfiniteQuery.js.map -useIsFetching.cjs -useIsFetching.cjs.map -useIsFetching.d.cts -useIsFetching.d.ts -useIsFetching.js -useIsFetching.js.map -useMutation.cjs -useMutation.cjs.map -useMutation.d.cts -useMutation.d.ts -useMutation.js -useMutation.js.map -useMutationState.cjs -useMutationState.cjs.map -useMutationState.d.cts -useMutationState.d.ts -useMutationState.js -useMutationState.js.map -usePrefetchInfiniteQuery.cjs -usePrefetchInfiniteQuery.cjs.map -usePrefetchInfiniteQuery.d.cts -usePrefetchInfiniteQuery.d.ts -usePrefetchInfiniteQuery.js -usePrefetchInfiniteQuery.js.map -usePrefetchQuery.cjs -usePrefetchQuery.cjs.map -usePrefetchQuery.d.cts -usePrefetchQuery.d.ts -usePrefetchQuery.js -usePrefetchQuery.js.map -useQueries.cjs -useQueries.cjs.map -useQueries.d.cts -useQueries.d.ts -useQueries.js -useQueries.js.map -useQuery.cjs -useQuery.cjs.map -useQuery.d.cts -useQuery.d.ts -useQuery.js -useQuery.js.map -useSuspenseInfiniteQuery.cjs -useSuspenseInfiniteQuery.cjs.map -useSuspenseInfiniteQuery.d.cts -useSuspenseInfiniteQuery.d.ts -useSuspenseInfiniteQuery.js -useSuspenseInfiniteQuery.js.map -useSuspenseQueries.cjs -useSuspenseQueries.cjs.map -useSuspenseQueries.d.cts -useSuspenseQueries.d.ts -useSuspenseQueries.js -useSuspenseQueries.js.map -useSuspenseQuery.cjs -useSuspenseQuery.cjs.map -useSuspenseQuery.d.cts -useSuspenseQuery.d.ts -useSuspenseQuery.js -useSuspenseQuery.js.map - -eslint.config.js -package.json -root.eslint.config.js -tsconfig.json -vite.config.ts - -HydrationBoundary.tsx -IsRestoringProvider.ts -QueryClientProvider.tsx -QueryErrorResetBoundary.tsx -errorBoundaryUtils.ts -index.ts -infiniteQueryOptions.ts -mutationOptions.ts -queryOptions.ts -suspense.ts -types.ts -useBaseQuery.ts -useInfiniteQuery.ts -useIsFetching.ts -useMutation.ts -useMutationState.ts -usePrefetchInfiniteQuery.tsx -usePrefetchQuery.tsx -useQueries.ts -useQuery.ts -useSuspenseInfiniteQuery.ts -useSuspenseQueries.ts -useSuspenseQuery.ts - -bn.js -d3-array -d3-color -d3-ease -d3-interpolate -d3-path -d3-scale -d3-shape -d3-time -d3-timer -estree -json-schema -node -phoenix -prop-types -qrcode -react -react-dom -uuid -ws - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -flow.d.ts -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -assert -assert.d.ts -async_hooks.d.ts -buffer.buffer.d.ts -buffer.d.ts -child_process.d.ts -cluster.d.ts -compatibility -console.d.ts -constants.d.ts -crypto.d.ts -dgram.d.ts -diagnostics_channel.d.ts -dns -dns.d.ts -domain.d.ts -events.d.ts -fs -fs.d.ts -globals.d.ts -globals.typedarray.d.ts -http.d.ts -http2.d.ts -https.d.ts -index.d.ts -inspector.generated.d.ts -module.d.ts -net.d.ts -os.d.ts -package.json -path.d.ts -perf_hooks.d.ts -process.d.ts -punycode.d.ts -querystring.d.ts -readline -readline.d.ts -repl.d.ts -sea.d.ts -sqlite.d.ts -stream -stream.d.ts -string_decoder.d.ts -test.d.ts -timers -timers.d.ts -tls.d.ts -trace_events.d.ts -ts5.6 -tty.d.ts -url.d.ts -util.d.ts -v8.d.ts -vm.d.ts -wasi.d.ts -web-globals -worker_threads.d.ts -zlib.d.ts - -strict.d.ts - -disposable.d.ts -index.d.ts -indexable.d.ts -iterators.d.ts - -promises.d.ts - -promises.d.ts - -promises.d.ts - -consumers.d.ts -promises.d.ts -web.d.ts - -promises.d.ts - -buffer.buffer.d.ts -globals.typedarray.d.ts -index.d.ts - -abortcontroller.d.ts -domexception.d.ts -events.d.ts -fetch.d.ts -navigator.d.ts -storage.d.ts - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -index.d.ts -package.json - -LICENSE -README.md -build -helper -index.d.ts -package.json - -qrcode.d.ts -qrcode.tosjis.d.ts - -to-sjis.d.ts - -LICENSE -README.md -canary.d.ts -experimental.d.ts -global.d.ts -index.d.ts -jsx-dev-runtime.d.ts -jsx-runtime.d.ts -package.json -ts5.0 - -canary.d.ts -experimental.d.ts -global.d.ts -index.d.ts -jsx-dev-runtime.d.ts -jsx-runtime.d.ts - -LICENSE -README.md -canary.d.ts -client.d.ts -experimental.d.ts -index.d.ts -package.json -server.d.ts -test-utils - -index.d.ts - -LICENSE -README.md -index.d.mts -index.d.ts -package.json - -LICENSE -README.md -index.d.mts -index.d.ts -package.json - -eslint-plugin -parser -project-service -scope-manager -tsconfig-utils -type-utils -types -typescript-estree -utils -visitor-keys - -LICENSE -README.md -dist -index.d.ts -package.json -raw-plugin.d.ts -rules.d.ts - -configs -index.d.ts -index.js -raw-plugin.d.ts -raw-plugin.js -rules -util - -eslint-recommended-raw.d.ts -eslint-recommended-raw.js -eslintrc -flat - -all.d.ts -all.js -base.d.ts -base.js -disable-type-checked.d.ts -disable-type-checked.js -eslint-recommended.d.ts -eslint-recommended.js -recommended-type-checked-only.d.ts -recommended-type-checked-only.js -recommended-type-checked.d.ts -recommended-type-checked.js -recommended.d.ts -recommended.js -strict-type-checked-only.d.ts -strict-type-checked-only.js -strict-type-checked.d.ts -strict-type-checked.js -strict.d.ts -strict.js -stylistic-type-checked-only.d.ts -stylistic-type-checked-only.js -stylistic-type-checked.d.ts -stylistic-type-checked.js -stylistic.d.ts -stylistic.js - -all.d.ts -all.js -base.d.ts -base.js -disable-type-checked.d.ts -disable-type-checked.js -eslint-recommended.d.ts -eslint-recommended.js -recommended-type-checked-only.d.ts -recommended-type-checked-only.js -recommended-type-checked.d.ts -recommended-type-checked.js -recommended.d.ts -recommended.js -strict-type-checked-only.d.ts -strict-type-checked-only.js -strict-type-checked.d.ts -strict-type-checked.js -strict.d.ts -strict.js -stylistic-type-checked-only.d.ts -stylistic-type-checked-only.js -stylistic-type-checked.d.ts -stylistic-type-checked.js -stylistic.d.ts -stylistic.js - -adjacent-overload-signatures.d.ts -adjacent-overload-signatures.js -array-type.d.ts -array-type.js -await-thenable.d.ts -await-thenable.js -ban-ts-comment.d.ts -ban-ts-comment.js -ban-tslint-comment.d.ts -ban-tslint-comment.js -class-literal-property-style.d.ts -class-literal-property-style.js -class-methods-use-this.d.ts -class-methods-use-this.js -consistent-generic-constructors.d.ts -consistent-generic-constructors.js -consistent-indexed-object-style.d.ts -consistent-indexed-object-style.js -consistent-return.d.ts -consistent-return.js -consistent-type-assertions.d.ts -consistent-type-assertions.js -consistent-type-definitions.d.ts -consistent-type-definitions.js -consistent-type-exports.d.ts -consistent-type-exports.js -consistent-type-imports.d.ts -consistent-type-imports.js -default-param-last.d.ts -default-param-last.js -dot-notation.d.ts -dot-notation.js -enum-utils -explicit-function-return-type.d.ts -explicit-function-return-type.js -explicit-member-accessibility.d.ts -explicit-member-accessibility.js -explicit-module-boundary-types.d.ts -explicit-module-boundary-types.js -index.d.ts -index.js -init-declarations.d.ts -init-declarations.js -max-params.d.ts -max-params.js -member-ordering.d.ts -member-ordering.js -method-signature-style.d.ts -method-signature-style.js -naming-convention-utils -naming-convention.d.ts -naming-convention.js -no-array-constructor.d.ts -no-array-constructor.js -no-array-delete.d.ts -no-array-delete.js -no-base-to-string.d.ts -no-base-to-string.js -no-confusing-non-null-assertion.d.ts -no-confusing-non-null-assertion.js -no-confusing-void-expression.d.ts -no-confusing-void-expression.js -no-deprecated.d.ts -no-deprecated.js -no-dupe-class-members.d.ts -no-dupe-class-members.js -no-duplicate-enum-values.d.ts -no-duplicate-enum-values.js -no-duplicate-type-constituents.d.ts -no-duplicate-type-constituents.js -no-dynamic-delete.d.ts -no-dynamic-delete.js -no-empty-function.d.ts -no-empty-function.js -no-empty-interface.d.ts -no-empty-interface.js -no-empty-object-type.d.ts -no-empty-object-type.js -no-explicit-any.d.ts -no-explicit-any.js -no-extra-non-null-assertion.d.ts -no-extra-non-null-assertion.js -no-extraneous-class.d.ts -no-extraneous-class.js -no-floating-promises.d.ts -no-floating-promises.js -no-for-in-array.d.ts -no-for-in-array.js -no-implied-eval.d.ts -no-implied-eval.js -no-import-type-side-effects.d.ts -no-import-type-side-effects.js -no-inferrable-types.d.ts -no-inferrable-types.js -no-invalid-this.d.ts -no-invalid-this.js -no-invalid-void-type.d.ts -no-invalid-void-type.js -no-loop-func.d.ts -no-loop-func.js -no-loss-of-precision.d.ts -no-loss-of-precision.js -no-magic-numbers.d.ts -no-magic-numbers.js -no-meaningless-void-operator.d.ts -no-meaningless-void-operator.js -no-misused-new.d.ts -no-misused-new.js -no-misused-promises.d.ts -no-misused-promises.js -no-misused-spread.d.ts -no-misused-spread.js -no-mixed-enums.d.ts -no-mixed-enums.js -no-namespace.d.ts -no-namespace.js -no-non-null-asserted-nullish-coalescing.d.ts -no-non-null-asserted-nullish-coalescing.js -no-non-null-asserted-optional-chain.d.ts -no-non-null-asserted-optional-chain.js -no-non-null-assertion.d.ts -no-non-null-assertion.js -no-redeclare.d.ts -no-redeclare.js -no-redundant-type-constituents.d.ts -no-redundant-type-constituents.js -no-require-imports.d.ts -no-require-imports.js -no-restricted-imports.d.ts -no-restricted-imports.js -no-restricted-types.d.ts -no-restricted-types.js -no-shadow.d.ts -no-shadow.js -no-this-alias.d.ts -no-this-alias.js -no-type-alias.d.ts -no-type-alias.js -no-unnecessary-boolean-literal-compare.d.ts -no-unnecessary-boolean-literal-compare.js -no-unnecessary-condition.d.ts -no-unnecessary-condition.js -no-unnecessary-parameter-property-assignment.d.ts -no-unnecessary-parameter-property-assignment.js -no-unnecessary-qualifier.d.ts -no-unnecessary-qualifier.js -no-unnecessary-template-expression.d.ts -no-unnecessary-template-expression.js -no-unnecessary-type-arguments.d.ts -no-unnecessary-type-arguments.js -no-unnecessary-type-assertion.d.ts -no-unnecessary-type-assertion.js -no-unnecessary-type-constraint.d.ts -no-unnecessary-type-constraint.js -no-unnecessary-type-conversion.d.ts -no-unnecessary-type-conversion.js -no-unnecessary-type-parameters.d.ts -no-unnecessary-type-parameters.js -no-unsafe-argument.d.ts -no-unsafe-argument.js -no-unsafe-assignment.d.ts -no-unsafe-assignment.js -no-unsafe-call.d.ts -no-unsafe-call.js -no-unsafe-declaration-merging.d.ts -no-unsafe-declaration-merging.js -no-unsafe-enum-comparison.d.ts -no-unsafe-enum-comparison.js -no-unsafe-function-type.d.ts -no-unsafe-function-type.js -no-unsafe-member-access.d.ts -no-unsafe-member-access.js -no-unsafe-return.d.ts -no-unsafe-return.js -no-unsafe-type-assertion.d.ts -no-unsafe-type-assertion.js -no-unsafe-unary-minus.d.ts -no-unsafe-unary-minus.js -no-unused-expressions.d.ts -no-unused-expressions.js -no-unused-vars.d.ts -no-unused-vars.js -no-use-before-define.d.ts -no-use-before-define.js -no-useless-constructor.d.ts -no-useless-constructor.js -no-useless-empty-export.d.ts -no-useless-empty-export.js -no-var-requires.d.ts -no-var-requires.js -no-wrapper-object-types.d.ts -no-wrapper-object-types.js -non-nullable-type-assertion-style.d.ts -non-nullable-type-assertion-style.js -only-throw-error.d.ts -only-throw-error.js -parameter-properties.d.ts -parameter-properties.js -prefer-as-const.d.ts -prefer-as-const.js -prefer-destructuring.d.ts -prefer-destructuring.js -prefer-enum-initializers.d.ts -prefer-enum-initializers.js -prefer-find.d.ts -prefer-find.js -prefer-for-of.d.ts -prefer-for-of.js -prefer-function-type.d.ts -prefer-function-type.js -prefer-includes.d.ts -prefer-includes.js -prefer-literal-enum-member.d.ts -prefer-literal-enum-member.js -prefer-namespace-keyword.d.ts -prefer-namespace-keyword.js -prefer-nullish-coalescing.d.ts -prefer-nullish-coalescing.js -prefer-optional-chain-utils -prefer-optional-chain.d.ts -prefer-optional-chain.js -prefer-promise-reject-errors.d.ts -prefer-promise-reject-errors.js -prefer-readonly-parameter-types.d.ts -prefer-readonly-parameter-types.js -prefer-readonly.d.ts -prefer-readonly.js -prefer-reduce-type-parameter.d.ts -prefer-reduce-type-parameter.js -prefer-regexp-exec.d.ts -prefer-regexp-exec.js -prefer-return-this-type.d.ts -prefer-return-this-type.js -prefer-string-starts-ends-with.d.ts -prefer-string-starts-ends-with.js -prefer-ts-expect-error.d.ts -prefer-ts-expect-error.js -promise-function-async.d.ts -promise-function-async.js -related-getter-setter-pairs.d.ts -related-getter-setter-pairs.js -require-array-sort-compare.d.ts -require-array-sort-compare.js -require-await.d.ts -require-await.js -restrict-plus-operands.d.ts -restrict-plus-operands.js -restrict-template-expressions.d.ts -restrict-template-expressions.js -return-await.d.ts -return-await.js -sort-type-constituents.d.ts -sort-type-constituents.js -strict-boolean-expressions.d.ts -strict-boolean-expressions.js -switch-exhaustiveness-check.d.ts -switch-exhaustiveness-check.js -triple-slash-reference.d.ts -triple-slash-reference.js -typedef.d.ts -typedef.js -unbound-method.d.ts -unbound-method.js -unified-signatures.d.ts -unified-signatures.js -use-unknown-in-catch-callback-variable.d.ts -use-unknown-in-catch-callback-variable.js - -shared.d.ts -shared.js - -enums.d.ts -enums.js -format.d.ts -format.js -index.d.ts -index.js -parse-options.d.ts -parse-options.js -schema.d.ts -schema.js -shared.d.ts -shared.js -types.d.ts -types.js -validator.d.ts -validator.js - -PreferOptionalChainOptions.d.ts -PreferOptionalChainOptions.js -analyzeChain.d.ts -analyzeChain.js -checkNullishAndReport.d.ts -checkNullishAndReport.js -compareNodes.d.ts -compareNodes.js -gatherLogicalOperands.d.ts -gatherLogicalOperands.js - -assertionFunctionUtils.d.ts -assertionFunctionUtils.js -astUtils.d.ts -astUtils.js -collectUnusedVariables.d.ts -collectUnusedVariables.js -createRule.d.ts -createRule.js -escapeRegExp.d.ts -escapeRegExp.js -explicitReturnTypeUtils.d.ts -explicitReturnTypeUtils.js -getConstraintInfo.d.ts -getConstraintInfo.js -getESLintCoreRule.d.ts -getESLintCoreRule.js -getFixOrSuggest.d.ts -getFixOrSuggest.js -getForStatementHeadLoc.d.ts -getForStatementHeadLoc.js -getFunctionHeadLoc.d.ts -getFunctionHeadLoc.js -getMemberHeadLoc.d.ts -getMemberHeadLoc.js -getOperatorPrecedence.d.ts -getOperatorPrecedence.js -getParentFunctionNode.d.ts -getParentFunctionNode.js -getStaticStringValue.d.ts -getStaticStringValue.js -getStringLength.d.ts -getStringLength.js -getTextWithParentheses.d.ts -getTextWithParentheses.js -getThisExpression.d.ts -getThisExpression.js -getValueOfLiteralType.d.ts -getValueOfLiteralType.js -getWrappedCode.d.ts -getWrappedCode.js -getWrappingFixer.d.ts -getWrappingFixer.js -hasOverloadSignatures.d.ts -hasOverloadSignatures.js -index.d.ts -index.js -isArrayMethodCallWithPredicate.d.ts -isArrayMethodCallWithPredicate.js -isAssignee.d.ts -isAssignee.js -isHigherPrecedenceThanAwait.d.ts -isHigherPrecedenceThanAwait.js -isNodeEqual.d.ts -isNodeEqual.js -isNullLiteral.d.ts -isNullLiteral.js -isPromiseAggregatorMethod.d.ts -isPromiseAggregatorMethod.js -isStartOfExpressionStatement.d.ts -isStartOfExpressionStatement.js -isTypeImport.d.ts -isTypeImport.js -isUndefinedIdentifier.d.ts -isUndefinedIdentifier.js -misc.d.ts -misc.js -needsPrecedingSemiColon.d.ts -needsPrecedingSemiColon.js -needsToBeAwaited.d.ts -needsToBeAwaited.js -objectIterators.d.ts -objectIterators.js -promiseUtils.d.ts -promiseUtils.js -rangeToLoc.d.ts -rangeToLoc.js -referenceContainsTypeQuery.d.ts -referenceContainsTypeQuery.js -scopeUtils.d.ts -scopeUtils.js -skipChainExpression.d.ts -skipChainExpression.js -truthinessUtils.d.ts -truthinessUtils.js -types.d.ts -types.js - -ignore - -LICENSE-MIT -README.md -index.d.ts -index.js -legacy.js -package.json - -LICENSE -README.md -dist -package.json - -index.d.ts -index.js -parser.d.ts -parser.js - -LICENSE -README.md -dist -package.json - -createProjectService.d.ts -createProjectService.js -getParsedConfigFileFromTSServer.d.ts -getParsedConfigFileFromTSServer.js -index.d.ts -index.js - -LICENSE -README.md -dist -package.json - -ID.d.ts -ID.js -ScopeManager.d.ts -ScopeManager.js -analyze.d.ts -analyze.js -assert.d.ts -assert.js -definition -index.d.ts -index.js -lib -referencer -scope -variable - -CatchClauseDefinition.d.ts -CatchClauseDefinition.js -ClassNameDefinition.d.ts -ClassNameDefinition.js -Definition.d.ts -Definition.js -DefinitionBase.d.ts -DefinitionBase.js -DefinitionType.d.ts -DefinitionType.js -FunctionNameDefinition.d.ts -FunctionNameDefinition.js -ImplicitGlobalVariableDefinition.d.ts -ImplicitGlobalVariableDefinition.js -ImportBindingDefinition.d.ts -ImportBindingDefinition.js -ParameterDefinition.d.ts -ParameterDefinition.js -TSEnumMemberDefinition.d.ts -TSEnumMemberDefinition.js -TSEnumNameDefinition.d.ts -TSEnumNameDefinition.js -TSModuleNameDefinition.d.ts -TSModuleNameDefinition.js -TypeDefinition.d.ts -TypeDefinition.js -VariableDefinition.d.ts -VariableDefinition.js -index.d.ts -index.js - -base-config.d.ts -base-config.js -decorators.d.ts -decorators.js -decorators.legacy.d.ts -decorators.legacy.js -dom.asynciterable.d.ts -dom.asynciterable.js -dom.d.ts -dom.iterable.d.ts -dom.iterable.js -dom.js -es2015.collection.d.ts -es2015.collection.js -es2015.core.d.ts -es2015.core.js -es2015.d.ts -es2015.generator.d.ts -es2015.generator.js -es2015.iterable.d.ts -es2015.iterable.js -es2015.js -es2015.promise.d.ts -es2015.promise.js -es2015.proxy.d.ts -es2015.proxy.js -es2015.reflect.d.ts -es2015.reflect.js -es2015.symbol.d.ts -es2015.symbol.js -es2015.symbol.wellknown.d.ts -es2015.symbol.wellknown.js -es2016.array.include.d.ts -es2016.array.include.js -es2016.d.ts -es2016.full.d.ts -es2016.full.js -es2016.intl.d.ts -es2016.intl.js -es2016.js -es2017.arraybuffer.d.ts -es2017.arraybuffer.js -es2017.d.ts -es2017.date.d.ts -es2017.date.js -es2017.full.d.ts -es2017.full.js -es2017.intl.d.ts -es2017.intl.js -es2017.js -es2017.object.d.ts -es2017.object.js -es2017.sharedmemory.d.ts -es2017.sharedmemory.js -es2017.string.d.ts -es2017.string.js -es2017.typedarrays.d.ts -es2017.typedarrays.js -es2018.asyncgenerator.d.ts -es2018.asyncgenerator.js -es2018.asynciterable.d.ts -es2018.asynciterable.js -es2018.d.ts -es2018.full.d.ts -es2018.full.js -es2018.intl.d.ts -es2018.intl.js -es2018.js -es2018.promise.d.ts -es2018.promise.js -es2018.regexp.d.ts -es2018.regexp.js -es2019.array.d.ts -es2019.array.js -es2019.d.ts -es2019.full.d.ts -es2019.full.js -es2019.intl.d.ts -es2019.intl.js -es2019.js -es2019.object.d.ts -es2019.object.js -es2019.string.d.ts -es2019.string.js -es2019.symbol.d.ts -es2019.symbol.js -es2020.bigint.d.ts -es2020.bigint.js -es2020.d.ts -es2020.date.d.ts -es2020.date.js -es2020.full.d.ts -es2020.full.js -es2020.intl.d.ts -es2020.intl.js -es2020.js -es2020.number.d.ts -es2020.number.js -es2020.promise.d.ts -es2020.promise.js -es2020.sharedmemory.d.ts -es2020.sharedmemory.js -es2020.string.d.ts -es2020.string.js -es2020.symbol.wellknown.d.ts -es2020.symbol.wellknown.js -es2021.d.ts -es2021.full.d.ts -es2021.full.js -es2021.intl.d.ts -es2021.intl.js -es2021.js -es2021.promise.d.ts -es2021.promise.js -es2021.string.d.ts -es2021.string.js -es2021.weakref.d.ts -es2021.weakref.js -es2022.array.d.ts -es2022.array.js -es2022.d.ts -es2022.error.d.ts -es2022.error.js -es2022.full.d.ts -es2022.full.js -es2022.intl.d.ts -es2022.intl.js -es2022.js -es2022.object.d.ts -es2022.object.js -es2022.regexp.d.ts -es2022.regexp.js -es2022.string.d.ts -es2022.string.js -es2023.array.d.ts -es2023.array.js -es2023.collection.d.ts -es2023.collection.js -es2023.d.ts -es2023.full.d.ts -es2023.full.js -es2023.intl.d.ts -es2023.intl.js -es2023.js -es2024.arraybuffer.d.ts -es2024.arraybuffer.js -es2024.collection.d.ts -es2024.collection.js -es2024.d.ts -es2024.full.d.ts -es2024.full.js -es2024.js -es2024.object.d.ts -es2024.object.js -es2024.promise.d.ts -es2024.promise.js -es2024.regexp.d.ts -es2024.regexp.js -es2024.sharedmemory.d.ts -es2024.sharedmemory.js -es2024.string.d.ts -es2024.string.js -es5.d.ts -es5.js -es6.d.ts -es6.js -es7.d.ts -es7.js -esnext.array.d.ts -esnext.array.js -esnext.asynciterable.d.ts -esnext.asynciterable.js -esnext.bigint.d.ts -esnext.bigint.js -esnext.collection.d.ts -esnext.collection.js -esnext.d.ts -esnext.decorators.d.ts -esnext.decorators.js -esnext.disposable.d.ts -esnext.disposable.js -esnext.error.d.ts -esnext.error.js -esnext.float16.d.ts -esnext.float16.js -esnext.full.d.ts -esnext.full.js -esnext.intl.d.ts -esnext.intl.js -esnext.iterator.d.ts -esnext.iterator.js -esnext.js -esnext.object.d.ts -esnext.object.js -esnext.promise.d.ts -esnext.promise.js -esnext.regexp.d.ts -esnext.regexp.js -esnext.sharedmemory.d.ts -esnext.sharedmemory.js -esnext.string.d.ts -esnext.string.js -esnext.symbol.d.ts -esnext.symbol.js -esnext.weakref.d.ts -esnext.weakref.js -index.d.ts -index.js -lib.d.ts -lib.js -scripthost.d.ts -scripthost.js -webworker.asynciterable.d.ts -webworker.asynciterable.js -webworker.d.ts -webworker.importscripts.d.ts -webworker.importscripts.js -webworker.iterable.d.ts -webworker.iterable.js -webworker.js - -ClassVisitor.d.ts -ClassVisitor.js -ExportVisitor.d.ts -ExportVisitor.js -ImportVisitor.d.ts -ImportVisitor.js -PatternVisitor.d.ts -PatternVisitor.js -Reference.d.ts -Reference.js -Referencer.d.ts -Referencer.js -TypeVisitor.d.ts -TypeVisitor.js -Visitor.d.ts -Visitor.js -VisitorBase.d.ts -VisitorBase.js -index.d.ts -index.js - -BlockScope.d.ts -BlockScope.js -CatchScope.d.ts -CatchScope.js -ClassFieldInitializerScope.d.ts -ClassFieldInitializerScope.js -ClassScope.d.ts -ClassScope.js -ClassStaticBlockScope.d.ts -ClassStaticBlockScope.js -ConditionalTypeScope.d.ts -ConditionalTypeScope.js -ForScope.d.ts -ForScope.js -FunctionExpressionNameScope.d.ts -FunctionExpressionNameScope.js -FunctionScope.d.ts -FunctionScope.js -FunctionTypeScope.d.ts -FunctionTypeScope.js -GlobalScope.d.ts -GlobalScope.js -MappedTypeScope.d.ts -MappedTypeScope.js -ModuleScope.d.ts -ModuleScope.js -Scope.d.ts -Scope.js -ScopeBase.d.ts -ScopeBase.js -ScopeType.d.ts -ScopeType.js -SwitchScope.d.ts -SwitchScope.js -TSEnumScope.d.ts -TSEnumScope.js -TSModuleScope.d.ts -TSModuleScope.js -TypeScope.d.ts -TypeScope.js -WithScope.d.ts -WithScope.js -index.d.ts -index.js - -ESLintScopeVariable.d.ts -ESLintScopeVariable.js -ImplicitLibVariable.d.ts -ImplicitLibVariable.js -Variable.d.ts -Variable.js -VariableBase.d.ts -VariableBase.js -index.d.ts -index.js - -LICENSE -README.md -dist -package.json - -compilerOptions.d.ts -compilerOptions.js -getParsedConfigFile.d.ts -getParsedConfigFile.js -index.d.ts -index.js - -LICENSE -README.md -dist -package.json - -TypeOrValueSpecifier.d.ts -TypeOrValueSpecifier.js -builtinSymbolLikes.d.ts -builtinSymbolLikes.js -containsAllTypesByName.d.ts -containsAllTypesByName.js -discriminateAnyType.d.ts -discriminateAnyType.js -getConstrainedTypeAtLocation.d.ts -getConstrainedTypeAtLocation.js -getContextualType.d.ts -getContextualType.js -getDeclaration.d.ts -getDeclaration.js -getSourceFileOfNode.d.ts -getSourceFileOfNode.js -getTypeName.d.ts -getTypeName.js -index.d.ts -index.js -isSymbolFromDefaultLibrary.d.ts -isSymbolFromDefaultLibrary.js -isTypeBrandedLiteralLike.d.ts -isTypeBrandedLiteralLike.js -isTypeReadonly.d.ts -isTypeReadonly.js -isUnsafeAssignment.d.ts -isUnsafeAssignment.js -predicates.d.ts -predicates.js -propertyTypes.d.ts -propertyTypes.js -requiresQuoting.d.ts -requiresQuoting.js -typeFlagUtils.d.ts -typeFlagUtils.js -typeOrValueSpecifiers - -specifierNameMatches.d.ts -specifierNameMatches.js -typeDeclaredInFile.d.ts -typeDeclaredInFile.js -typeDeclaredInLib.d.ts -typeDeclaredInLib.js -typeDeclaredInPackageDeclarationFile.d.ts -typeDeclaredInPackageDeclarationFile.js - -LICENSE -README.md -dist -package.json - -generated -index.d.ts -index.js -lib.d.ts -lib.js -parser-options.d.ts -parser-options.js -ts-estree.d.ts -ts-estree.js - -ast-spec.d.ts -ast-spec.js - -LICENSE -README.md -dist -package.json - -ast-converter.d.ts -ast-converter.js -check-modifiers.d.ts -check-modifiers.js -clear-caches.d.ts -clear-caches.js -convert-comments.d.ts -convert-comments.js -convert.d.ts -convert.js -create-program -createParserServices.d.ts -createParserServices.js -getModifiers.d.ts -getModifiers.js -index.d.ts -index.js -jsx -node-utils.d.ts -node-utils.js -parseSettings -parser-options.d.ts -parser-options.js -parser.d.ts -parser.js -semantic-or-syntactic-errors.d.ts -semantic-or-syntactic-errors.js -simple-traverse.d.ts -simple-traverse.js -source-files.d.ts -source-files.js -ts-estree -use-at-your-own-risk.d.ts -use-at-your-own-risk.js -useProgramFromProjectService.d.ts -useProgramFromProjectService.js -version-check.d.ts -version-check.js -version.d.ts -version.js -withoutProjectParserOptions.d.ts -withoutProjectParserOptions.js - -WatchCompilerHostOfConfigFile.d.ts -WatchCompilerHostOfConfigFile.js -createIsolatedProgram.d.ts -createIsolatedProgram.js -createProjectProgram.d.ts -createProjectProgram.js -createProjectProgramError.d.ts -createProjectProgramError.js -createSourceFile.d.ts -createSourceFile.js -describeFilePath.d.ts -describeFilePath.js -getScriptKind.d.ts -getScriptKind.js -getWatchProgramsForProjects.d.ts -getWatchProgramsForProjects.js -shared.d.ts -shared.js -useProvidedPrograms.d.ts -useProvidedPrograms.js -validateDefaultProjectForFilesGlob.d.ts -validateDefaultProjectForFilesGlob.js - -xhtml-entities.d.ts -xhtml-entities.js - -ExpiringCache.d.ts -ExpiringCache.js -candidateTSConfigRootDirs.d.ts -candidateTSConfigRootDirs.js -createParseSettings.d.ts -createParseSettings.js -getProjectConfigFiles.d.ts -getProjectConfigFiles.js -index.d.ts -index.js -inferSingleRun.d.ts -inferSingleRun.js -resolveProjectList.d.ts -resolveProjectList.js -warnAboutTSVersion.d.ts -warnAboutTSVersion.js - -estree-to-ts-node-types.d.ts -estree-to-ts-node-types.js -index.d.ts -index.js -ts-nodes.d.ts -ts-nodes.js - -brace-expansion -minimatch - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -dist -package.json - -commonjs -esm - -assert-valid-pattern.d.ts -assert-valid-pattern.d.ts.map -assert-valid-pattern.js -assert-valid-pattern.js.map -ast.d.ts -ast.d.ts.map -ast.js -ast.js.map -brace-expressions.d.ts -brace-expressions.d.ts.map -brace-expressions.js -brace-expressions.js.map -escape.d.ts -escape.d.ts.map -escape.js -escape.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -unescape.d.ts -unescape.d.ts.map -unescape.js -unescape.js.map - -assert-valid-pattern.d.ts -assert-valid-pattern.d.ts.map -assert-valid-pattern.js -assert-valid-pattern.js.map -ast.d.ts -ast.d.ts.map -ast.js -ast.js.map -brace-expressions.d.ts -brace-expressions.d.ts.map -brace-expressions.js -brace-expressions.js.map -escape.d.ts -escape.d.ts.map -escape.js -escape.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -unescape.d.ts -unescape.d.ts.map -unescape.js -unescape.js.map - -LICENSE -README.md -dist -package.json - -ast-utils -eslint-utils -index.d.ts -index.js -json-schema.d.ts -json-schema.js -ts-eslint -ts-estree.d.ts -ts-estree.js -ts-utils - -eslint-utils -helpers.d.ts -helpers.js -index.d.ts -index.js -misc.d.ts -misc.js -predicates.d.ts -predicates.js - -PatternMatcher.d.ts -PatternMatcher.js -ReferenceTracker.d.ts -ReferenceTracker.js -astUtilities.d.ts -astUtilities.js -index.d.ts -index.js -predicates.d.ts -predicates.js -scopeAnalysis.d.ts -scopeAnalysis.js - -InferTypesFromRule.d.ts -InferTypesFromRule.js -RuleCreator.d.ts -RuleCreator.js -applyDefault.d.ts -applyDefault.js -deepMerge.d.ts -deepMerge.js -getParserServices.d.ts -getParserServices.js -index.d.ts -index.js -nullThrows.d.ts -nullThrows.js -parserSeemsToBeTSESLint.d.ts -parserSeemsToBeTSESLint.js - -AST.d.ts -AST.js -Config.d.ts -Config.js -ESLint.d.ts -ESLint.js -Linter.d.ts -Linter.js -Parser.d.ts -Parser.js -ParserOptions.d.ts -ParserOptions.js -Processor.d.ts -Processor.js -Rule.d.ts -Rule.js -RuleTester.d.ts -RuleTester.js -Scope.d.ts -Scope.js -SourceCode.d.ts -SourceCode.js -eslint -index.d.ts -index.js - -ESLintShared.d.ts -ESLintShared.js -FlatESLint.d.ts -FlatESLint.js -LegacyESLint.d.ts -LegacyESLint.js - -NoInfer.d.ts -NoInfer.js -index.d.ts -index.js -isArray.d.ts -isArray.js - -LICENSE -README.md -dist -package.json - -get-keys.d.ts -get-keys.js -index.d.ts -index.js -visitor-keys.d.ts -visitor-keys.js - -plugin-react-swc - -LICENSE -README.md -index.cjs -index.d.cts -index.d.ts -index.js -package.json -refresh-runtime.js - -CHANGELOG.md -LICENSE -README.md -bin -dist -package.json - -acorn - -acorn.d.mts -acorn.d.ts -acorn.js -acorn.mjs -bin.js - -LICENSE -README.md -index.d.ts -index.js -package.json -xhtml.js - -LICENSE -README.md -dist -lib -package.json -scripts - -ajv.bundle.js -ajv.min.js -ajv.min.js.map - -ajv.d.ts -ajv.js -cache.js -compile -data.js -definition_schema.js -dot -dotjs -keyword.js -refs - -async.js -equal.js -error_classes.js -formats.js -index.js -resolve.js -rules.js -schema_obj.js -ucs2length.js -util.js - -_limit.jst -_limitItems.jst -_limitLength.jst -_limitProperties.jst -allOf.jst -anyOf.jst -coerce.def -comment.jst -const.jst -contains.jst -custom.jst -defaults.def -definitions.def -dependencies.jst -enum.jst -errors.def -format.jst -if.jst -items.jst -missing.def -multipleOf.jst -not.jst -oneOf.jst -pattern.jst -properties.jst -propertyNames.jst -ref.jst -required.jst -uniqueItems.jst -validate.jst - -README.md -_limit.js -_limitItems.js -_limitLength.js -_limitProperties.js -allOf.js -anyOf.js -comment.js -const.js -contains.js -custom.js -dependencies.js -enum.js -format.js -if.js -index.js -items.js -multipleOf.js -not.js -oneOf.js -pattern.js -properties.js -propertyNames.js -ref.js -required.js -uniqueItems.js -validate.js - -data.json -json-schema-draft-04.json -json-schema-draft-06.json -json-schema-draft-07.json -json-schema-secure.json - -bundle.js -compile-dots.js -info -prepare-tests -publish-built-version -travis-gh-pages - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -implementation.d.ts -implementation.js -index.d.ts -index.js -loader.js -optional.js -package.json -register -register-shim.js -register.d.ts -register.js - -bluebird.d.ts -bluebird.js -es6-promise.d.ts -es6-promise.js -lie.d.ts -lie.js -native-promise-only.d.ts -native-promise-only.js -pinkie.d.ts -pinkie.js -promise.d.ts -promise.js -q.d.ts -q.js -rsvp.d.ts -rsvp.js -vow.d.ts -vow.js -when.d.ts -when.js - -LICENSE -README.md -index.d.ts -index.js -package.json - -LICENSE.md -README.md -index.d.ts -index.js -package.json - -CHANGELOG.md -LICENSE -README.md -argparse.js -lib -package.json - -sub.js -textwrap.js - -LICENSE -README.md -dist -package.json - -es2015 -es2019 -es5 - -index.d.ts -index.js - -index.d.ts -index.js - -index.d.ts -index.js - -LICENSE -README.md -bin -data -lib -package.json - -autoprefixer - -prefixes.js - -at-rule.js -autoprefixer.d.ts -autoprefixer.js -brackets.js -browsers.js -declaration.js -hacks -info.js -old-selector.js -old-value.js -prefixer.js -prefixes.js -processor.js -resolution.js -selector.js -supports.js -transition.js -utils.js -value.js -vendor.js - -align-content.js -align-items.js -align-self.js -animation.js -appearance.js -autofill.js -backdrop-filter.js -background-clip.js -background-size.js -block-logical.js -border-image.js -border-radius.js -break-props.js -cross-fade.js -display-flex.js -display-grid.js -file-selector-button.js -filter-value.js -filter.js -flex-basis.js -flex-direction.js -flex-flow.js -flex-grow.js -flex-shrink.js -flex-spec.js -flex-wrap.js -flex.js -fullscreen.js -gradient.js -grid-area.js -grid-column-align.js -grid-end.js -grid-row-align.js -grid-row-column.js -grid-rows-columns.js -grid-start.js -grid-template-areas.js -grid-template.js -grid-utils.js -image-rendering.js -image-set.js -inline-logical.js -intrinsic.js -justify-content.js -mask-border.js -mask-composite.js -order.js -overscroll-behavior.js -pixelated.js -place-self.js -placeholder-shown.js -placeholder.js -print-color-adjust.js -text-decoration-skip-ink.js -text-decoration.js -text-emphasis-position.js -transform-decl.js -user-select.js -writing-mode.js - -LICENSE.md -README.md -index.js -package.json - -LICENSE.txt -README.md -dist -package.json - -cli.js -index.cjs -index.d.ts -index.js - -binary-extensions.json -binary-extensions.json.d.ts -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -lib -package.json - -bn.js - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -index.js -lib -package.json - -compile.js -constants.js -expand.js -parse.js -stringify.js -utils.js - -LICENSE -README.md -browser.js -cli.js -error.d.ts -error.js -index.d.ts -index.js -node.js -package.json -parse.js - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -README.md -index-es5.js -index.js -license -package.json - -LICENSE -README.md -data -dist -package.json - -agents.js -browserVersions.js -browsers.js -features -features.js -regions - -aac.js -abortcontroller.js -ac3-ec3.js -accelerometer.js -addeventlistener.js -alternate-stylesheet.js -ambient-light.js -apng.js -array-find-index.js -array-find.js -array-flat.js -array-includes.js -arrow-functions.js -asmjs.js -async-clipboard.js -async-functions.js -atob-btoa.js -audio-api.js -audio.js -audiotracks.js -autofocus.js -auxclick.js -av1.js -avif.js -background-attachment.js -background-clip-text.js -background-img-opts.js -background-position-x-y.js -background-repeat-round-space.js -background-sync.js -battery-status.js -beacon.js -beforeafterprint.js -bigint.js -blobbuilder.js -bloburls.js -border-image.js -border-radius.js -broadcastchannel.js -brotli.js -calc.js -canvas-blending.js -canvas-text.js -canvas.js -ch-unit.js -chacha20-poly1305.js -channel-messaging.js -childnode-remove.js -classlist.js -client-hints-dpr-width-viewport.js -clipboard.js -colr-v1.js -colr.js -comparedocumentposition.js -console-basic.js -console-time.js -const.js -constraint-validation.js -contenteditable.js -contentsecuritypolicy.js -contentsecuritypolicy2.js -cookie-store-api.js -cors.js -createimagebitmap.js -credential-management.js -cross-document-view-transitions.js -cryptography.js -css-all.js -css-anchor-positioning.js -css-animation.js -css-any-link.js -css-appearance.js -css-at-counter-style.js -css-autofill.js -css-backdrop-filter.js -css-background-offsets.js -css-backgroundblendmode.js -css-boxdecorationbreak.js -css-boxshadow.js -css-canvas.js -css-caret-color.js -css-cascade-layers.js -css-cascade-scope.js -css-case-insensitive.js -css-clip-path.js -css-color-adjust.js -css-color-function.js -css-conic-gradients.js -css-container-queries-style.js -css-container-queries.js -css-container-query-units.js -css-containment.js -css-content-visibility.js -css-counters.js -css-crisp-edges.js -css-cross-fade.js -css-default-pseudo.js -css-descendant-gtgt.js -css-deviceadaptation.js -css-dir-pseudo.js -css-display-contents.js -css-element-function.js -css-env-function.js -css-exclusions.js -css-featurequeries.js -css-file-selector-button.js -css-filter-function.js -css-filters.js -css-first-letter.js -css-first-line.js -css-fixed.js -css-focus-visible.js -css-focus-within.js -css-font-palette.js -css-font-rendering-controls.js -css-font-stretch.js -css-gencontent.js -css-gradients.js -css-grid-animation.js -css-grid.js -css-hanging-punctuation.js -css-has.js -css-hyphens.js -css-if.js -css-image-orientation.js -css-image-set.js -css-in-out-of-range.js -css-indeterminate-pseudo.js -css-initial-letter.js -css-initial-value.js -css-lch-lab.js -css-letter-spacing.js -css-line-clamp.js -css-logical-props.js -css-marker-pseudo.js -css-masks.js -css-matches-pseudo.js -css-math-functions.js -css-media-interaction.js -css-media-range-syntax.js -css-media-resolution.js -css-media-scripting.js -css-mediaqueries.js -css-mixblendmode.js -css-module-scripts.js -css-motion-paths.js -css-namespaces.js -css-nesting.js -css-not-sel-list.js -css-nth-child-of.js -css-opacity.js -css-optional-pseudo.js -css-overflow-anchor.js -css-overflow-overlay.js -css-overflow.js -css-overscroll-behavior.js -css-page-break.js -css-paged-media.js -css-paint-api.js -css-placeholder-shown.js -css-placeholder.js -css-print-color-adjust.js -css-read-only-write.js -css-rebeccapurple.js -css-reflections.js -css-regions.js -css-relative-colors.js -css-repeating-gradients.js -css-resize.js -css-revert-value.js -css-rrggbbaa.js -css-scroll-behavior.js -css-scrollbar.js -css-sel2.js -css-sel3.js -css-selection.js -css-shapes.js -css-snappoints.js -css-sticky.js -css-subgrid.js -css-supports-api.js -css-table.js -css-text-align-last.js -css-text-box-trim.js -css-text-indent.js -css-text-justify.js -css-text-orientation.js -css-text-spacing.js -css-text-wrap-balance.js -css-textshadow.js -css-touch-action.js -css-transitions.js -css-unicode-bidi.js -css-unset-value.js -css-variables.js -css-when-else.js -css-widows-orphans.js -css-width-stretch.js -css-writing-mode.js -css-zoom.js -css3-attr.js -css3-boxsizing.js -css3-colors.js -css3-cursors-grab.js -css3-cursors-newer.js -css3-cursors.js -css3-tabsize.js -currentcolor.js -custom-elements.js -custom-elementsv1.js -customevent.js -datalist.js -dataset.js -datauri.js -date-tolocaledatestring.js -declarative-shadow-dom.js -decorators.js -details.js -deviceorientation.js -devicepixelratio.js -dialog.js -dispatchevent.js -dnssec.js -do-not-track.js -document-currentscript.js -document-evaluate-xpath.js -document-execcommand.js -document-policy.js -document-scrollingelement.js -documenthead.js -dom-manip-convenience.js -dom-range.js -domcontentloaded.js -dommatrix.js -download.js -dragndrop.js -element-closest.js -element-from-point.js -element-scroll-methods.js -eme.js -eot.js -es5.js -es6-class.js -es6-generators.js -es6-module-dynamic-import.js -es6-module.js -es6-number.js -es6-string-includes.js -es6.js -eventsource.js -extended-system-fonts.js -feature-policy.js -fetch.js -fieldset-disabled.js -fileapi.js -filereader.js -filereadersync.js -filesystem.js -flac.js -flexbox-gap.js -flexbox.js -flow-root.js -focusin-focusout-events.js -font-family-system-ui.js -font-feature.js -font-kerning.js -font-loading.js -font-size-adjust.js -font-smooth.js -font-unicode-range.js -font-variant-alternates.js -font-variant-numeric.js -fontface.js -form-attribute.js -form-submit-attributes.js -form-validation.js -forms.js -fullscreen.js -gamepad.js -geolocation.js -getboundingclientrect.js -getcomputedstyle.js -getelementsbyclassname.js -getrandomvalues.js -gyroscope.js -hardwareconcurrency.js -hashchange.js -heif.js -hevc.js -hidden.js -high-resolution-time.js -history.js -html-media-capture.js -html5semantic.js -http-live-streaming.js -http2.js -http3.js -iframe-sandbox.js -iframe-seamless.js -iframe-srcdoc.js -imagecapture.js -ime.js -img-naturalwidth-naturalheight.js -import-maps.js -imports.js -indeterminate-checkbox.js -indexeddb.js -indexeddb2.js -inline-block.js -innertext.js -input-autocomplete-onoff.js -input-color.js -input-datetime.js -input-email-tel-url.js -input-event.js -input-file-accept.js -input-file-directory.js -input-file-multiple.js -input-inputmode.js -input-minlength.js -input-number.js -input-pattern.js -input-placeholder.js -input-range.js -input-search.js -input-selection.js -insert-adjacent.js -insertadjacenthtml.js -internationalization.js -intersectionobserver-v2.js -intersectionobserver.js -intl-pluralrules.js -intrinsic-width.js -jpeg2000.js -jpegxl.js -jpegxr.js -js-regexp-lookbehind.js -json.js -justify-content-space-evenly.js -kerning-pairs-ligatures.js -keyboardevent-charcode.js -keyboardevent-code.js -keyboardevent-getmodifierstate.js -keyboardevent-key.js -keyboardevent-location.js -keyboardevent-which.js -lazyload.js -let.js -link-icon-png.js -link-icon-svg.js -link-rel-dns-prefetch.js -link-rel-modulepreload.js -link-rel-preconnect.js -link-rel-prefetch.js -link-rel-preload.js -link-rel-prerender.js -loading-lazy-attr.js -localecompare.js -magnetometer.js -matchesselector.js -matchmedia.js -mathml.js -maxlength.js -mdn-css-backdrop-pseudo-element.js -mdn-css-unicode-bidi-isolate-override.js -mdn-css-unicode-bidi-isolate.js -mdn-css-unicode-bidi-plaintext.js -mdn-text-decoration-color.js -mdn-text-decoration-line.js -mdn-text-decoration-shorthand.js -mdn-text-decoration-style.js -media-fragments.js -mediacapture-fromelement.js -mediarecorder.js -mediasource.js -menu.js -meta-theme-color.js -meter.js -midi.js -minmaxwh.js -mp3.js -mpeg-dash.js -mpeg4.js -multibackgrounds.js -multicolumn.js -mutation-events.js -mutationobserver.js -namevalue-storage.js -native-filesystem-api.js -nav-timing.js -netinfo.js -notifications.js -object-entries.js -object-fit.js -object-observe.js -object-values.js -objectrtc.js -offline-apps.js -offscreencanvas.js -ogg-vorbis.js -ogv.js -ol-reversed.js -once-event-listener.js -online-status.js -opus.js -orientation-sensor.js -outline.js -pad-start-end.js -page-transition-events.js -pagevisibility.js -passive-event-listener.js -passkeys.js -passwordrules.js -path2d.js -payment-request.js -pdf-viewer.js -permissions-api.js -permissions-policy.js -picture-in-picture.js -picture.js -ping.js -png-alpha.js -pointer-events.js -pointer.js -pointerlock.js -portals.js -prefers-color-scheme.js -prefers-reduced-motion.js -progress.js -promise-finally.js -promises.js -proximity.js -proxy.js -publickeypinning.js -push-api.js -queryselector.js -readonly-attr.js -referrer-policy.js -registerprotocolhandler.js -rel-noopener.js -rel-noreferrer.js -rellist.js -rem.js -requestanimationframe.js -requestidlecallback.js -resizeobserver.js -resource-timing.js -rest-parameters.js -rtcpeerconnection.js -ruby.js -run-in.js -same-site-cookie-attribute.js -screen-orientation.js -script-async.js -script-defer.js -scrollintoview.js -scrollintoviewifneeded.js -sdch.js -selection-api.js -selectlist.js -server-timing.js -serviceworkers.js -setimmediate.js -shadowdom.js -shadowdomv1.js -sharedarraybuffer.js -sharedworkers.js -sni.js -spdy.js -speech-recognition.js -speech-synthesis.js -spellcheck-attribute.js -sql-storage.js -srcset.js -stream.js -streams.js -stricttransportsecurity.js -style-scoped.js -subresource-bundling.js -subresource-integrity.js -svg-css.js -svg-filters.js -svg-fonts.js -svg-fragment.js -svg-html.js -svg-html5.js -svg-img.js -svg-smil.js -svg.js -sxg.js -tabindex-attr.js -template-literals.js -template.js -temporal.js -testfeat.js -text-decoration.js -text-emphasis.js -text-overflow.js -text-size-adjust.js -text-stroke.js -textcontent.js -textencoder.js -tls1-1.js -tls1-2.js -tls1-3.js -touch.js -transforms2d.js -transforms3d.js -trusted-types.js -ttf.js -typedarrays.js -u2f.js -unhandledrejection.js -upgradeinsecurerequests.js -url-scroll-to-text-fragment.js -url.js -urlsearchparams.js -use-strict.js -user-select-none.js -user-timing.js -variable-fonts.js -vector-effect.js -vibration.js -video.js -videotracks.js -view-transitions.js -viewport-unit-variants.js -viewport-units.js -wai-aria.js -wake-lock.js -wasm-bigint.js -wasm-bulk-memory.js -wasm-extended-const.js -wasm-gc.js -wasm-multi-memory.js -wasm-multi-value.js -wasm-mutable-globals.js -wasm-nontrapping-fptoint.js -wasm-reference-types.js -wasm-relaxed-simd.js -wasm-signext.js -wasm-simd.js -wasm-tail-calls.js -wasm-threads.js -wasm.js -wav.js -wbr-element.js -web-animation.js -web-app-manifest.js -web-bluetooth.js -web-serial.js -web-share.js -webauthn.js -webcodecs.js -webgl.js -webgl2.js -webgpu.js -webhid.js -webkit-user-drag.js -webm.js -webnfc.js -webp.js -websockets.js -webtransport.js -webusb.js -webvr.js -webvtt.js -webworkers.js -webxr.js -will-change.js -woff.js -woff2.js -word-break.js -wordwrap.js -x-doc-messaging.js -x-frame-options.js -xhr2.js -xhtml.js -xhtmlsmil.js -xml-serializer.js -zstd.js - -AD.js -AE.js -AF.js -AG.js -AI.js -AL.js -AM.js -AO.js -AR.js -AS.js -AT.js -AU.js -AW.js -AX.js -AZ.js -BA.js -BB.js -BD.js -BE.js -BF.js -BG.js -BH.js -BI.js -BJ.js -BM.js -BN.js -BO.js -BR.js -BS.js -BT.js -BW.js -BY.js -BZ.js -CA.js -CD.js -CF.js -CG.js -CH.js -CI.js -CK.js -CL.js -CM.js -CN.js -CO.js -CR.js -CU.js -CV.js -CX.js -CY.js -CZ.js -DE.js -DJ.js -DK.js -DM.js -DO.js -DZ.js -EC.js -EE.js -EG.js -ER.js -ES.js -ET.js -FI.js -FJ.js -FK.js -FM.js -FO.js -FR.js -GA.js -GB.js -GD.js -GE.js -GF.js -GG.js -GH.js -GI.js -GL.js -GM.js -GN.js -GP.js -GQ.js -GR.js -GT.js -GU.js -GW.js -GY.js -HK.js -HN.js -HR.js -HT.js -HU.js -ID.js -IE.js -IL.js -IM.js -IN.js -IQ.js -IR.js -IS.js -IT.js -JE.js -JM.js -JO.js -JP.js -KE.js -KG.js -KH.js -KI.js -KM.js -KN.js -KP.js -KR.js -KW.js -KY.js -KZ.js -LA.js -LB.js -LC.js -LI.js -LK.js -LR.js -LS.js -LT.js -LU.js -LV.js -LY.js -MA.js -MC.js -MD.js -ME.js -MG.js -MH.js -MK.js -ML.js -MM.js -MN.js -MO.js -MP.js -MQ.js -MR.js -MS.js -MT.js -MU.js -MV.js -MW.js -MX.js -MY.js -MZ.js -NA.js -NC.js -NE.js -NF.js -NG.js -NI.js -NL.js -NO.js -NP.js -NR.js -NU.js -NZ.js -OM.js -PA.js -PE.js -PF.js -PG.js -PH.js -PK.js -PL.js -PM.js -PN.js -PR.js -PS.js -PT.js -PW.js -PY.js -QA.js -RE.js -RO.js -RS.js -RU.js -RW.js -SA.js -SB.js -SC.js -SD.js -SE.js -SG.js -SH.js -SI.js -SK.js -SL.js -SM.js -SN.js -SO.js -SR.js -ST.js -SV.js -SY.js -SZ.js -TC.js -TD.js -TG.js -TH.js -TJ.js -TL.js -TM.js -TN.js -TO.js -TR.js -TT.js -TV.js -TW.js -TZ.js -UA.js -UG.js -US.js -UY.js -UZ.js -VA.js -VC.js -VE.js -VG.js -VI.js -VN.js -VU.js -WF.js -WS.js -YE.js -YT.js -ZA.js -ZM.js -ZW.js -alt-af.js -alt-an.js -alt-as.js -alt-eu.js -alt-na.js -alt-oc.js -alt-sa.js -alt-ww.js - -lib -unpacker - -statuses.js -supported.js - -agents.js -browserVersions.js -browsers.js -feature.js -features.js -index.js -region.js - -index.d.ts -license -package.json -readme.md -source - -index.js -templates.js -util.js - -LICENSE -README.md -index.js -lib -package.json -types - -constants.js -fsevents-handler.js -nodefs-handler.js - -glob-parent - -CHANGELOG.md -LICENSE -README.md -index.js -package.json - -index.d.ts - -LICENSE -README.md -dist -package.json - -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -types.d.ts - -CHANGELOG.md -LICENSE.txt -README.md -index.js -package.json - -ansi-regex -emoji-regex -string-width -strip-ansi -wrap-ansi - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE-MIT.txt -README.md -es2015 -index.d.ts -index.js -package.json -text.js - -index.js -text.js - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -index.js -license -package.json -readme.md - -clsx.d.mts -clsx.d.ts -dist -license -package.json -readme.md - -clsx.js -clsx.min.js -clsx.mjs -lite.js -lite.mjs - -LICENSE.md -README.md -dist -package.json - -chunk-NZJY6EH4.mjs -chunk-XJATAMEX.mjs -command-score.d.mts -command-score.d.ts -command-score.js -command-score.mjs -index.d.mts -index.d.ts -index.js -index.mjs - -CHANGELOG.md -LICENSE -README.md -conversions.js -index.js -package.json -route.js - -LICENSE -README.md -index.js -package.json - -CHANGELOG.md -LICENSE -Readme.md -index.js -package.json -typings - -index.d.ts - -LICENSE -README.markdown -example -index.js -package.json -test - -map.js - -map.js - -LICENSE -README.md -index.js -lib -package.json - -enoent.js -parse.js -util - -escape.js -readShebang.js -resolveCommand.js - -LICENSE-MIT.txt -README.md -bin -cssesc.js -man -package.json - -cssesc - -cssesc.1 - -LICENSE -README.md -index.d.ts -index.js.flow -package.json - -LICENSE -README.md -dist -package.json -src - -d3-array.js -d3-array.min.js - -array.js -ascending.js -bin.js -bisect.js -bisector.js -blur.js -constant.js -count.js -cross.js -cumsum.js -descending.js -deviation.js -difference.js -disjoint.js -every.js -extent.js -filter.js -fsum.js -greatest.js -greatestIndex.js -group.js -groupSort.js -identity.js -index.js -intersection.js -least.js -leastIndex.js -map.js -max.js -maxIndex.js -mean.js -median.js -merge.js -min.js -minIndex.js -mode.js -nice.js -number.js -pairs.js -permute.js -quantile.js -quickselect.js -range.js -rank.js -reduce.js -reverse.js -scan.js -shuffle.js -some.js -sort.js -subset.js -sum.js -superset.js -threshold -ticks.js -transpose.js -union.js -variance.js -zip.js - -freedmanDiaconis.js -scott.js -sturges.js - -LICENSE -README.md -dist -package.json -src - -d3-color.js -d3-color.min.js - -color.js -cubehelix.js -define.js -index.js -lab.js -math.js - -LICENSE -README.md -dist -package.json -src - -d3-ease.js -d3-ease.min.js - -back.js -bounce.js -circle.js -cubic.js -elastic.js -exp.js -index.js -linear.js -math.js -poly.js -quad.js -sin.js - -LICENSE -README.md -dist -locale -package.json -src - -d3-format.js -d3-format.min.js - -ar-001.json -ar-AE.json -ar-BH.json -ar-DJ.json -ar-DZ.json -ar-EG.json -ar-EH.json -ar-ER.json -ar-IL.json -ar-IQ.json -ar-JO.json -ar-KM.json -ar-KW.json -ar-LB.json -ar-LY.json -ar-MA.json -ar-MR.json -ar-OM.json -ar-PS.json -ar-QA.json -ar-SA.json -ar-SD.json -ar-SO.json -ar-SS.json -ar-SY.json -ar-TD.json -ar-TN.json -ar-YE.json -ca-ES.json -cs-CZ.json -da-DK.json -de-CH.json -de-DE.json -en-CA.json -en-GB.json -en-IE.json -en-IN.json -en-US.json -es-BO.json -es-ES.json -es-MX.json -fi-FI.json -fr-CA.json -fr-FR.json -he-IL.json -hu-HU.json -it-IT.json -ja-JP.json -ko-KR.json -mk-MK.json -nl-NL.json -pl-PL.json -pt-BR.json -pt-PT.json -ru-RU.json -sl-SI.json -sv-SE.json -uk-UA.json -zh-CN.json - -defaultLocale.js -exponent.js -formatDecimal.js -formatGroup.js -formatNumerals.js -formatPrefixAuto.js -formatRounded.js -formatSpecifier.js -formatTrim.js -formatTypes.js -identity.js -index.js -locale.js -precisionFixed.js -precisionPrefix.js -precisionRound.js - -LICENSE -README.md -dist -package.json -src - -d3-interpolate.js -d3-interpolate.min.js - -array.js -basis.js -basisClosed.js -color.js -constant.js -cubehelix.js -date.js -discrete.js -hcl.js -hsl.js -hue.js -index.js -lab.js -number.js -numberArray.js -object.js -piecewise.js -quantize.js -rgb.js -round.js -string.js -transform -value.js -zoom.js - -decompose.js -index.js -parse.js - -LICENSE -README.md -dist -package.json -src - -d3-path.js -d3-path.min.js - -index.js -path.js - -LICENSE -README.md -dist -package.json -src - -d3-scale.js -d3-scale.min.js - -band.js -colors.js -constant.js -continuous.js -diverging.js -identity.js -index.js -init.js -linear.js -log.js -nice.js -number.js -ordinal.js -pow.js -quantile.js -quantize.js -radial.js -sequential.js -sequentialQuantile.js -symlog.js -threshold.js -tickFormat.js -time.js -utcTime.js - -LICENSE -README.md -dist -package.json -src - -d3-shape.js -d3-shape.min.js - -arc.js -area.js -areaRadial.js -array.js -constant.js -curve -descending.js -identity.js -index.js -line.js -lineRadial.js -link.js -math.js -noop.js -offset -order -path.js -pie.js -point.js -pointRadial.js -stack.js -symbol -symbol.js - -basis.js -basisClosed.js -basisOpen.js -bump.js -bundle.js -cardinal.js -cardinalClosed.js -cardinalOpen.js -catmullRom.js -catmullRomClosed.js -catmullRomOpen.js -linear.js -linearClosed.js -monotone.js -natural.js -radial.js -step.js - -diverging.js -expand.js -none.js -silhouette.js -wiggle.js - -appearance.js -ascending.js -descending.js -insideOut.js -none.js -reverse.js - -asterisk.js -circle.js -cross.js -diamond.js -diamond2.js -plus.js -square.js -square2.js -star.js -times.js -triangle.js -triangle2.js -wye.js - -LICENSE -README.md -dist -package.json -src - -d3-time.js -d3-time.min.js - -day.js -duration.js -hour.js -index.js -interval.js -millisecond.js -minute.js -month.js -second.js -ticks.js -week.js -year.js - -LICENSE -README.md -dist -locale -package.json -src - -d3-time-format.js -d3-time-format.min.js - -ar-EG.json -ar-SY.json -ca-ES.json -cs-CZ.json -da-DK.json -de-CH.json -de-DE.json -en-CA.json -en-GB.json -en-US.json -es-ES.json -es-MX.json -fa-IR.json -fi-FI.json -fr-CA.json -fr-FR.json -he-IL.json -hr-HR.json -hu-HU.json -it-IT.json -ja-JP.json -ko-KR.json -mk-MK.json -nb-NO.json -nl-BE.json -nl-NL.json -pl-PL.json -pt-BR.json -ru-RU.json -sv-SE.json -tr-TR.json -uk-UA.json -zh-CN.json -zh-TW.json - -defaultLocale.js -index.js -isoFormat.js -isoParse.js -locale.js - -LICENSE -README.md -dist -package.json -src - -d3-timer.js -d3-timer.min.js - -index.js -interval.js -timeout.js -timer.js - -README.md -dist -package.json -src - -index.d.ts -index.js -index.js.map - -index.ts - -CHANGELOG.md -LICENSE.md -README.md -SECURITY.md -_lib -add.d.mts -add.d.ts -add.js -add.mjs -addBusinessDays.d.mts -addBusinessDays.d.ts -addBusinessDays.js -addBusinessDays.mjs -addDays.d.mts -addDays.d.ts -addDays.js -addDays.mjs -addHours.d.mts -addHours.d.ts -addHours.js -addHours.mjs -addISOWeekYears.d.mts -addISOWeekYears.d.ts -addISOWeekYears.js -addISOWeekYears.mjs -addMilliseconds.d.mts -addMilliseconds.d.ts -addMilliseconds.js -addMilliseconds.mjs -addMinutes.d.mts -addMinutes.d.ts -addMinutes.js -addMinutes.mjs -addMonths.d.mts -addMonths.d.ts -addMonths.js -addMonths.mjs -addQuarters.d.mts -addQuarters.d.ts -addQuarters.js -addQuarters.mjs -addSeconds.d.mts -addSeconds.d.ts -addSeconds.js -addSeconds.mjs -addWeeks.d.mts -addWeeks.d.ts -addWeeks.js -addWeeks.mjs -addYears.d.mts -addYears.d.ts -addYears.js -addYears.mjs -areIntervalsOverlapping.d.mts -areIntervalsOverlapping.d.ts -areIntervalsOverlapping.js -areIntervalsOverlapping.mjs -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map -clamp.d.mts -clamp.d.ts -clamp.js -clamp.mjs -closestIndexTo.d.mts -closestIndexTo.d.ts -closestIndexTo.js -closestIndexTo.mjs -closestTo.d.mts -closestTo.d.ts -closestTo.js -closestTo.mjs -compareAsc.d.mts -compareAsc.d.ts -compareAsc.js -compareAsc.mjs -compareDesc.d.mts -compareDesc.d.ts -compareDesc.js -compareDesc.mjs -constants.d.mts -constants.d.ts -constants.js -constants.mjs -constructFrom.d.mts -constructFrom.d.ts -constructFrom.js -constructFrom.mjs -constructNow.d.mts -constructNow.d.ts -constructNow.js -constructNow.mjs -daysToWeeks.d.mts -daysToWeeks.d.ts -daysToWeeks.js -daysToWeeks.mjs -differenceInBusinessDays.d.mts -differenceInBusinessDays.d.ts -differenceInBusinessDays.js -differenceInBusinessDays.mjs -differenceInCalendarDays.d.mts -differenceInCalendarDays.d.ts -differenceInCalendarDays.js -differenceInCalendarDays.mjs -differenceInCalendarISOWeekYears.d.mts -differenceInCalendarISOWeekYears.d.ts -differenceInCalendarISOWeekYears.js -differenceInCalendarISOWeekYears.mjs -differenceInCalendarISOWeeks.d.mts -differenceInCalendarISOWeeks.d.ts -differenceInCalendarISOWeeks.js -differenceInCalendarISOWeeks.mjs -differenceInCalendarMonths.d.mts -differenceInCalendarMonths.d.ts -differenceInCalendarMonths.js -differenceInCalendarMonths.mjs -differenceInCalendarQuarters.d.mts -differenceInCalendarQuarters.d.ts -differenceInCalendarQuarters.js -differenceInCalendarQuarters.mjs -differenceInCalendarWeeks.d.mts -differenceInCalendarWeeks.d.ts -differenceInCalendarWeeks.js -differenceInCalendarWeeks.mjs -differenceInCalendarYears.d.mts -differenceInCalendarYears.d.ts -differenceInCalendarYears.js -differenceInCalendarYears.mjs -differenceInDays.d.mts -differenceInDays.d.ts -differenceInDays.js -differenceInDays.mjs -differenceInHours.d.mts -differenceInHours.d.ts -differenceInHours.js -differenceInHours.mjs -differenceInISOWeekYears.d.mts -differenceInISOWeekYears.d.ts -differenceInISOWeekYears.js -differenceInISOWeekYears.mjs -differenceInMilliseconds.d.mts -differenceInMilliseconds.d.ts -differenceInMilliseconds.js -differenceInMilliseconds.mjs -differenceInMinutes.d.mts -differenceInMinutes.d.ts -differenceInMinutes.js -differenceInMinutes.mjs -differenceInMonths.d.mts -differenceInMonths.d.ts -differenceInMonths.js -differenceInMonths.mjs -differenceInQuarters.d.mts -differenceInQuarters.d.ts -differenceInQuarters.js -differenceInQuarters.mjs -differenceInSeconds.d.mts -differenceInSeconds.d.ts -differenceInSeconds.js -differenceInSeconds.mjs -differenceInWeeks.d.mts -differenceInWeeks.d.ts -differenceInWeeks.js -differenceInWeeks.mjs -differenceInYears.d.mts -differenceInYears.d.ts -differenceInYears.js -differenceInYears.mjs -docs -eachDayOfInterval.d.mts -eachDayOfInterval.d.ts -eachDayOfInterval.js -eachDayOfInterval.mjs -eachHourOfInterval.d.mts -eachHourOfInterval.d.ts -eachHourOfInterval.js -eachHourOfInterval.mjs -eachMinuteOfInterval.d.mts -eachMinuteOfInterval.d.ts -eachMinuteOfInterval.js -eachMinuteOfInterval.mjs -eachMonthOfInterval.d.mts -eachMonthOfInterval.d.ts -eachMonthOfInterval.js -eachMonthOfInterval.mjs -eachQuarterOfInterval.d.mts -eachQuarterOfInterval.d.ts -eachQuarterOfInterval.js -eachQuarterOfInterval.mjs -eachWeekOfInterval.d.mts -eachWeekOfInterval.d.ts -eachWeekOfInterval.js -eachWeekOfInterval.mjs -eachWeekendOfInterval.d.mts -eachWeekendOfInterval.d.ts -eachWeekendOfInterval.js -eachWeekendOfInterval.mjs -eachWeekendOfMonth.d.mts -eachWeekendOfMonth.d.ts -eachWeekendOfMonth.js -eachWeekendOfMonth.mjs -eachWeekendOfYear.d.mts -eachWeekendOfYear.d.ts -eachWeekendOfYear.js -eachWeekendOfYear.mjs -eachYearOfInterval.d.mts -eachYearOfInterval.d.ts -eachYearOfInterval.js -eachYearOfInterval.mjs -endOfDay.d.mts -endOfDay.d.ts -endOfDay.js -endOfDay.mjs -endOfDecade.d.mts -endOfDecade.d.ts -endOfDecade.js -endOfDecade.mjs -endOfHour.d.mts -endOfHour.d.ts -endOfHour.js -endOfHour.mjs -endOfISOWeek.d.mts -endOfISOWeek.d.ts -endOfISOWeek.js -endOfISOWeek.mjs -endOfISOWeekYear.d.mts -endOfISOWeekYear.d.ts -endOfISOWeekYear.js -endOfISOWeekYear.mjs -endOfMinute.d.mts -endOfMinute.d.ts -endOfMinute.js -endOfMinute.mjs -endOfMonth.d.mts -endOfMonth.d.ts -endOfMonth.js -endOfMonth.mjs -endOfQuarter.d.mts -endOfQuarter.d.ts -endOfQuarter.js -endOfQuarter.mjs -endOfSecond.d.mts -endOfSecond.d.ts -endOfSecond.js -endOfSecond.mjs -endOfToday.d.mts -endOfToday.d.ts -endOfToday.js -endOfToday.mjs -endOfTomorrow.d.mts -endOfTomorrow.d.ts -endOfTomorrow.js -endOfTomorrow.mjs -endOfWeek.d.mts -endOfWeek.d.ts -endOfWeek.js -endOfWeek.mjs -endOfYear.d.mts -endOfYear.d.ts -endOfYear.js -endOfYear.mjs -endOfYesterday.d.mts -endOfYesterday.d.ts -endOfYesterday.js -endOfYesterday.mjs -format.d.mts -format.d.ts -format.js -format.mjs -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatDistanceStrict.d.mts -formatDistanceStrict.d.ts -formatDistanceStrict.js -formatDistanceStrict.mjs -formatDistanceToNow.d.mts -formatDistanceToNow.d.ts -formatDistanceToNow.js -formatDistanceToNow.mjs -formatDistanceToNowStrict.d.mts -formatDistanceToNowStrict.d.ts -formatDistanceToNowStrict.js -formatDistanceToNowStrict.mjs -formatDuration.d.mts -formatDuration.d.ts -formatDuration.js -formatDuration.mjs -formatISO.d.mts -formatISO.d.ts -formatISO.js -formatISO.mjs -formatISO9075.d.mts -formatISO9075.d.ts -formatISO9075.js -formatISO9075.mjs -formatISODuration.d.mts -formatISODuration.d.ts -formatISODuration.js -formatISODuration.mjs -formatRFC3339.d.mts -formatRFC3339.d.ts -formatRFC3339.js -formatRFC3339.mjs -formatRFC7231.d.mts -formatRFC7231.d.ts -formatRFC7231.js -formatRFC7231.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -fp -fp.d.mts -fp.d.ts -fp.js -fp.mjs -fromUnixTime.d.mts -fromUnixTime.d.ts -fromUnixTime.js -fromUnixTime.mjs -getDate.d.mts -getDate.d.ts -getDate.js -getDate.mjs -getDay.d.mts -getDay.d.ts -getDay.js -getDay.mjs -getDayOfYear.d.mts -getDayOfYear.d.ts -getDayOfYear.js -getDayOfYear.mjs -getDaysInMonth.d.mts -getDaysInMonth.d.ts -getDaysInMonth.js -getDaysInMonth.mjs -getDaysInYear.d.mts -getDaysInYear.d.ts -getDaysInYear.js -getDaysInYear.mjs -getDecade.d.mts -getDecade.d.ts -getDecade.js -getDecade.mjs -getDefaultOptions.d.mts -getDefaultOptions.d.ts -getDefaultOptions.js -getDefaultOptions.mjs -getHours.d.mts -getHours.d.ts -getHours.js -getHours.mjs -getISODay.d.mts -getISODay.d.ts -getISODay.js -getISODay.mjs -getISOWeek.d.mts -getISOWeek.d.ts -getISOWeek.js -getISOWeek.mjs -getISOWeekYear.d.mts -getISOWeekYear.d.ts -getISOWeekYear.js -getISOWeekYear.mjs -getISOWeeksInYear.d.mts -getISOWeeksInYear.d.ts -getISOWeeksInYear.js -getISOWeeksInYear.mjs -getMilliseconds.d.mts -getMilliseconds.d.ts -getMilliseconds.js -getMilliseconds.mjs -getMinutes.d.mts -getMinutes.d.ts -getMinutes.js -getMinutes.mjs -getMonth.d.mts -getMonth.d.ts -getMonth.js -getMonth.mjs -getOverlappingDaysInIntervals.d.mts -getOverlappingDaysInIntervals.d.ts -getOverlappingDaysInIntervals.js -getOverlappingDaysInIntervals.mjs -getQuarter.d.mts -getQuarter.d.ts -getQuarter.js -getQuarter.mjs -getSeconds.d.mts -getSeconds.d.ts -getSeconds.js -getSeconds.mjs -getTime.d.mts -getTime.d.ts -getTime.js -getTime.mjs -getUnixTime.d.mts -getUnixTime.d.ts -getUnixTime.js -getUnixTime.mjs -getWeek.d.mts -getWeek.d.ts -getWeek.js -getWeek.mjs -getWeekOfMonth.d.mts -getWeekOfMonth.d.ts -getWeekOfMonth.js -getWeekOfMonth.mjs -getWeekYear.d.mts -getWeekYear.d.ts -getWeekYear.js -getWeekYear.mjs -getWeeksInMonth.d.mts -getWeeksInMonth.d.ts -getWeeksInMonth.js -getWeeksInMonth.mjs -getYear.d.mts -getYear.d.ts -getYear.js -getYear.mjs -hoursToMilliseconds.d.mts -hoursToMilliseconds.d.ts -hoursToMilliseconds.js -hoursToMilliseconds.mjs -hoursToMinutes.d.mts -hoursToMinutes.d.ts -hoursToMinutes.js -hoursToMinutes.mjs -hoursToSeconds.d.mts -hoursToSeconds.d.ts -hoursToSeconds.js -hoursToSeconds.mjs -index.d.mts -index.d.ts -index.js -index.mjs -interval.d.mts -interval.d.ts -interval.js -interval.mjs -intervalToDuration.d.mts -intervalToDuration.d.ts -intervalToDuration.js -intervalToDuration.mjs -intlFormat.d.mts -intlFormat.d.ts -intlFormat.js -intlFormat.mjs -intlFormatDistance.d.mts -intlFormatDistance.d.ts -intlFormatDistance.js -intlFormatDistance.mjs -isAfter.d.mts -isAfter.d.ts -isAfter.js -isAfter.mjs -isBefore.d.mts -isBefore.d.ts -isBefore.js -isBefore.mjs -isDate.d.mts -isDate.d.ts -isDate.js -isDate.mjs -isEqual.d.mts -isEqual.d.ts -isEqual.js -isEqual.mjs -isExists.d.mts -isExists.d.ts -isExists.js -isExists.mjs -isFirstDayOfMonth.d.mts -isFirstDayOfMonth.d.ts -isFirstDayOfMonth.js -isFirstDayOfMonth.mjs -isFriday.d.mts -isFriday.d.ts -isFriday.js -isFriday.mjs -isFuture.d.mts -isFuture.d.ts -isFuture.js -isFuture.mjs -isLastDayOfMonth.d.mts -isLastDayOfMonth.d.ts -isLastDayOfMonth.js -isLastDayOfMonth.mjs -isLeapYear.d.mts -isLeapYear.d.ts -isLeapYear.js -isLeapYear.mjs -isMatch.d.mts -isMatch.d.ts -isMatch.js -isMatch.mjs -isMonday.d.mts -isMonday.d.ts -isMonday.js -isMonday.mjs -isPast.d.mts -isPast.d.ts -isPast.js -isPast.mjs -isSameDay.d.mts -isSameDay.d.ts -isSameDay.js -isSameDay.mjs -isSameHour.d.mts -isSameHour.d.ts -isSameHour.js -isSameHour.mjs -isSameISOWeek.d.mts -isSameISOWeek.d.ts -isSameISOWeek.js -isSameISOWeek.mjs -isSameISOWeekYear.d.mts -isSameISOWeekYear.d.ts -isSameISOWeekYear.js -isSameISOWeekYear.mjs -isSameMinute.d.mts -isSameMinute.d.ts -isSameMinute.js -isSameMinute.mjs -isSameMonth.d.mts -isSameMonth.d.ts -isSameMonth.js -isSameMonth.mjs -isSameQuarter.d.mts -isSameQuarter.d.ts -isSameQuarter.js -isSameQuarter.mjs -isSameSecond.d.mts -isSameSecond.d.ts -isSameSecond.js -isSameSecond.mjs -isSameWeek.d.mts -isSameWeek.d.ts -isSameWeek.js -isSameWeek.mjs -isSameYear.d.mts -isSameYear.d.ts -isSameYear.js -isSameYear.mjs -isSaturday.d.mts -isSaturday.d.ts -isSaturday.js -isSaturday.mjs -isSunday.d.mts -isSunday.d.ts -isSunday.js -isSunday.mjs -isThisHour.d.mts -isThisHour.d.ts -isThisHour.js -isThisHour.mjs -isThisISOWeek.d.mts -isThisISOWeek.d.ts -isThisISOWeek.js -isThisISOWeek.mjs -isThisMinute.d.mts -isThisMinute.d.ts -isThisMinute.js -isThisMinute.mjs -isThisMonth.d.mts -isThisMonth.d.ts -isThisMonth.js -isThisMonth.mjs -isThisQuarter.d.mts -isThisQuarter.d.ts -isThisQuarter.js -isThisQuarter.mjs -isThisSecond.d.mts -isThisSecond.d.ts -isThisSecond.js -isThisSecond.mjs -isThisWeek.d.mts -isThisWeek.d.ts -isThisWeek.js -isThisWeek.mjs -isThisYear.d.mts -isThisYear.d.ts -isThisYear.js -isThisYear.mjs -isThursday.d.mts -isThursday.d.ts -isThursday.js -isThursday.mjs -isToday.d.mts -isToday.d.ts -isToday.js -isToday.mjs -isTomorrow.d.mts -isTomorrow.d.ts -isTomorrow.js -isTomorrow.mjs -isTuesday.d.mts -isTuesday.d.ts -isTuesday.js -isTuesday.mjs -isValid.d.mts -isValid.d.ts -isValid.js -isValid.mjs -isWednesday.d.mts -isWednesday.d.ts -isWednesday.js -isWednesday.mjs -isWeekend.d.mts -isWeekend.d.ts -isWeekend.js -isWeekend.mjs -isWithinInterval.d.mts -isWithinInterval.d.ts -isWithinInterval.js -isWithinInterval.mjs -isYesterday.d.mts -isYesterday.d.ts -isYesterday.js -isYesterday.mjs -lastDayOfDecade.d.mts -lastDayOfDecade.d.ts -lastDayOfDecade.js -lastDayOfDecade.mjs -lastDayOfISOWeek.d.mts -lastDayOfISOWeek.d.ts -lastDayOfISOWeek.js -lastDayOfISOWeek.mjs -lastDayOfISOWeekYear.d.mts -lastDayOfISOWeekYear.d.ts -lastDayOfISOWeekYear.js -lastDayOfISOWeekYear.mjs -lastDayOfMonth.d.mts -lastDayOfMonth.d.ts -lastDayOfMonth.js -lastDayOfMonth.mjs -lastDayOfQuarter.d.mts -lastDayOfQuarter.d.ts -lastDayOfQuarter.js -lastDayOfQuarter.mjs -lastDayOfWeek.d.mts -lastDayOfWeek.d.ts -lastDayOfWeek.js -lastDayOfWeek.mjs -lastDayOfYear.d.mts -lastDayOfYear.d.ts -lastDayOfYear.js -lastDayOfYear.mjs -lightFormat.d.mts -lightFormat.d.ts -lightFormat.js -lightFormat.mjs -locale -locale.d.mts -locale.d.ts -locale.js -locale.mjs -max.d.mts -max.d.ts -max.js -max.mjs -milliseconds.d.mts -milliseconds.d.ts -milliseconds.js -milliseconds.mjs -millisecondsToHours.d.mts -millisecondsToHours.d.ts -millisecondsToHours.js -millisecondsToHours.mjs -millisecondsToMinutes.d.mts -millisecondsToMinutes.d.ts -millisecondsToMinutes.js -millisecondsToMinutes.mjs -millisecondsToSeconds.d.mts -millisecondsToSeconds.d.ts -millisecondsToSeconds.js -millisecondsToSeconds.mjs -min.d.mts -min.d.ts -min.js -min.mjs -minutesToHours.d.mts -minutesToHours.d.ts -minutesToHours.js -minutesToHours.mjs -minutesToMilliseconds.d.mts -minutesToMilliseconds.d.ts -minutesToMilliseconds.js -minutesToMilliseconds.mjs -minutesToSeconds.d.mts -minutesToSeconds.d.ts -minutesToSeconds.js -minutesToSeconds.mjs -monthsToQuarters.d.mts -monthsToQuarters.d.ts -monthsToQuarters.js -monthsToQuarters.mjs -monthsToYears.d.mts -monthsToYears.d.ts -monthsToYears.js -monthsToYears.mjs -nextDay.d.mts -nextDay.d.ts -nextDay.js -nextDay.mjs -nextFriday.d.mts -nextFriday.d.ts -nextFriday.js -nextFriday.mjs -nextMonday.d.mts -nextMonday.d.ts -nextMonday.js -nextMonday.mjs -nextSaturday.d.mts -nextSaturday.d.ts -nextSaturday.js -nextSaturday.mjs -nextSunday.d.mts -nextSunday.d.ts -nextSunday.js -nextSunday.mjs -nextThursday.d.mts -nextThursday.d.ts -nextThursday.js -nextThursday.mjs -nextTuesday.d.mts -nextTuesday.d.ts -nextTuesday.js -nextTuesday.mjs -nextWednesday.d.mts -nextWednesday.d.ts -nextWednesday.js -nextWednesday.mjs -package.json -parse -parse.d.mts -parse.d.ts -parse.js -parse.mjs -parseISO.d.mts -parseISO.d.ts -parseISO.js -parseISO.mjs -parseJSON.d.mts -parseJSON.d.ts -parseJSON.js -parseJSON.mjs -previousDay.d.mts -previousDay.d.ts -previousDay.js -previousDay.mjs -previousFriday.d.mts -previousFriday.d.ts -previousFriday.js -previousFriday.mjs -previousMonday.d.mts -previousMonday.d.ts -previousMonday.js -previousMonday.mjs -previousSaturday.d.mts -previousSaturday.d.ts -previousSaturday.js -previousSaturday.mjs -previousSunday.d.mts -previousSunday.d.ts -previousSunday.js -previousSunday.mjs -previousThursday.d.mts -previousThursday.d.ts -previousThursday.js -previousThursday.mjs -previousTuesday.d.mts -previousTuesday.d.ts -previousTuesday.js -previousTuesday.mjs -previousWednesday.d.mts -previousWednesday.d.ts -previousWednesday.js -previousWednesday.mjs -quartersToMonths.d.mts -quartersToMonths.d.ts -quartersToMonths.js -quartersToMonths.mjs -quartersToYears.d.mts -quartersToYears.d.ts -quartersToYears.js -quartersToYears.mjs -roundToNearestHours.d.mts -roundToNearestHours.d.ts -roundToNearestHours.js -roundToNearestHours.mjs -roundToNearestMinutes.d.mts -roundToNearestMinutes.d.ts -roundToNearestMinutes.js -roundToNearestMinutes.mjs -secondsToHours.d.mts -secondsToHours.d.ts -secondsToHours.js -secondsToHours.mjs -secondsToMilliseconds.d.mts -secondsToMilliseconds.d.ts -secondsToMilliseconds.js -secondsToMilliseconds.mjs -secondsToMinutes.d.mts -secondsToMinutes.d.ts -secondsToMinutes.js -secondsToMinutes.mjs -set.d.mts -set.d.ts -set.js -set.mjs -setDate.d.mts -setDate.d.ts -setDate.js -setDate.mjs -setDay.d.mts -setDay.d.ts -setDay.js -setDay.mjs -setDayOfYear.d.mts -setDayOfYear.d.ts -setDayOfYear.js -setDayOfYear.mjs -setDefaultOptions.d.mts -setDefaultOptions.d.ts -setDefaultOptions.js -setDefaultOptions.mjs -setHours.d.mts -setHours.d.ts -setHours.js -setHours.mjs -setISODay.d.mts -setISODay.d.ts -setISODay.js -setISODay.mjs -setISOWeek.d.mts -setISOWeek.d.ts -setISOWeek.js -setISOWeek.mjs -setISOWeekYear.d.mts -setISOWeekYear.d.ts -setISOWeekYear.js -setISOWeekYear.mjs -setMilliseconds.d.mts -setMilliseconds.d.ts -setMilliseconds.js -setMilliseconds.mjs -setMinutes.d.mts -setMinutes.d.ts -setMinutes.js -setMinutes.mjs -setMonth.d.mts -setMonth.d.ts -setMonth.js -setMonth.mjs -setQuarter.d.mts -setQuarter.d.ts -setQuarter.js -setQuarter.mjs -setSeconds.d.mts -setSeconds.d.ts -setSeconds.js -setSeconds.mjs -setWeek.d.mts -setWeek.d.ts -setWeek.js -setWeek.mjs -setWeekYear.d.mts -setWeekYear.d.ts -setWeekYear.js -setWeekYear.mjs -setYear.d.mts -setYear.d.ts -setYear.js -setYear.mjs -startOfDay.d.mts -startOfDay.d.ts -startOfDay.js -startOfDay.mjs -startOfDecade.d.mts -startOfDecade.d.ts -startOfDecade.js -startOfDecade.mjs -startOfHour.d.mts -startOfHour.d.ts -startOfHour.js -startOfHour.mjs -startOfISOWeek.d.mts -startOfISOWeek.d.ts -startOfISOWeek.js -startOfISOWeek.mjs -startOfISOWeekYear.d.mts -startOfISOWeekYear.d.ts -startOfISOWeekYear.js -startOfISOWeekYear.mjs -startOfMinute.d.mts -startOfMinute.d.ts -startOfMinute.js -startOfMinute.mjs -startOfMonth.d.mts -startOfMonth.d.ts -startOfMonth.js -startOfMonth.mjs -startOfQuarter.d.mts -startOfQuarter.d.ts -startOfQuarter.js -startOfQuarter.mjs -startOfSecond.d.mts -startOfSecond.d.ts -startOfSecond.js -startOfSecond.mjs -startOfToday.d.mts -startOfToday.d.ts -startOfToday.js -startOfToday.mjs -startOfTomorrow.d.mts -startOfTomorrow.d.ts -startOfTomorrow.js -startOfTomorrow.mjs -startOfWeek.d.mts -startOfWeek.d.ts -startOfWeek.js -startOfWeek.mjs -startOfWeekYear.d.mts -startOfWeekYear.d.ts -startOfWeekYear.js -startOfWeekYear.mjs -startOfYear.d.mts -startOfYear.d.ts -startOfYear.js -startOfYear.mjs -startOfYesterday.d.mts -startOfYesterday.d.ts -startOfYesterday.js -startOfYesterday.mjs -sub.d.mts -sub.d.ts -sub.js -sub.mjs -subBusinessDays.d.mts -subBusinessDays.d.ts -subBusinessDays.js -subBusinessDays.mjs -subDays.d.mts -subDays.d.ts -subDays.js -subDays.mjs -subHours.d.mts -subHours.d.ts -subHours.js -subHours.mjs -subISOWeekYears.d.mts -subISOWeekYears.d.ts -subISOWeekYears.js -subISOWeekYears.mjs -subMilliseconds.d.mts -subMilliseconds.d.ts -subMilliseconds.js -subMilliseconds.mjs -subMinutes.d.mts -subMinutes.d.ts -subMinutes.js -subMinutes.mjs -subMonths.d.mts -subMonths.d.ts -subMonths.js -subMonths.mjs -subQuarters.d.mts -subQuarters.d.ts -subQuarters.js -subQuarters.mjs -subSeconds.d.mts -subSeconds.d.ts -subSeconds.js -subSeconds.mjs -subWeeks.d.mts -subWeeks.d.ts -subWeeks.js -subWeeks.mjs -subYears.d.mts -subYears.d.ts -subYears.js -subYears.mjs -toDate.d.mts -toDate.d.ts -toDate.js -toDate.mjs -transpose.d.mts -transpose.d.ts -transpose.js -transpose.mjs -types.d.mts -types.d.ts -types.js -types.mjs -weeksToDays.d.mts -weeksToDays.d.ts -weeksToDays.js -weeksToDays.mjs -yearsToDays.d.mts -yearsToDays.d.ts -yearsToDays.js -yearsToDays.mjs -yearsToMonths.d.mts -yearsToMonths.d.ts -yearsToMonths.js -yearsToMonths.mjs -yearsToQuarters.d.mts -yearsToQuarters.d.ts -yearsToQuarters.js -yearsToQuarters.mjs - -addLeadingZeros.d.mts -addLeadingZeros.d.ts -addLeadingZeros.js -addLeadingZeros.mjs -defaultLocale.d.mts -defaultLocale.d.ts -defaultLocale.js -defaultLocale.mjs -defaultOptions.d.mts -defaultOptions.d.ts -defaultOptions.js -defaultOptions.mjs -format -getRoundingMethod.d.mts -getRoundingMethod.d.ts -getRoundingMethod.js -getRoundingMethod.mjs -getTimezoneOffsetInMilliseconds.d.mts -getTimezoneOffsetInMilliseconds.d.ts -getTimezoneOffsetInMilliseconds.js -getTimezoneOffsetInMilliseconds.mjs -protectedTokens.d.mts -protectedTokens.d.ts -protectedTokens.js -protectedTokens.mjs -test.d.mts -test.d.ts -test.js -test.mjs - -formatters.d.mts -formatters.d.ts -formatters.js -formatters.mjs -lightFormatters.d.mts -lightFormatters.d.ts -lightFormatters.js -lightFormatters.mjs -longFormatters.d.mts -longFormatters.d.ts -longFormatters.js -longFormatters.mjs - -cdn.md -config.d.ts -config.js -fp.md -gettingStarted.md -i18n.md -i18nContributionGuide.md -logo.svg -logotype.svg -release.md -timeZones.md -unicodeTokens.md -webpack.md - -_lib -add.d.mts -add.d.ts -add.js -add.mjs -addBusinessDays.d.mts -addBusinessDays.d.ts -addBusinessDays.js -addBusinessDays.mjs -addDays.d.mts -addDays.d.ts -addDays.js -addDays.mjs -addHours.d.mts -addHours.d.ts -addHours.js -addHours.mjs -addISOWeekYears.d.mts -addISOWeekYears.d.ts -addISOWeekYears.js -addISOWeekYears.mjs -addMilliseconds.d.mts -addMilliseconds.d.ts -addMilliseconds.js -addMilliseconds.mjs -addMinutes.d.mts -addMinutes.d.ts -addMinutes.js -addMinutes.mjs -addMonths.d.mts -addMonths.d.ts -addMonths.js -addMonths.mjs -addQuarters.d.mts -addQuarters.d.ts -addQuarters.js -addQuarters.mjs -addSeconds.d.mts -addSeconds.d.ts -addSeconds.js -addSeconds.mjs -addWeeks.d.mts -addWeeks.d.ts -addWeeks.js -addWeeks.mjs -addYears.d.mts -addYears.d.ts -addYears.js -addYears.mjs -areIntervalsOverlapping.d.mts -areIntervalsOverlapping.d.ts -areIntervalsOverlapping.js -areIntervalsOverlapping.mjs -areIntervalsOverlappingWithOptions.d.mts -areIntervalsOverlappingWithOptions.d.ts -areIntervalsOverlappingWithOptions.js -areIntervalsOverlappingWithOptions.mjs -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map -clamp.d.mts -clamp.d.ts -clamp.js -clamp.mjs -closestIndexTo.d.mts -closestIndexTo.d.ts -closestIndexTo.js -closestIndexTo.mjs -closestTo.d.mts -closestTo.d.ts -closestTo.js -closestTo.mjs -compareAsc.d.mts -compareAsc.d.ts -compareAsc.js -compareAsc.mjs -compareDesc.d.mts -compareDesc.d.ts -compareDesc.js -compareDesc.mjs -constructFrom.d.mts -constructFrom.d.ts -constructFrom.js -constructFrom.mjs -daysToWeeks.d.mts -daysToWeeks.d.ts -daysToWeeks.js -daysToWeeks.mjs -differenceInBusinessDays.d.mts -differenceInBusinessDays.d.ts -differenceInBusinessDays.js -differenceInBusinessDays.mjs -differenceInCalendarDays.d.mts -differenceInCalendarDays.d.ts -differenceInCalendarDays.js -differenceInCalendarDays.mjs -differenceInCalendarISOWeekYears.d.mts -differenceInCalendarISOWeekYears.d.ts -differenceInCalendarISOWeekYears.js -differenceInCalendarISOWeekYears.mjs -differenceInCalendarISOWeeks.d.mts -differenceInCalendarISOWeeks.d.ts -differenceInCalendarISOWeeks.js -differenceInCalendarISOWeeks.mjs -differenceInCalendarMonths.d.mts -differenceInCalendarMonths.d.ts -differenceInCalendarMonths.js -differenceInCalendarMonths.mjs -differenceInCalendarQuarters.d.mts -differenceInCalendarQuarters.d.ts -differenceInCalendarQuarters.js -differenceInCalendarQuarters.mjs -differenceInCalendarWeeks.d.mts -differenceInCalendarWeeks.d.ts -differenceInCalendarWeeks.js -differenceInCalendarWeeks.mjs -differenceInCalendarWeeksWithOptions.d.mts -differenceInCalendarWeeksWithOptions.d.ts -differenceInCalendarWeeksWithOptions.js -differenceInCalendarWeeksWithOptions.mjs -differenceInCalendarYears.d.mts -differenceInCalendarYears.d.ts -differenceInCalendarYears.js -differenceInCalendarYears.mjs -differenceInDays.d.mts -differenceInDays.d.ts -differenceInDays.js -differenceInDays.mjs -differenceInHours.d.mts -differenceInHours.d.ts -differenceInHours.js -differenceInHours.mjs -differenceInHoursWithOptions.d.mts -differenceInHoursWithOptions.d.ts -differenceInHoursWithOptions.js -differenceInHoursWithOptions.mjs -differenceInISOWeekYears.d.mts -differenceInISOWeekYears.d.ts -differenceInISOWeekYears.js -differenceInISOWeekYears.mjs -differenceInMilliseconds.d.mts -differenceInMilliseconds.d.ts -differenceInMilliseconds.js -differenceInMilliseconds.mjs -differenceInMinutes.d.mts -differenceInMinutes.d.ts -differenceInMinutes.js -differenceInMinutes.mjs -differenceInMinutesWithOptions.d.mts -differenceInMinutesWithOptions.d.ts -differenceInMinutesWithOptions.js -differenceInMinutesWithOptions.mjs -differenceInMonths.d.mts -differenceInMonths.d.ts -differenceInMonths.js -differenceInMonths.mjs -differenceInQuarters.d.mts -differenceInQuarters.d.ts -differenceInQuarters.js -differenceInQuarters.mjs -differenceInQuartersWithOptions.d.mts -differenceInQuartersWithOptions.d.ts -differenceInQuartersWithOptions.js -differenceInQuartersWithOptions.mjs -differenceInSeconds.d.mts -differenceInSeconds.d.ts -differenceInSeconds.js -differenceInSeconds.mjs -differenceInSecondsWithOptions.d.mts -differenceInSecondsWithOptions.d.ts -differenceInSecondsWithOptions.js -differenceInSecondsWithOptions.mjs -differenceInWeeks.d.mts -differenceInWeeks.d.ts -differenceInWeeks.js -differenceInWeeks.mjs -differenceInWeeksWithOptions.d.mts -differenceInWeeksWithOptions.d.ts -differenceInWeeksWithOptions.js -differenceInWeeksWithOptions.mjs -differenceInYears.d.mts -differenceInYears.d.ts -differenceInYears.js -differenceInYears.mjs -eachDayOfInterval.d.mts -eachDayOfInterval.d.ts -eachDayOfInterval.js -eachDayOfInterval.mjs -eachDayOfIntervalWithOptions.d.mts -eachDayOfIntervalWithOptions.d.ts -eachDayOfIntervalWithOptions.js -eachDayOfIntervalWithOptions.mjs -eachHourOfInterval.d.mts -eachHourOfInterval.d.ts -eachHourOfInterval.js -eachHourOfInterval.mjs -eachHourOfIntervalWithOptions.d.mts -eachHourOfIntervalWithOptions.d.ts -eachHourOfIntervalWithOptions.js -eachHourOfIntervalWithOptions.mjs -eachMinuteOfInterval.d.mts -eachMinuteOfInterval.d.ts -eachMinuteOfInterval.js -eachMinuteOfInterval.mjs -eachMinuteOfIntervalWithOptions.d.mts -eachMinuteOfIntervalWithOptions.d.ts -eachMinuteOfIntervalWithOptions.js -eachMinuteOfIntervalWithOptions.mjs -eachMonthOfInterval.d.mts -eachMonthOfInterval.d.ts -eachMonthOfInterval.js -eachMonthOfInterval.mjs -eachMonthOfIntervalWithOptions.d.mts -eachMonthOfIntervalWithOptions.d.ts -eachMonthOfIntervalWithOptions.js -eachMonthOfIntervalWithOptions.mjs -eachQuarterOfInterval.d.mts -eachQuarterOfInterval.d.ts -eachQuarterOfInterval.js -eachQuarterOfInterval.mjs -eachQuarterOfIntervalWithOptions.d.mts -eachQuarterOfIntervalWithOptions.d.ts -eachQuarterOfIntervalWithOptions.js -eachQuarterOfIntervalWithOptions.mjs -eachWeekOfInterval.d.mts -eachWeekOfInterval.d.ts -eachWeekOfInterval.js -eachWeekOfInterval.mjs -eachWeekOfIntervalWithOptions.d.mts -eachWeekOfIntervalWithOptions.d.ts -eachWeekOfIntervalWithOptions.js -eachWeekOfIntervalWithOptions.mjs -eachWeekendOfInterval.d.mts -eachWeekendOfInterval.d.ts -eachWeekendOfInterval.js -eachWeekendOfInterval.mjs -eachWeekendOfMonth.d.mts -eachWeekendOfMonth.d.ts -eachWeekendOfMonth.js -eachWeekendOfMonth.mjs -eachWeekendOfYear.d.mts -eachWeekendOfYear.d.ts -eachWeekendOfYear.js -eachWeekendOfYear.mjs -eachYearOfInterval.d.mts -eachYearOfInterval.d.ts -eachYearOfInterval.js -eachYearOfInterval.mjs -eachYearOfIntervalWithOptions.d.mts -eachYearOfIntervalWithOptions.d.ts -eachYearOfIntervalWithOptions.js -eachYearOfIntervalWithOptions.mjs -endOfDay.d.mts -endOfDay.d.ts -endOfDay.js -endOfDay.mjs -endOfDecade.d.mts -endOfDecade.d.ts -endOfDecade.js -endOfDecade.mjs -endOfHour.d.mts -endOfHour.d.ts -endOfHour.js -endOfHour.mjs -endOfISOWeek.d.mts -endOfISOWeek.d.ts -endOfISOWeek.js -endOfISOWeek.mjs -endOfISOWeekYear.d.mts -endOfISOWeekYear.d.ts -endOfISOWeekYear.js -endOfISOWeekYear.mjs -endOfMinute.d.mts -endOfMinute.d.ts -endOfMinute.js -endOfMinute.mjs -endOfMonth.d.mts -endOfMonth.d.ts -endOfMonth.js -endOfMonth.mjs -endOfQuarter.d.mts -endOfQuarter.d.ts -endOfQuarter.js -endOfQuarter.mjs -endOfSecond.d.mts -endOfSecond.d.ts -endOfSecond.js -endOfSecond.mjs -endOfWeek.d.mts -endOfWeek.d.ts -endOfWeek.js -endOfWeek.mjs -endOfWeekWithOptions.d.mts -endOfWeekWithOptions.d.ts -endOfWeekWithOptions.js -endOfWeekWithOptions.mjs -endOfYear.d.mts -endOfYear.d.ts -endOfYear.js -endOfYear.mjs -format.d.mts -format.d.ts -format.js -format.mjs -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatDistanceStrict.d.mts -formatDistanceStrict.d.ts -formatDistanceStrict.js -formatDistanceStrict.mjs -formatDistanceStrictWithOptions.d.mts -formatDistanceStrictWithOptions.d.ts -formatDistanceStrictWithOptions.js -formatDistanceStrictWithOptions.mjs -formatDistanceWithOptions.d.mts -formatDistanceWithOptions.d.ts -formatDistanceWithOptions.js -formatDistanceWithOptions.mjs -formatDuration.d.mts -formatDuration.d.ts -formatDuration.js -formatDuration.mjs -formatDurationWithOptions.d.mts -formatDurationWithOptions.d.ts -formatDurationWithOptions.js -formatDurationWithOptions.mjs -formatISO.d.mts -formatISO.d.ts -formatISO.js -formatISO.mjs -formatISO9075.d.mts -formatISO9075.d.ts -formatISO9075.js -formatISO9075.mjs -formatISO9075WithOptions.d.mts -formatISO9075WithOptions.d.ts -formatISO9075WithOptions.js -formatISO9075WithOptions.mjs -formatISODuration.d.mts -formatISODuration.d.ts -formatISODuration.js -formatISODuration.mjs -formatISOWithOptions.d.mts -formatISOWithOptions.d.ts -formatISOWithOptions.js -formatISOWithOptions.mjs -formatRFC3339.d.mts -formatRFC3339.d.ts -formatRFC3339.js -formatRFC3339.mjs -formatRFC3339WithOptions.d.mts -formatRFC3339WithOptions.d.ts -formatRFC3339WithOptions.js -formatRFC3339WithOptions.mjs -formatRFC7231.d.mts -formatRFC7231.d.ts -formatRFC7231.js -formatRFC7231.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -formatRelativeWithOptions.d.mts -formatRelativeWithOptions.d.ts -formatRelativeWithOptions.js -formatRelativeWithOptions.mjs -formatWithOptions.d.mts -formatWithOptions.d.ts -formatWithOptions.js -formatWithOptions.mjs -fromUnixTime.d.mts -fromUnixTime.d.ts -fromUnixTime.js -fromUnixTime.mjs -getDate.d.mts -getDate.d.ts -getDate.js -getDate.mjs -getDay.d.mts -getDay.d.ts -getDay.js -getDay.mjs -getDayOfYear.d.mts -getDayOfYear.d.ts -getDayOfYear.js -getDayOfYear.mjs -getDaysInMonth.d.mts -getDaysInMonth.d.ts -getDaysInMonth.js -getDaysInMonth.mjs -getDaysInYear.d.mts -getDaysInYear.d.ts -getDaysInYear.js -getDaysInYear.mjs -getDecade.d.mts -getDecade.d.ts -getDecade.js -getDecade.mjs -getHours.d.mts -getHours.d.ts -getHours.js -getHours.mjs -getISODay.d.mts -getISODay.d.ts -getISODay.js -getISODay.mjs -getISOWeek.d.mts -getISOWeek.d.ts -getISOWeek.js -getISOWeek.mjs -getISOWeekYear.d.mts -getISOWeekYear.d.ts -getISOWeekYear.js -getISOWeekYear.mjs -getISOWeeksInYear.d.mts -getISOWeeksInYear.d.ts -getISOWeeksInYear.js -getISOWeeksInYear.mjs -getMilliseconds.d.mts -getMilliseconds.d.ts -getMilliseconds.js -getMilliseconds.mjs -getMinutes.d.mts -getMinutes.d.ts -getMinutes.js -getMinutes.mjs -getMonth.d.mts -getMonth.d.ts -getMonth.js -getMonth.mjs -getOverlappingDaysInIntervals.d.mts -getOverlappingDaysInIntervals.d.ts -getOverlappingDaysInIntervals.js -getOverlappingDaysInIntervals.mjs -getQuarter.d.mts -getQuarter.d.ts -getQuarter.js -getQuarter.mjs -getSeconds.d.mts -getSeconds.d.ts -getSeconds.js -getSeconds.mjs -getTime.d.mts -getTime.d.ts -getTime.js -getTime.mjs -getUnixTime.d.mts -getUnixTime.d.ts -getUnixTime.js -getUnixTime.mjs -getWeek.d.mts -getWeek.d.ts -getWeek.js -getWeek.mjs -getWeekOfMonth.d.mts -getWeekOfMonth.d.ts -getWeekOfMonth.js -getWeekOfMonth.mjs -getWeekOfMonthWithOptions.d.mts -getWeekOfMonthWithOptions.d.ts -getWeekOfMonthWithOptions.js -getWeekOfMonthWithOptions.mjs -getWeekWithOptions.d.mts -getWeekWithOptions.d.ts -getWeekWithOptions.js -getWeekWithOptions.mjs -getWeekYear.d.mts -getWeekYear.d.ts -getWeekYear.js -getWeekYear.mjs -getWeekYearWithOptions.d.mts -getWeekYearWithOptions.d.ts -getWeekYearWithOptions.js -getWeekYearWithOptions.mjs -getWeeksInMonth.d.mts -getWeeksInMonth.d.ts -getWeeksInMonth.js -getWeeksInMonth.mjs -getWeeksInMonthWithOptions.d.mts -getWeeksInMonthWithOptions.d.ts -getWeeksInMonthWithOptions.js -getWeeksInMonthWithOptions.mjs -getYear.d.mts -getYear.d.ts -getYear.js -getYear.mjs -hoursToMilliseconds.d.mts -hoursToMilliseconds.d.ts -hoursToMilliseconds.js -hoursToMilliseconds.mjs -hoursToMinutes.d.mts -hoursToMinutes.d.ts -hoursToMinutes.js -hoursToMinutes.mjs -hoursToSeconds.d.mts -hoursToSeconds.d.ts -hoursToSeconds.js -hoursToSeconds.mjs -interval.d.mts -interval.d.ts -interval.js -interval.mjs -intervalToDuration.d.mts -intervalToDuration.d.ts -intervalToDuration.js -intervalToDuration.mjs -intervalWithOptions.d.mts -intervalWithOptions.d.ts -intervalWithOptions.js -intervalWithOptions.mjs -intlFormat.d.mts -intlFormat.d.ts -intlFormat.js -intlFormat.mjs -intlFormatDistance.d.mts -intlFormatDistance.d.ts -intlFormatDistance.js -intlFormatDistance.mjs -intlFormatDistanceWithOptions.d.mts -intlFormatDistanceWithOptions.d.ts -intlFormatDistanceWithOptions.js -intlFormatDistanceWithOptions.mjs -isAfter.d.mts -isAfter.d.ts -isAfter.js -isAfter.mjs -isBefore.d.mts -isBefore.d.ts -isBefore.js -isBefore.mjs -isDate.d.mts -isDate.d.ts -isDate.js -isDate.mjs -isEqual.d.mts -isEqual.d.ts -isEqual.js -isEqual.mjs -isExists.d.mts -isExists.d.ts -isExists.js -isExists.mjs -isFirstDayOfMonth.d.mts -isFirstDayOfMonth.d.ts -isFirstDayOfMonth.js -isFirstDayOfMonth.mjs -isFriday.d.mts -isFriday.d.ts -isFriday.js -isFriday.mjs -isLastDayOfMonth.d.mts -isLastDayOfMonth.d.ts -isLastDayOfMonth.js -isLastDayOfMonth.mjs -isLeapYear.d.mts -isLeapYear.d.ts -isLeapYear.js -isLeapYear.mjs -isMatch.d.mts -isMatch.d.ts -isMatch.js -isMatch.mjs -isMatchWithOptions.d.mts -isMatchWithOptions.d.ts -isMatchWithOptions.js -isMatchWithOptions.mjs -isMonday.d.mts -isMonday.d.ts -isMonday.js -isMonday.mjs -isSameDay.d.mts -isSameDay.d.ts -isSameDay.js -isSameDay.mjs -isSameHour.d.mts -isSameHour.d.ts -isSameHour.js -isSameHour.mjs -isSameISOWeek.d.mts -isSameISOWeek.d.ts -isSameISOWeek.js -isSameISOWeek.mjs -isSameISOWeekYear.d.mts -isSameISOWeekYear.d.ts -isSameISOWeekYear.js -isSameISOWeekYear.mjs -isSameMinute.d.mts -isSameMinute.d.ts -isSameMinute.js -isSameMinute.mjs -isSameMonth.d.mts -isSameMonth.d.ts -isSameMonth.js -isSameMonth.mjs -isSameQuarter.d.mts -isSameQuarter.d.ts -isSameQuarter.js -isSameQuarter.mjs -isSameSecond.d.mts -isSameSecond.d.ts -isSameSecond.js -isSameSecond.mjs -isSameWeek.d.mts -isSameWeek.d.ts -isSameWeek.js -isSameWeek.mjs -isSameWeekWithOptions.d.mts -isSameWeekWithOptions.d.ts -isSameWeekWithOptions.js -isSameWeekWithOptions.mjs -isSameYear.d.mts -isSameYear.d.ts -isSameYear.js -isSameYear.mjs -isSaturday.d.mts -isSaturday.d.ts -isSaturday.js -isSaturday.mjs -isSunday.d.mts -isSunday.d.ts -isSunday.js -isSunday.mjs -isThursday.d.mts -isThursday.d.ts -isThursday.js -isThursday.mjs -isTuesday.d.mts -isTuesday.d.ts -isTuesday.js -isTuesday.mjs -isValid.d.mts -isValid.d.ts -isValid.js -isValid.mjs -isWednesday.d.mts -isWednesday.d.ts -isWednesday.js -isWednesday.mjs -isWeekend.d.mts -isWeekend.d.ts -isWeekend.js -isWeekend.mjs -isWithinInterval.d.mts -isWithinInterval.d.ts -isWithinInterval.js -isWithinInterval.mjs -lastDayOfDecade.d.mts -lastDayOfDecade.d.ts -lastDayOfDecade.js -lastDayOfDecade.mjs -lastDayOfISOWeek.d.mts -lastDayOfISOWeek.d.ts -lastDayOfISOWeek.js -lastDayOfISOWeek.mjs -lastDayOfISOWeekYear.d.mts -lastDayOfISOWeekYear.d.ts -lastDayOfISOWeekYear.js -lastDayOfISOWeekYear.mjs -lastDayOfMonth.d.mts -lastDayOfMonth.d.ts -lastDayOfMonth.js -lastDayOfMonth.mjs -lastDayOfQuarter.d.mts -lastDayOfQuarter.d.ts -lastDayOfQuarter.js -lastDayOfQuarter.mjs -lastDayOfWeek.d.mts -lastDayOfWeek.d.ts -lastDayOfWeek.js -lastDayOfWeek.mjs -lastDayOfWeekWithOptions.d.mts -lastDayOfWeekWithOptions.d.ts -lastDayOfWeekWithOptions.js -lastDayOfWeekWithOptions.mjs -lastDayOfYear.d.mts -lastDayOfYear.d.ts -lastDayOfYear.js -lastDayOfYear.mjs -lightFormat.d.mts -lightFormat.d.ts -lightFormat.js -lightFormat.mjs -max.d.mts -max.d.ts -max.js -max.mjs -milliseconds.d.mts -milliseconds.d.ts -milliseconds.js -milliseconds.mjs -millisecondsToHours.d.mts -millisecondsToHours.d.ts -millisecondsToHours.js -millisecondsToHours.mjs -millisecondsToMinutes.d.mts -millisecondsToMinutes.d.ts -millisecondsToMinutes.js -millisecondsToMinutes.mjs -millisecondsToSeconds.d.mts -millisecondsToSeconds.d.ts -millisecondsToSeconds.js -millisecondsToSeconds.mjs -min.d.mts -min.d.ts -min.js -min.mjs -minutesToHours.d.mts -minutesToHours.d.ts -minutesToHours.js -minutesToHours.mjs -minutesToMilliseconds.d.mts -minutesToMilliseconds.d.ts -minutesToMilliseconds.js -minutesToMilliseconds.mjs -minutesToSeconds.d.mts -minutesToSeconds.d.ts -minutesToSeconds.js -minutesToSeconds.mjs -monthsToQuarters.d.mts -monthsToQuarters.d.ts -monthsToQuarters.js -monthsToQuarters.mjs -monthsToYears.d.mts -monthsToYears.d.ts -monthsToYears.js -monthsToYears.mjs -nextDay.d.mts -nextDay.d.ts -nextDay.js -nextDay.mjs -nextFriday.d.mts -nextFriday.d.ts -nextFriday.js -nextFriday.mjs -nextMonday.d.mts -nextMonday.d.ts -nextMonday.js -nextMonday.mjs -nextSaturday.d.mts -nextSaturday.d.ts -nextSaturday.js -nextSaturday.mjs -nextSunday.d.mts -nextSunday.d.ts -nextSunday.js -nextSunday.mjs -nextThursday.d.mts -nextThursday.d.ts -nextThursday.js -nextThursday.mjs -nextTuesday.d.mts -nextTuesday.d.ts -nextTuesday.js -nextTuesday.mjs -nextWednesday.d.mts -nextWednesday.d.ts -nextWednesday.js -nextWednesday.mjs -parse.d.mts -parse.d.ts -parse.js -parse.mjs -parseISO.d.mts -parseISO.d.ts -parseISO.js -parseISO.mjs -parseISOWithOptions.d.mts -parseISOWithOptions.d.ts -parseISOWithOptions.js -parseISOWithOptions.mjs -parseJSON.d.mts -parseJSON.d.ts -parseJSON.js -parseJSON.mjs -parseWithOptions.d.mts -parseWithOptions.d.ts -parseWithOptions.js -parseWithOptions.mjs -previousDay.d.mts -previousDay.d.ts -previousDay.js -previousDay.mjs -previousFriday.d.mts -previousFriday.d.ts -previousFriday.js -previousFriday.mjs -previousMonday.d.mts -previousMonday.d.ts -previousMonday.js -previousMonday.mjs -previousSaturday.d.mts -previousSaturday.d.ts -previousSaturday.js -previousSaturday.mjs -previousSunday.d.mts -previousSunday.d.ts -previousSunday.js -previousSunday.mjs -previousThursday.d.mts -previousThursday.d.ts -previousThursday.js -previousThursday.mjs -previousTuesday.d.mts -previousTuesday.d.ts -previousTuesday.js -previousTuesday.mjs -previousWednesday.d.mts -previousWednesday.d.ts -previousWednesday.js -previousWednesday.mjs -quartersToMonths.d.mts -quartersToMonths.d.ts -quartersToMonths.js -quartersToMonths.mjs -quartersToYears.d.mts -quartersToYears.d.ts -quartersToYears.js -quartersToYears.mjs -roundToNearestHours.d.mts -roundToNearestHours.d.ts -roundToNearestHours.js -roundToNearestHours.mjs -roundToNearestHoursWithOptions.d.mts -roundToNearestHoursWithOptions.d.ts -roundToNearestHoursWithOptions.js -roundToNearestHoursWithOptions.mjs -roundToNearestMinutes.d.mts -roundToNearestMinutes.d.ts -roundToNearestMinutes.js -roundToNearestMinutes.mjs -roundToNearestMinutesWithOptions.d.mts -roundToNearestMinutesWithOptions.d.ts -roundToNearestMinutesWithOptions.js -roundToNearestMinutesWithOptions.mjs -secondsToHours.d.mts -secondsToHours.d.ts -secondsToHours.js -secondsToHours.mjs -secondsToMilliseconds.d.mts -secondsToMilliseconds.d.ts -secondsToMilliseconds.js -secondsToMilliseconds.mjs -secondsToMinutes.d.mts -secondsToMinutes.d.ts -secondsToMinutes.js -secondsToMinutes.mjs -set.d.mts -set.d.ts -set.js -set.mjs -setDate.d.mts -setDate.d.ts -setDate.js -setDate.mjs -setDay.d.mts -setDay.d.ts -setDay.js -setDay.mjs -setDayOfYear.d.mts -setDayOfYear.d.ts -setDayOfYear.js -setDayOfYear.mjs -setDayWithOptions.d.mts -setDayWithOptions.d.ts -setDayWithOptions.js -setDayWithOptions.mjs -setHours.d.mts -setHours.d.ts -setHours.js -setHours.mjs -setISODay.d.mts -setISODay.d.ts -setISODay.js -setISODay.mjs -setISOWeek.d.mts -setISOWeek.d.ts -setISOWeek.js -setISOWeek.mjs -setISOWeekYear.d.mts -setISOWeekYear.d.ts -setISOWeekYear.js -setISOWeekYear.mjs -setMilliseconds.d.mts -setMilliseconds.d.ts -setMilliseconds.js -setMilliseconds.mjs -setMinutes.d.mts -setMinutes.d.ts -setMinutes.js -setMinutes.mjs -setMonth.d.mts -setMonth.d.ts -setMonth.js -setMonth.mjs -setQuarter.d.mts -setQuarter.d.ts -setQuarter.js -setQuarter.mjs -setSeconds.d.mts -setSeconds.d.ts -setSeconds.js -setSeconds.mjs -setWeek.d.mts -setWeek.d.ts -setWeek.js -setWeek.mjs -setWeekWithOptions.d.mts -setWeekWithOptions.d.ts -setWeekWithOptions.js -setWeekWithOptions.mjs -setWeekYear.d.mts -setWeekYear.d.ts -setWeekYear.js -setWeekYear.mjs -setWeekYearWithOptions.d.mts -setWeekYearWithOptions.d.ts -setWeekYearWithOptions.js -setWeekYearWithOptions.mjs -setYear.d.mts -setYear.d.ts -setYear.js -setYear.mjs -startOfDay.d.mts -startOfDay.d.ts -startOfDay.js -startOfDay.mjs -startOfDecade.d.mts -startOfDecade.d.ts -startOfDecade.js -startOfDecade.mjs -startOfHour.d.mts -startOfHour.d.ts -startOfHour.js -startOfHour.mjs -startOfISOWeek.d.mts -startOfISOWeek.d.ts -startOfISOWeek.js -startOfISOWeek.mjs -startOfISOWeekYear.d.mts -startOfISOWeekYear.d.ts -startOfISOWeekYear.js -startOfISOWeekYear.mjs -startOfMinute.d.mts -startOfMinute.d.ts -startOfMinute.js -startOfMinute.mjs -startOfMonth.d.mts -startOfMonth.d.ts -startOfMonth.js -startOfMonth.mjs -startOfQuarter.d.mts -startOfQuarter.d.ts -startOfQuarter.js -startOfQuarter.mjs -startOfSecond.d.mts -startOfSecond.d.ts -startOfSecond.js -startOfSecond.mjs -startOfWeek.d.mts -startOfWeek.d.ts -startOfWeek.js -startOfWeek.mjs -startOfWeekWithOptions.d.mts -startOfWeekWithOptions.d.ts -startOfWeekWithOptions.js -startOfWeekWithOptions.mjs -startOfWeekYear.d.mts -startOfWeekYear.d.ts -startOfWeekYear.js -startOfWeekYear.mjs -startOfWeekYearWithOptions.d.mts -startOfWeekYearWithOptions.d.ts -startOfWeekYearWithOptions.js -startOfWeekYearWithOptions.mjs -startOfYear.d.mts -startOfYear.d.ts -startOfYear.js -startOfYear.mjs -sub.d.mts -sub.d.ts -sub.js -sub.mjs -subBusinessDays.d.mts -subBusinessDays.d.ts -subBusinessDays.js -subBusinessDays.mjs -subDays.d.mts -subDays.d.ts -subDays.js -subDays.mjs -subHours.d.mts -subHours.d.ts -subHours.js -subHours.mjs -subISOWeekYears.d.mts -subISOWeekYears.d.ts -subISOWeekYears.js -subISOWeekYears.mjs -subMilliseconds.d.mts -subMilliseconds.d.ts -subMilliseconds.js -subMilliseconds.mjs -subMinutes.d.mts -subMinutes.d.ts -subMinutes.js -subMinutes.mjs -subMonths.d.mts -subMonths.d.ts -subMonths.js -subMonths.mjs -subQuarters.d.mts -subQuarters.d.ts -subQuarters.js -subQuarters.mjs -subSeconds.d.mts -subSeconds.d.ts -subSeconds.js -subSeconds.mjs -subWeeks.d.mts -subWeeks.d.ts -subWeeks.js -subWeeks.mjs -subYears.d.mts -subYears.d.ts -subYears.js -subYears.mjs -toDate.d.mts -toDate.d.ts -toDate.js -toDate.mjs -transpose.d.mts -transpose.d.ts -transpose.js -transpose.mjs -types.d.mts -types.d.ts -types.js -types.mjs -weeksToDays.d.mts -weeksToDays.d.ts -weeksToDays.js -weeksToDays.mjs -yearsToDays.d.mts -yearsToDays.d.ts -yearsToDays.js -yearsToDays.mjs -yearsToMonths.d.mts -yearsToMonths.d.ts -yearsToMonths.js -yearsToMonths.mjs -yearsToQuarters.d.mts -yearsToQuarters.d.ts -yearsToQuarters.js -yearsToQuarters.mjs - -convertToFP.d.mts -convertToFP.d.ts -convertToFP.js -convertToFP.mjs - -_lib -af -af.d.mts -af.d.ts -af.js -af.mjs -ar -ar-DZ -ar-DZ.d.mts -ar-DZ.d.ts -ar-DZ.js -ar-DZ.mjs -ar-EG -ar-EG.d.mts -ar-EG.d.ts -ar-EG.js -ar-EG.mjs -ar-MA -ar-MA.d.mts -ar-MA.d.ts -ar-MA.js -ar-MA.mjs -ar-SA -ar-SA.d.mts -ar-SA.d.ts -ar-SA.js -ar-SA.mjs -ar-TN -ar-TN.d.mts -ar-TN.d.ts -ar-TN.js -ar-TN.mjs -ar.d.mts -ar.d.ts -ar.js -ar.mjs -az -az.d.mts -az.d.ts -az.js -az.mjs -be -be-tarask -be-tarask.d.mts -be-tarask.d.ts -be-tarask.js -be-tarask.mjs -be.d.mts -be.d.ts -be.js -be.mjs -bg -bg.d.mts -bg.d.ts -bg.js -bg.mjs -bn -bn.d.mts -bn.d.ts -bn.js -bn.mjs -bs -bs.d.mts -bs.d.ts -bs.js -bs.mjs -ca -ca.d.mts -ca.d.ts -ca.js -ca.mjs -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map -ckb -ckb.d.mts -ckb.d.ts -ckb.js -ckb.mjs -cs -cs.d.mts -cs.d.ts -cs.js -cs.mjs -cy -cy.d.mts -cy.d.ts -cy.js -cy.mjs -da -da.d.mts -da.d.ts -da.js -da.mjs -de -de-AT -de-AT.d.mts -de-AT.d.ts -de-AT.js -de-AT.mjs -de.d.mts -de.d.ts -de.js -de.mjs -el -el.d.mts -el.d.ts -el.js -el.mjs -en-AU -en-AU.d.mts -en-AU.d.ts -en-AU.js -en-AU.mjs -en-CA -en-CA.d.mts -en-CA.d.ts -en-CA.js -en-CA.mjs -en-GB -en-GB.d.mts -en-GB.d.ts -en-GB.js -en-GB.mjs -en-IE -en-IE.d.mts -en-IE.d.ts -en-IE.js -en-IE.mjs -en-IN -en-IN.d.mts -en-IN.d.ts -en-IN.js -en-IN.mjs -en-NZ -en-NZ.d.mts -en-NZ.d.ts -en-NZ.js -en-NZ.mjs -en-US -en-US.d.mts -en-US.d.ts -en-US.js -en-US.mjs -en-ZA -en-ZA.d.mts -en-ZA.d.ts -en-ZA.js -en-ZA.mjs -eo -eo.d.mts -eo.d.ts -eo.js -eo.mjs -es -es.d.mts -es.d.ts -es.js -es.mjs -et -et.d.mts -et.d.ts -et.js -et.mjs -eu -eu.d.mts -eu.d.ts -eu.js -eu.mjs -fa-IR -fa-IR.d.mts -fa-IR.d.ts -fa-IR.js -fa-IR.mjs -fi -fi.d.mts -fi.d.ts -fi.js -fi.mjs -fr -fr-CA -fr-CA.d.mts -fr-CA.d.ts -fr-CA.js -fr-CA.mjs -fr-CH -fr-CH.d.mts -fr-CH.d.ts -fr-CH.js -fr-CH.mjs -fr.d.mts -fr.d.ts -fr.js -fr.mjs -fy -fy.d.mts -fy.d.ts -fy.js -fy.mjs -gd -gd.d.mts -gd.d.ts -gd.js -gd.mjs -gl -gl.d.mts -gl.d.ts -gl.js -gl.mjs -gu -gu.d.mts -gu.d.ts -gu.js -gu.mjs -he -he.d.mts -he.d.ts -he.js -he.mjs -hi -hi.d.mts -hi.d.ts -hi.js -hi.mjs -hr -hr.d.mts -hr.d.ts -hr.js -hr.mjs -ht -ht.d.mts -ht.d.ts -ht.js -ht.mjs -hu -hu.d.mts -hu.d.ts -hu.js -hu.mjs -hy -hy.d.mts -hy.d.ts -hy.js -hy.mjs -id -id.d.mts -id.d.ts -id.js -id.mjs -is -is.d.mts -is.d.ts -is.js -is.mjs -it -it-CH -it-CH.d.mts -it-CH.d.ts -it-CH.js -it-CH.mjs -it.d.mts -it.d.ts -it.js -it.mjs -ja -ja-Hira -ja-Hira.d.mts -ja-Hira.d.ts -ja-Hira.js -ja-Hira.mjs -ja.d.mts -ja.d.ts -ja.js -ja.mjs -ka -ka.d.mts -ka.d.ts -ka.js -ka.mjs -kk -kk.d.mts -kk.d.ts -kk.js -kk.mjs -km -km.d.mts -km.d.ts -km.js -km.mjs -kn -kn.d.mts -kn.d.ts -kn.js -kn.mjs -ko -ko.d.mts -ko.d.ts -ko.js -ko.mjs -lb -lb.d.mts -lb.d.ts -lb.js -lb.mjs -lt -lt.d.mts -lt.d.ts -lt.js -lt.mjs -lv -lv.d.mts -lv.d.ts -lv.js -lv.mjs -mk -mk.d.mts -mk.d.ts -mk.js -mk.mjs -mn -mn.d.mts -mn.d.ts -mn.js -mn.mjs -ms -ms.d.mts -ms.d.ts -ms.js -ms.mjs -mt -mt.d.mts -mt.d.ts -mt.js -mt.mjs -nb -nb.d.mts -nb.d.ts -nb.js -nb.mjs -nl -nl-BE -nl-BE.d.mts -nl-BE.d.ts -nl-BE.js -nl-BE.mjs -nl.d.mts -nl.d.ts -nl.js -nl.mjs -nn -nn.d.mts -nn.d.ts -nn.js -nn.mjs -oc -oc.d.mts -oc.d.ts -oc.js -oc.mjs -pl -pl.d.mts -pl.d.ts -pl.js -pl.mjs -pt -pt-BR -pt-BR.d.mts -pt-BR.d.ts -pt-BR.js -pt-BR.mjs -pt.d.mts -pt.d.ts -pt.js -pt.mjs -ro -ro.d.mts -ro.d.ts -ro.js -ro.mjs -ru -ru.d.mts -ru.d.ts -ru.js -ru.mjs -se -se.d.mts -se.d.ts -se.js -se.mjs -sk -sk.d.mts -sk.d.ts -sk.js -sk.mjs -sl -sl.d.mts -sl.d.ts -sl.js -sl.mjs -sq -sq.d.mts -sq.d.ts -sq.js -sq.mjs -sr -sr-Latn -sr-Latn.d.mts -sr-Latn.d.ts -sr-Latn.js -sr-Latn.mjs -sr.d.mts -sr.d.ts -sr.js -sr.mjs -sv -sv.d.mts -sv.d.ts -sv.js -sv.mjs -ta -ta.d.mts -ta.d.ts -ta.js -ta.mjs -te -te.d.mts -te.d.ts -te.js -te.mjs -th -th.d.mts -th.d.ts -th.js -th.mjs -tr -tr.d.mts -tr.d.ts -tr.js -tr.mjs -types.d.mts -types.d.ts -types.js -types.mjs -ug -ug.d.mts -ug.d.ts -ug.js -ug.mjs -uk -uk.d.mts -uk.d.ts -uk.js -uk.mjs -uz -uz-Cyrl -uz-Cyrl.d.mts -uz-Cyrl.d.ts -uz-Cyrl.js -uz-Cyrl.mjs -uz.d.mts -uz.d.ts -uz.js -uz.mjs -vi -vi.d.mts -vi.d.ts -vi.js -vi.mjs -zh-CN -zh-CN.d.mts -zh-CN.d.ts -zh-CN.js -zh-CN.mjs -zh-HK -zh-HK.d.mts -zh-HK.d.ts -zh-HK.js -zh-HK.mjs -zh-TW -zh-TW.d.mts -zh-TW.d.ts -zh-TW.js -zh-TW.mjs - -buildFormatLongFn.d.mts -buildFormatLongFn.d.ts -buildFormatLongFn.js -buildFormatLongFn.mjs -buildLocalizeFn.d.mts -buildLocalizeFn.d.ts -buildLocalizeFn.js -buildLocalizeFn.mjs -buildMatchFn.d.mts -buildMatchFn.d.ts -buildMatchFn.js -buildMatchFn.mjs -buildMatchPatternFn.d.mts -buildMatchPatternFn.d.ts -buildMatchPatternFn.js -buildMatchPatternFn.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -localize.d.mts -localize.d.ts -localize.js -localize.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs - -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib -cdn.js -cdn.js.map -cdn.min.js -cdn.min.js.map - -formatDistance.d.mts -formatDistance.d.ts -formatDistance.js -formatDistance.mjs -formatLong.d.mts -formatLong.d.ts -formatLong.js -formatLong.mjs -formatRelative.d.mts -formatRelative.d.ts -formatRelative.js -formatRelative.mjs -localize.d.mts -localize.d.ts -localize.js -localize.mjs -match.d.mts -match.d.ts -match.js -match.mjs - -_lib - -Parser.d.mts -Parser.d.ts -Parser.js -Parser.mjs -Setter.d.mts -Setter.d.ts -Setter.js -Setter.mjs -constants.d.mts -constants.d.ts -constants.js -constants.mjs -parsers -parsers.d.mts -parsers.d.ts -parsers.js -parsers.mjs -types.d.mts -types.d.ts -types.js -types.mjs -utils.d.mts -utils.d.ts -utils.js -utils.mjs - -AMPMMidnightParser.d.mts -AMPMMidnightParser.d.ts -AMPMMidnightParser.js -AMPMMidnightParser.mjs -AMPMParser.d.mts -AMPMParser.d.ts -AMPMParser.js -AMPMParser.mjs -DateParser.d.mts -DateParser.d.ts -DateParser.js -DateParser.mjs -DayOfYearParser.d.mts -DayOfYearParser.d.ts -DayOfYearParser.js -DayOfYearParser.mjs -DayParser.d.mts -DayParser.d.ts -DayParser.js -DayParser.mjs -DayPeriodParser.d.mts -DayPeriodParser.d.ts -DayPeriodParser.js -DayPeriodParser.mjs -EraParser.d.mts -EraParser.d.ts -EraParser.js -EraParser.mjs -ExtendedYearParser.d.mts -ExtendedYearParser.d.ts -ExtendedYearParser.js -ExtendedYearParser.mjs -FractionOfSecondParser.d.mts -FractionOfSecondParser.d.ts -FractionOfSecondParser.js -FractionOfSecondParser.mjs -Hour0To11Parser.d.mts -Hour0To11Parser.d.ts -Hour0To11Parser.js -Hour0To11Parser.mjs -Hour0to23Parser.d.mts -Hour0to23Parser.d.ts -Hour0to23Parser.js -Hour0to23Parser.mjs -Hour1To24Parser.d.mts -Hour1To24Parser.d.ts -Hour1To24Parser.js -Hour1To24Parser.mjs -Hour1to12Parser.d.mts -Hour1to12Parser.d.ts -Hour1to12Parser.js -Hour1to12Parser.mjs -ISODayParser.d.mts -ISODayParser.d.ts -ISODayParser.js -ISODayParser.mjs -ISOTimezoneParser.d.mts -ISOTimezoneParser.d.ts -ISOTimezoneParser.js -ISOTimezoneParser.mjs -ISOTimezoneWithZParser.d.mts -ISOTimezoneWithZParser.d.ts -ISOTimezoneWithZParser.js -ISOTimezoneWithZParser.mjs -ISOWeekParser.d.mts -ISOWeekParser.d.ts -ISOWeekParser.js -ISOWeekParser.mjs -ISOWeekYearParser.d.mts -ISOWeekYearParser.d.ts -ISOWeekYearParser.js -ISOWeekYearParser.mjs -LocalDayParser.d.mts -LocalDayParser.d.ts -LocalDayParser.js -LocalDayParser.mjs -LocalWeekParser.d.mts -LocalWeekParser.d.ts -LocalWeekParser.js -LocalWeekParser.mjs -LocalWeekYearParser.d.mts -LocalWeekYearParser.d.ts -LocalWeekYearParser.js -LocalWeekYearParser.mjs -MinuteParser.d.mts -MinuteParser.d.ts -MinuteParser.js -MinuteParser.mjs -MonthParser.d.mts -MonthParser.d.ts -MonthParser.js -MonthParser.mjs -QuarterParser.d.mts -QuarterParser.d.ts -QuarterParser.js -QuarterParser.mjs -SecondParser.d.mts -SecondParser.d.ts -SecondParser.js -SecondParser.mjs -StandAloneLocalDayParser.d.mts -StandAloneLocalDayParser.d.ts -StandAloneLocalDayParser.js -StandAloneLocalDayParser.mjs -StandAloneMonthParser.d.mts -StandAloneMonthParser.d.ts -StandAloneMonthParser.js -StandAloneMonthParser.mjs -StandAloneQuarterParser.d.mts -StandAloneQuarterParser.d.ts -StandAloneQuarterParser.js -StandAloneQuarterParser.mjs -TimestampMillisecondsParser.d.mts -TimestampMillisecondsParser.d.ts -TimestampMillisecondsParser.js -TimestampMillisecondsParser.mjs -TimestampSecondsParser.d.mts -TimestampSecondsParser.d.ts -TimestampSecondsParser.js -TimestampSecondsParser.mjs -YearParser.d.mts -YearParser.d.ts -YearParser.js -YearParser.mjs - -LICENSE -README.md -package.json -src - -browser.js -common.js -index.js -node.js - -index.js -license -package.json -readme.md - -CHANGELOG.md -LICENCE.md -README.md -decimal.d.ts -decimal.js -decimal.min.js -decimal.mjs -doc -package.json - -API.html -decimal.js.map - -LICENSE -README.markdown -example -index.js -package.json -test - -cmp.js - -NaN.js -cmp.js -neg-vs-pos-0.js - -LICENSE -Readme.md -es5 -esm -package.json - -browser.js -node.d.ts -node.js - -browser.js -node.js - -LICENSE -README.md -didYouMean-1.2.1.js -didYouMean-1.2.1.min.js -package.json - -CONTRIBUTING.md -LICENSE.md -README.md -dijkstra.js -package.json -test - -dijkstra.test.js - -README.md -dist -index.js -package.json - -dlv.es.js -dlv.es.js.map -dlv.js -dlv.js.map -dlv.umd.js -dlv.umd.js.map - -LICENSE -README.md -activeElement -addClass -addEventListener -animate -animationFrame -attribute -camelize -camelizeStyle -canUseDOM -childElements -childNodes -cjs -clear -closest -collectElements -collectSiblings -contains -css -esm -filterEventHandler -getComputedStyle -getScrollAccessor -hasClass -height -hyphenate -hyphenateStyle -insertAfter -isDocument -isInput -isTransform -isVisible -isWindow -listen -matches -nextUntil -offset -offsetParent -ownerDocument -ownerWindow -package.json -parents -position -prepend -querySelectorAll -remove -removeClass -removeEventListener -scrollLeft -scrollParent -scrollTo -scrollTop -scrollbarSize -siblings -text -toggleClass -transitionEnd -triggerEvent -width - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -activeElement.d.ts -activeElement.js -addClass.d.ts -addClass.js -addEventListener.d.ts -addEventListener.js -animate.d.ts -animate.js -animationFrame.d.ts -animationFrame.js -attribute.d.ts -attribute.js -camelize.d.ts -camelize.js -camelizeStyle.d.ts -camelizeStyle.js -canUseDOM.d.ts -canUseDOM.js -childElements.d.ts -childElements.js -childNodes.d.ts -childNodes.js -clear.d.ts -clear.js -closest.d.ts -closest.js -collectElements.d.ts -collectElements.js -collectSiblings.d.ts -collectSiblings.js -contains.d.ts -contains.js -css.d.ts -css.js -filterEventHandler.d.ts -filterEventHandler.js -getComputedStyle.d.ts -getComputedStyle.js -getScrollAccessor.d.ts -getScrollAccessor.js -hasClass.d.ts -hasClass.js -height.d.ts -height.js -hyphenate.d.ts -hyphenate.js -hyphenateStyle.d.ts -hyphenateStyle.js -index.d.ts -index.js -insertAfter.d.ts -insertAfter.js -isDocument.d.ts -isDocument.js -isInput.d.ts -isInput.js -isTransform.d.ts -isTransform.js -isVisible.d.ts -isVisible.js -isWindow.d.ts -isWindow.js -listen.d.ts -listen.js -matches.d.ts -matches.js -nextUntil.d.ts -nextUntil.js -offset.d.ts -offset.js -offsetParent.d.ts -offsetParent.js -ownerDocument.d.ts -ownerDocument.js -ownerWindow.d.ts -ownerWindow.js -parents.d.ts -parents.js -position.d.ts -position.js -prepend.d.ts -prepend.js -querySelectorAll.d.ts -querySelectorAll.js -remove.d.ts -remove.js -removeClass.d.ts -removeClass.js -removeEventListener.d.ts -removeEventListener.js -scrollLeft.d.ts -scrollLeft.js -scrollParent.d.ts -scrollParent.js -scrollTo.d.ts -scrollTo.js -scrollTop.d.ts -scrollTop.js -scrollbarSize.d.ts -scrollbarSize.js -siblings.d.ts -siblings.js -text.d.ts -text.js -toggleClass.d.ts -toggleClass.js -transitionEnd.d.ts -transitionEnd.js -triggerEvent.d.ts -triggerEvent.js -types.d.ts -width.d.ts -width.js - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -activeElement.d.ts -activeElement.js -addClass.d.ts -addClass.js -addEventListener.d.ts -addEventListener.js -animate.d.ts -animate.js -animationFrame.d.ts -animationFrame.js -attribute.d.ts -attribute.js -camelize.d.ts -camelize.js -camelizeStyle.d.ts -camelizeStyle.js -canUseDOM.d.ts -canUseDOM.js -childElements.d.ts -childElements.js -childNodes.d.ts -childNodes.js -clear.d.ts -clear.js -closest.d.ts -closest.js -collectElements.d.ts -collectElements.js -collectSiblings.d.ts -collectSiblings.js -contains.d.ts -contains.js -css.d.ts -css.js -filterEventHandler.d.ts -filterEventHandler.js -getComputedStyle.d.ts -getComputedStyle.js -getScrollAccessor.d.ts -getScrollAccessor.js -hasClass.d.ts -hasClass.js -height.d.ts -height.js -hyphenate.d.ts -hyphenate.js -hyphenateStyle.d.ts -hyphenateStyle.js -index.d.ts -index.js -insertAfter.d.ts -insertAfter.js -isDocument.d.ts -isDocument.js -isInput.d.ts -isInput.js -isTransform.d.ts -isTransform.js -isVisible.d.ts -isVisible.js -isWindow.d.ts -isWindow.js -listen.d.ts -listen.js -matches.d.ts -matches.js -nextUntil.d.ts -nextUntil.js -offset.d.ts -offset.js -offsetParent.d.ts -offsetParent.js -ownerDocument.d.ts -ownerDocument.js -ownerWindow.d.ts -ownerWindow.js -parents.d.ts -parents.js -position.d.ts -position.js -prepend.d.ts -prepend.js -querySelectorAll.d.ts -querySelectorAll.js -remove.d.ts -remove.js -removeClass.d.ts -removeClass.js -removeEventListener.d.ts -removeEventListener.js -scrollLeft.d.ts -scrollLeft.js -scrollParent.d.ts -scrollParent.js -scrollTo.d.ts -scrollTo.js -scrollTop.d.ts -scrollTop.js -scrollbarSize.d.ts -scrollbarSize.js -siblings.d.ts -siblings.js -text.d.ts -text.js -toggleClass.d.ts -toggleClass.js -transitionEnd.d.ts -transitionEnd.js -triggerEvent.d.ts -triggerEvent.js -types.d.ts -width.d.ts -width.js - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -README.md -eastasianwidth.js -package.json - -LICENSE -README.md -chromium-versions.js -chromium-versions.json -full-chromium-versions.js -full-chromium-versions.json -full-versions.js -full-versions.json -index.js -package.json -versions.js -versions.json - -README.md -cjs -components -embla-carousel.umd.js -esm -index.d.ts -package.json - -components -embla-carousel.cjs.js -embla-carousel.cjs.js.map -index.d.ts -package.json - -Alignment.d.ts -Animations.d.ts -Axis.d.ts -Counter.d.ts -DragHandler.d.ts -DragTracker.d.ts -EmblaCarousel.d.ts -Engine.d.ts -EventHandler.d.ts -EventStore.d.ts -Limit.d.ts -NodeRects.d.ts -Options.d.ts -OptionsHandler.d.ts -PercentOfView.d.ts -Plugins.d.ts -PluginsHandler.d.ts -ResizeHandler.d.ts -ScrollBody.d.ts -ScrollBounds.d.ts -ScrollContain.d.ts -ScrollLimit.d.ts -ScrollLooper.d.ts -ScrollProgress.d.ts -ScrollSnaps.d.ts -ScrollTarget.d.ts -ScrollTo.d.ts -SlideFocus.d.ts -SlideLooper.d.ts -SlideRegistry.d.ts -SlideSizes.d.ts -SlidesHandler.d.ts -SlidesInView.d.ts -SlidesToScroll.d.ts -Translate.d.ts -Vector1d.d.ts -utils.d.ts - -Alignment.d.ts -Animations.d.ts -Axis.d.ts -Counter.d.ts -DragHandler.d.ts -DragTracker.d.ts -EmblaCarousel.d.ts -Engine.d.ts -EventHandler.d.ts -EventStore.d.ts -Limit.d.ts -NodeRects.d.ts -Options.d.ts -OptionsHandler.d.ts -PercentOfView.d.ts -Plugins.d.ts -PluginsHandler.d.ts -ResizeHandler.d.ts -ScrollBody.d.ts -ScrollBounds.d.ts -ScrollContain.d.ts -ScrollLimit.d.ts -ScrollLooper.d.ts -ScrollProgress.d.ts -ScrollSnaps.d.ts -ScrollTarget.d.ts -ScrollTo.d.ts -SlideFocus.d.ts -SlideLooper.d.ts -SlideRegistry.d.ts -SlideSizes.d.ts -SlidesHandler.d.ts -SlidesInView.d.ts -SlidesToScroll.d.ts -Translate.d.ts -Vector1d.d.ts -utils.d.ts - -components -embla-carousel.esm.js -embla-carousel.esm.js.map -index.d.ts -package.json - -Alignment.d.ts -Animations.d.ts -Axis.d.ts -Counter.d.ts -DragHandler.d.ts -DragTracker.d.ts -EmblaCarousel.d.ts -Engine.d.ts -EventHandler.d.ts -EventStore.d.ts -Limit.d.ts -NodeRects.d.ts -Options.d.ts -OptionsHandler.d.ts -PercentOfView.d.ts -Plugins.d.ts -PluginsHandler.d.ts -ResizeHandler.d.ts -ScrollBody.d.ts -ScrollBounds.d.ts -ScrollContain.d.ts -ScrollLimit.d.ts -ScrollLooper.d.ts -ScrollProgress.d.ts -ScrollSnaps.d.ts -ScrollTarget.d.ts -ScrollTo.d.ts -SlideFocus.d.ts -SlideLooper.d.ts -SlideRegistry.d.ts -SlideSizes.d.ts -SlidesHandler.d.ts -SlidesInView.d.ts -SlidesToScroll.d.ts -Translate.d.ts -Vector1d.d.ts -utils.d.ts - -README.md -cjs -components -embla-carousel-react.umd.js -esm -index.d.ts -package.json - -components -embla-carousel-react.cjs.js -embla-carousel-react.cjs.js.map -index.d.ts -package.json - -useEmblaCarousel.d.ts - -useEmblaCarousel.d.ts - -components -embla-carousel-react.esm.js -embla-carousel-react.esm.js.map -index.d.ts -package.json - -useEmblaCarousel.d.ts - -README.md -cjs -components -embla-carousel-reactive-utils.umd.js -esm -index.d.ts -package.json - -components -embla-carousel-reactive-utils.cjs.js -embla-carousel-reactive-utils.cjs.js.map -index.d.ts -package.json - -utils.d.ts - -utils.d.ts - -components -embla-carousel-reactive-utils.esm.js -embla-carousel-reactive-utils.esm.js.map -index.d.ts -package.json - -utils.d.ts - -LICENSE-MIT.txt -README.md -RGI_Emoji.d.ts -RGI_Emoji.js -es2015 -index.d.ts -index.js -package.json -text.d.ts -text.js - -RGI_Emoji.d.ts -RGI_Emoji.js -index.d.ts -index.js -text.d.ts -text.js - -LICENSE.md -README.md -bin -install.js -lib -package.json - -esbuild - -main.d.ts -main.js - -dist -index.d.mts -index.d.ts -license -package.json -readme.md -sync - -index.js -index.mjs - -index.d.mts -index.d.ts -index.js -index.mjs - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -bin -conf -lib -messages -package.json - -eslint.js - -default-cli-options.js -ecma-version.js -globals.js -replacements.json -rule-type-list.json - -api.js -cli-engine -cli.js -config -config-api.js -eslint -languages -linter -options.js -rule-tester -rules -services -shared -types -universal.js -unsupported-api.js - -cli-engine.js -file-enumerator.js -formatters -hash.js -index.js -lint-result-cache.js -load-rules.js - -formatters-meta.json -html.js -json-with-metadata.js -json.js -stylish.js - -config-loader.js -config.js -default-config.js -flat-config-array.js -flat-config-schema.js - -eslint-helpers.js -eslint.js -index.js -legacy-eslint.js -worker.js - -js - -index.js -source-code -validate-language-options.js - -index.js -source-code.js -token-store - -backward-token-comment-cursor.js -backward-token-cursor.js -cursor.js -cursors.js -decorative-cursor.js -filter-cursor.js -forward-token-comment-cursor.js -forward-token-cursor.js -index.js -limit-cursor.js -padded-token-cursor.js -skip-cursor.js -utils.js - -apply-disable-directives.js -code-path-analysis -esquery.js -file-context.js -file-report.js -index.js -interpolate.js -linter.js -rule-fixer.js -rules.js -source-code-fixer.js -source-code-traverser.js -source-code-visitor.js -timing.js -vfile.js - -code-path-analyzer.js -code-path-segment.js -code-path-state.js -code-path.js -debug-helpers.js -fork-context.js -id-generator.js - -index.js -rule-tester.js - -accessor-pairs.js -array-bracket-newline.js -array-bracket-spacing.js -array-callback-return.js -array-element-newline.js -arrow-body-style.js -arrow-parens.js -arrow-spacing.js -block-scoped-var.js -block-spacing.js -brace-style.js -callback-return.js -camelcase.js -capitalized-comments.js -class-methods-use-this.js -comma-dangle.js -comma-spacing.js -comma-style.js -complexity.js -computed-property-spacing.js -consistent-return.js -consistent-this.js -constructor-super.js -curly.js -default-case-last.js -default-case.js -default-param-last.js -dot-location.js -dot-notation.js -eol-last.js -eqeqeq.js -for-direction.js -func-call-spacing.js -func-name-matching.js -func-names.js -func-style.js -function-call-argument-newline.js -function-paren-newline.js -generator-star-spacing.js -getter-return.js -global-require.js -grouped-accessor-pairs.js -guard-for-in.js -handle-callback-err.js -id-blacklist.js -id-denylist.js -id-length.js -id-match.js -implicit-arrow-linebreak.js -indent-legacy.js -indent.js -index.js -init-declarations.js -jsx-quotes.js -key-spacing.js -keyword-spacing.js -line-comment-position.js -linebreak-style.js -lines-around-comment.js -lines-around-directive.js -lines-between-class-members.js -logical-assignment-operators.js -max-classes-per-file.js -max-depth.js -max-len.js -max-lines-per-function.js -max-lines.js -max-nested-callbacks.js -max-params.js -max-statements-per-line.js -max-statements.js -multiline-comment-style.js -multiline-ternary.js -new-cap.js -new-parens.js -newline-after-var.js -newline-before-return.js -newline-per-chained-call.js -no-alert.js -no-array-constructor.js -no-async-promise-executor.js -no-await-in-loop.js -no-bitwise.js -no-buffer-constructor.js -no-caller.js -no-case-declarations.js -no-catch-shadow.js -no-class-assign.js -no-compare-neg-zero.js -no-cond-assign.js -no-confusing-arrow.js -no-console.js -no-const-assign.js -no-constant-binary-expression.js -no-constant-condition.js -no-constructor-return.js -no-continue.js -no-control-regex.js -no-debugger.js -no-delete-var.js -no-div-regex.js -no-dupe-args.js -no-dupe-class-members.js -no-dupe-else-if.js -no-dupe-keys.js -no-duplicate-case.js -no-duplicate-imports.js -no-else-return.js -no-empty-character-class.js -no-empty-function.js -no-empty-pattern.js -no-empty-static-block.js -no-empty.js -no-eq-null.js -no-eval.js -no-ex-assign.js -no-extend-native.js -no-extra-bind.js -no-extra-boolean-cast.js -no-extra-label.js -no-extra-parens.js -no-extra-semi.js -no-fallthrough.js -no-floating-decimal.js -no-func-assign.js -no-global-assign.js -no-implicit-coercion.js -no-implicit-globals.js -no-implied-eval.js -no-import-assign.js -no-inline-comments.js -no-inner-declarations.js -no-invalid-regexp.js -no-invalid-this.js -no-irregular-whitespace.js -no-iterator.js -no-label-var.js -no-labels.js -no-lone-blocks.js -no-lonely-if.js -no-loop-func.js -no-loss-of-precision.js -no-magic-numbers.js -no-misleading-character-class.js -no-mixed-operators.js -no-mixed-requires.js -no-mixed-spaces-and-tabs.js -no-multi-assign.js -no-multi-spaces.js -no-multi-str.js -no-multiple-empty-lines.js -no-native-reassign.js -no-negated-condition.js -no-negated-in-lhs.js -no-nested-ternary.js -no-new-func.js -no-new-native-nonconstructor.js -no-new-object.js -no-new-require.js -no-new-symbol.js -no-new-wrappers.js -no-new.js -no-nonoctal-decimal-escape.js -no-obj-calls.js -no-object-constructor.js -no-octal-escape.js -no-octal.js -no-param-reassign.js -no-path-concat.js -no-plusplus.js -no-process-env.js -no-process-exit.js -no-promise-executor-return.js -no-proto.js -no-prototype-builtins.js -no-redeclare.js -no-regex-spaces.js -no-restricted-exports.js -no-restricted-globals.js -no-restricted-imports.js -no-restricted-modules.js -no-restricted-properties.js -no-restricted-syntax.js -no-return-assign.js -no-return-await.js -no-script-url.js -no-self-assign.js -no-self-compare.js -no-sequences.js -no-setter-return.js -no-shadow-restricted-names.js -no-shadow.js -no-spaced-func.js -no-sparse-arrays.js -no-sync.js -no-tabs.js -no-template-curly-in-string.js -no-ternary.js -no-this-before-super.js -no-throw-literal.js -no-trailing-spaces.js -no-unassigned-vars.js -no-undef-init.js -no-undef.js -no-undefined.js -no-underscore-dangle.js -no-unexpected-multiline.js -no-unmodified-loop-condition.js -no-unneeded-ternary.js -no-unreachable-loop.js -no-unreachable.js -no-unsafe-finally.js -no-unsafe-negation.js -no-unsafe-optional-chaining.js -no-unused-expressions.js -no-unused-labels.js -no-unused-private-class-members.js -no-unused-vars.js -no-use-before-define.js -no-useless-assignment.js -no-useless-backreference.js -no-useless-call.js -no-useless-catch.js -no-useless-computed-key.js -no-useless-concat.js -no-useless-constructor.js -no-useless-escape.js -no-useless-rename.js -no-useless-return.js -no-var.js -no-void.js -no-warning-comments.js -no-whitespace-before-property.js -no-with.js -nonblock-statement-body-position.js -object-curly-newline.js -object-curly-spacing.js -object-property-newline.js -object-shorthand.js -one-var-declaration-per-line.js -one-var.js -operator-assignment.js -operator-linebreak.js -padded-blocks.js -padding-line-between-statements.js -prefer-arrow-callback.js -prefer-const.js -prefer-destructuring.js -prefer-exponentiation-operator.js -prefer-named-capture-group.js -prefer-numeric-literals.js -prefer-object-has-own.js -prefer-object-spread.js -prefer-promise-reject-errors.js -prefer-reflect.js -prefer-regex-literals.js -prefer-rest-params.js -prefer-spread.js -prefer-template.js -preserve-caught-error.js -quote-props.js -quotes.js -radix.js -require-atomic-updates.js -require-await.js -require-unicode-regexp.js -require-yield.js -rest-spread-spacing.js -semi-spacing.js -semi-style.js -semi.js -sort-imports.js -sort-keys.js -sort-vars.js -space-before-blocks.js -space-before-function-paren.js -space-in-parens.js -space-infix-ops.js -space-unary-ops.js -spaced-comment.js -strict.js -switch-colon-spacing.js -symbol-description.js -template-curly-spacing.js -template-tag-spacing.js -unicode-bom.js -use-isnan.js -utils -valid-typeof.js -vars-on-top.js -wrap-iife.js -wrap-regex.js -yield-star-spacing.js -yoda.js - -ast-utils.js -char-source.js -fix-tracker.js -keywords.js -lazy-loading-rule-map.js -regular-expressions.js -unicode - -index.js -is-combining-character.js -is-emoji-modifier.js -is-regional-indicator-symbol.js -is-surrogate-pair.js - -parser-service.js -processor-service.js -suppressions-service.js -warning-service.js - -ajv.js -assert.js -ast-utils.js -deep-merge-arrays.js -directives.js -flags.js -logging.js -naming.js -option-utils.js -relative-module-resolver.js -runtime-info.js -serialization.js -severity.js -stats.js -string-utils.js -text-table.js -translate-cli-options.js -traverser.js - -config-api.d.ts -index.d.ts -rules.d.ts -universal.d.ts -use-at-your-own-risk.d.ts - -all-files-ignored.js -all-matched-files-ignored.js -config-file-missing.js -config-plugin-missing.js -config-serialize-function.js -eslintrc-incompat.js -eslintrc-plugins.js -extend-config-missing.js -failed-to-read-json.js -file-not-found.js -invalid-rule-options.js -invalid-rule-severity.js -no-config-found.js -plugin-conflict.js -plugin-invalid.js -plugin-missing.js -print-config-with-directory-path.js -shared.js -whitespace-found.js - -LICENSE -README.md -cjs -index.d.ts -index.js -package.json - -eslint-plugin-react-hooks.d.ts -eslint-plugin-react-hooks.development.js -eslint-plugin-react-hooks.production.js - -LICENSE -README.md -index.d.ts -index.js -package.json - -LICENSE -README.md -dist -lib -package.json - -eslint-scope.cjs - -assert.js -definition.js -index.js -pattern-visitor.js -reference.js -referencer.js -scope-manager.js -scope.js -variable.js -version.js - -LICENSE -README.md -dist -lib -package.json - -eslint-visitor-keys.cjs -eslint-visitor-keys.d.cts -index.d.ts -visitor-keys.d.ts - -index.js -visitor-keys.js - -LICENSE -README.md -dist -espree.js -lib -package.json - -espree.cjs - -espree.js -features.js -options.js -token-translator.js -version.js - -README.md -dist -license.txt -package.json -parser.js - -esquery.esm.js -esquery.esm.min.js -esquery.esm.min.js.map -esquery.js -esquery.lite.js -esquery.lite.min.js -esquery.lite.min.js.map -esquery.min.js -esquery.min.js.map - -README.md -esrecurse.js -gulpfile.babel.js -package.json - -LICENSE.BSD -README.md -estraverse.js -gulpfile.js -package.json - -LICENSE.BSD -README.md -lib -package.json - -ast.js -code.js -keyword.js -utils.js - -LICENSE -README.md -index.d.ts -index.js -package.json -umd - -eventemitter3.js -eventemitter3.min.js -eventemitter3.min.js.map - -LICENSE -README.md -es6 -index.d.ts -index.js -package.json -react.d.ts -react.js - -index.d.ts -index.js -react.d.ts -react.js - -CHANGELOG.md -LICENSE -README.md -dist -index.d.ts -package.json -src - -cjs -esm -min -umd - -index.cjs -index.cjs.map -types - -comparator.d.ts -equals.d.ts -index.d.ts -internalTypes.d.ts -utils.d.ts - -index.mjs -index.mjs.map -types - -comparator.d.ts -equals.d.ts -index.d.ts -internalTypes.d.ts -utils.d.ts - -index.js -types - -comparator.d.ts -equals.d.ts -index.d.ts -internalTypes.d.ts -utils.d.ts - -index.js -index.js.map -types - -comparator.d.ts -equals.d.ts -index.d.ts -internalTypes.d.ts -utils.d.ts - -comparator.ts -equals.ts -index.ts -internalTypes.ts -utils.ts - -LICENSE -README.md -out -package.json - -glob-parent - -CHANGELOG.md -LICENSE -README.md -index.js -package.json - -index.d.ts -index.js -managers -providers -readers -settings.d.ts -settings.js -types -utils - -tasks.d.ts -tasks.js - -async.d.ts -async.js -filters -matchers -provider.d.ts -provider.js -stream.d.ts -stream.js -sync.d.ts -sync.js -transformers - -deep.d.ts -deep.js -entry.d.ts -entry.js -error.d.ts -error.js - -matcher.d.ts -matcher.js -partial.d.ts -partial.js - -entry.d.ts -entry.js - -async.d.ts -async.js -reader.d.ts -reader.js -stream.d.ts -stream.js -sync.d.ts -sync.js - -index.d.ts -index.js - -array.d.ts -array.js -errno.d.ts -errno.js -fs.d.ts -fs.js -index.d.ts -index.js -path.d.ts -path.js -pattern.d.ts -pattern.js -stream.d.ts -stream.js -string.d.ts -string.js - -LICENSE -README.md -benchmark -example -index.d.ts -index.js -package.json -test - -index.js -test.json - -key_cmp.js -nested.js -str.js -value_cmp.js - -cmp.js -nested.js -str.js -to-json.js - -LICENSE.md -README.md -levenshtein.js -package.json - -LICENSE -README.md -SECURITY.md -bench.js -example.js -example.mjs -index.d.ts -package.json -queue.js -test - -example.ts -promise.js -test.js -tsconfig.json - -LICENSE -README.md -file.d.ts -file.js -from.d.ts -from.js -index.d.ts -index.js -package.json -streams.cjs - -LICENSE -README.md -cache.js -package.json - -LICENSE -README.md -index.js -package.json - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -changelog.md -package.json -src - -cache.js -del.js -utils.js - -LICENSE -README.md -cjs -es.js -esm -esm.js -index.js -min.js -package.json -php -python -types - -index.js -package.json - -index.js - -flatted.php - -flatted.py - -index.d.ts - -LICENSE -README.md -dist -package.json - -commonjs -esm - -all-signals.d.ts -all-signals.d.ts.map -all-signals.js -all-signals.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -proxy-signals.d.ts -proxy-signals.d.ts.map -proxy-signals.js -proxy-signals.js.map -watchdog.d.ts -watchdog.d.ts.map -watchdog.js -watchdog.js.map - -all-signals.d.ts -all-signals.d.ts.map -all-signals.js -all-signals.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -proxy-signals.d.ts -proxy-signals.d.ts.map -proxy-signals.js -proxy-signals.js.map -watchdog.d.ts -watchdog.d.ts.map -watchdog.js -watchdog.js.map - -FormData.js -LICENSE -README.md -esm.min.d.ts -esm.min.js -formdata-to-blob.js -formdata.min.js -package.json - -LICENSE -README.md -bigfraction.js -fraction.cjs -fraction.d.ts -fraction.js -fraction.min.js -package.json - -CHANGELOG.md -LICENSE -README.md -implementation.js -index.js -package.json -test - -index.js - -LICENSE.md -README.md -index.d.ts -index.js -index.js.map -package.json - -CHANGELOG.md -LICENSE -README.md -dist -package.json - -es2015 -es5 - -index.d.ts -index.js - -index.d.ts -index.js - -LICENSE -README.md -dist -package.json - -commonjs -esm - -glob.d.ts -glob.d.ts.map -glob.js -glob.js.map -has-magic.d.ts -has-magic.d.ts.map -has-magic.js -has-magic.js.map -ignore.d.ts -ignore.d.ts.map -ignore.js -ignore.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -pattern.d.ts -pattern.d.ts.map -pattern.js -pattern.js.map -processor.d.ts -processor.d.ts.map -processor.js -processor.js.map -walker.d.ts -walker.d.ts.map -walker.js -walker.js.map - -bin.d.mts -bin.d.mts.map -bin.mjs -bin.mjs.map -glob.d.ts -glob.d.ts.map -glob.js -glob.js.map -has-magic.d.ts -has-magic.d.ts.map -has-magic.js -has-magic.js.map -ignore.d.ts -ignore.d.ts.map -ignore.js -ignore.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -pattern.d.ts -pattern.d.ts.map -pattern.js -pattern.js.map -processor.d.ts -processor.d.ts.map -processor.js -processor.js.map -walker.d.ts -walker.d.ts.map -walker.js -walker.js.map - -brace-expansion -minimatch - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -dist -package.json - -commonjs -esm - -assert-valid-pattern.d.ts -assert-valid-pattern.d.ts.map -assert-valid-pattern.js -assert-valid-pattern.js.map -ast.d.ts -ast.d.ts.map -ast.js -ast.js.map -brace-expressions.d.ts -brace-expressions.d.ts.map -brace-expressions.js -brace-expressions.js.map -escape.d.ts -escape.d.ts.map -escape.js -escape.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -unescape.d.ts -unescape.d.ts.map -unescape.js -unescape.js.map - -assert-valid-pattern.d.ts -assert-valid-pattern.d.ts.map -assert-valid-pattern.js -assert-valid-pattern.js.map -ast.d.ts -ast.d.ts.map -ast.js -ast.js.map -brace-expressions.d.ts -brace-expressions.d.ts.map -brace-expressions.js -brace-expressions.js.map -escape.d.ts -escape.d.ts.map -escape.js -escape.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -unescape.d.ts -unescape.d.ts.map -unescape.js -unescape.js.map - -LICENSE -README.md -index.js -package.json - -globals.json -index.d.ts -index.js -license -package.json -readme.md - -CHANGELOG.md -LICENSE -README.md -lib -package.json - -Graphemer.d.ts -Graphemer.d.ts.map -Graphemer.js -GraphemerHelper.d.ts -GraphemerHelper.d.ts.map -GraphemerHelper.js -GraphemerIterator.d.ts -GraphemerIterator.d.ts.map -GraphemerIterator.js -boundaries.d.ts -boundaries.d.ts.map -boundaries.js -index.d.ts -index.d.ts.map -index.js - -index.d.ts -index.js -license -package.json -readme.md - -CHANGELOG.md -LICENSE -README.md -index.d.ts -index.js -package.json -tsconfig.json - -CHANGES.md -LICENSE -README.md -SECURITY.md -SUPPORTED_LANGUAGES.md -VERSION_10_UPGRADE.md -VERSION_11_UPGRADE.md -es -lib -package.json -scss -styles -types - -common.d.ts -common.js -core.d.ts -core.js -index.js -languages -package.json -utils - -1c.js -1c.js.js -abnf.js -abnf.js.js -accesslog.js -accesslog.js.js -actionscript.js -actionscript.js.js -ada.js -ada.js.js -angelscript.js -angelscript.js.js -apache.js -apache.js.js -applescript.js -applescript.js.js -arcade.js -arcade.js.js -arduino.js -arduino.js.js -armasm.js -armasm.js.js -asciidoc.js -asciidoc.js.js -aspectj.js -aspectj.js.js -autohotkey.js -autohotkey.js.js -autoit.js -autoit.js.js -avrasm.js -avrasm.js.js -awk.js -awk.js.js -axapta.js -axapta.js.js -bash.js -bash.js.js -basic.js -basic.js.js -bnf.js -bnf.js.js -brainfuck.js -brainfuck.js.js -c.js -c.js.js -cal.js -cal.js.js -capnproto.js -capnproto.js.js -ceylon.js -ceylon.js.js -clean.js -clean.js.js -clojure-repl.js -clojure-repl.js.js -clojure.js -clojure.js.js -cmake.js -cmake.js.js -coffeescript.js -coffeescript.js.js -coq.js -coq.js.js -cos.js -cos.js.js -cpp.js -cpp.js.js -crmsh.js -crmsh.js.js -crystal.js -crystal.js.js -csharp.js -csharp.js.js -csp.js -csp.js.js -css.js -css.js.js -d.js -d.js.js -dart.js -dart.js.js -delphi.js -delphi.js.js -diff.js -diff.js.js -django.js -django.js.js -dns.js -dns.js.js -dockerfile.js -dockerfile.js.js -dos.js -dos.js.js -dsconfig.js -dsconfig.js.js -dts.js -dts.js.js -dust.js -dust.js.js -ebnf.js -ebnf.js.js -elixir.js -elixir.js.js -elm.js -elm.js.js -erb.js -erb.js.js -erlang-repl.js -erlang-repl.js.js -erlang.js -erlang.js.js -excel.js -excel.js.js -fix.js -fix.js.js -flix.js -flix.js.js -fortran.js -fortran.js.js -fsharp.js -fsharp.js.js -gams.js -gams.js.js -gauss.js -gauss.js.js -gcode.js -gcode.js.js -gherkin.js -gherkin.js.js -glsl.js -glsl.js.js -gml.js -gml.js.js -go.js -go.js.js -golo.js -golo.js.js -gradle.js -gradle.js.js -graphql.js -graphql.js.js -groovy.js -groovy.js.js -haml.js -haml.js.js -handlebars.js -handlebars.js.js -haskell.js -haskell.js.js -haxe.js -haxe.js.js -hsp.js -hsp.js.js -http.js -http.js.js -hy.js -hy.js.js -inform7.js -inform7.js.js -ini.js -ini.js.js -irpf90.js -irpf90.js.js -isbl.js -isbl.js.js -java.js -java.js.js -javascript.js -javascript.js.js -jboss-cli.js -jboss-cli.js.js -json.js -json.js.js -julia-repl.js -julia-repl.js.js -julia.js -julia.js.js -kotlin.js -kotlin.js.js -lasso.js -lasso.js.js -latex.js -latex.js.js -ldif.js -ldif.js.js -leaf.js -leaf.js.js -less.js -less.js.js -lisp.js -lisp.js.js -livecodeserver.js -livecodeserver.js.js -livescript.js -livescript.js.js -llvm.js -llvm.js.js -lsl.js -lsl.js.js -lua.js -lua.js.js -makefile.js -makefile.js.js -markdown.js -markdown.js.js -mathematica.js -mathematica.js.js -matlab.js -matlab.js.js -maxima.js -maxima.js.js -mel.js -mel.js.js -mercury.js -mercury.js.js -mipsasm.js -mipsasm.js.js -mizar.js -mizar.js.js -mojolicious.js -mojolicious.js.js -monkey.js -monkey.js.js -moonscript.js -moonscript.js.js -n1ql.js -n1ql.js.js -nestedtext.js -nestedtext.js.js -nginx.js -nginx.js.js -nim.js -nim.js.js -nix.js -nix.js.js -node-repl.js -node-repl.js.js -nsis.js -nsis.js.js -objectivec.js -objectivec.js.js -ocaml.js -ocaml.js.js -openscad.js -openscad.js.js -oxygene.js -oxygene.js.js -parser3.js -parser3.js.js -perl.js -perl.js.js -pf.js -pf.js.js -pgsql.js -pgsql.js.js -php-template.js -php-template.js.js -php.js -php.js.js -plaintext.js -plaintext.js.js -pony.js -pony.js.js -powershell.js -powershell.js.js -processing.js -processing.js.js -profile.js -profile.js.js -prolog.js -prolog.js.js -properties.js -properties.js.js -protobuf.js -protobuf.js.js -puppet.js -puppet.js.js -purebasic.js -purebasic.js.js -python-repl.js -python-repl.js.js -python.js -python.js.js -q.js -q.js.js -qml.js -qml.js.js -r.js -r.js.js -reasonml.js -reasonml.js.js -rib.js -rib.js.js -roboconf.js -roboconf.js.js -routeros.js -routeros.js.js -rsl.js -rsl.js.js -ruby.js -ruby.js.js -ruleslanguage.js -ruleslanguage.js.js -rust.js -rust.js.js -sas.js -sas.js.js -scala.js -scala.js.js -scheme.js -scheme.js.js -scilab.js -scilab.js.js -scss.js -scss.js.js -shell.js -shell.js.js -smali.js -smali.js.js -smalltalk.js -smalltalk.js.js -sml.js -sml.js.js -sqf.js -sqf.js.js -sql.js -sql.js.js -stan.js -stan.js.js -stata.js -stata.js.js -step21.js -step21.js.js -stylus.js -stylus.js.js -subunit.js -subunit.js.js -swift.js -swift.js.js -taggerscript.js -taggerscript.js.js -tap.js -tap.js.js -tcl.js -tcl.js.js -thrift.js -thrift.js.js -tp.js -tp.js.js -twig.js -twig.js.js -typescript.js -typescript.js.js -vala.js -vala.js.js -vbnet.js -vbnet.js.js -vbscript-html.js -vbscript-html.js.js -vbscript.js -vbscript.js.js -verilog.js -verilog.js.js -vhdl.js -vhdl.js.js -vim.js -vim.js.js -wasm.js -wasm.js.js -wren.js -wren.js.js -x86asm.js -x86asm.js.js -xl.js -xl.js.js -xml.js -xml.js.js -xquery.js -xquery.js.js -yaml.js -yaml.js.js -zephir.js -zephir.js.js - -regex.js - -common.d.ts -common.js -core.d.ts -core.js -index.js -languages - -1c.js -1c.js.js -abnf.js -abnf.js.js -accesslog.js -accesslog.js.js -actionscript.js -actionscript.js.js -ada.js -ada.js.js -angelscript.js -angelscript.js.js -apache.js -apache.js.js -applescript.js -applescript.js.js -arcade.js -arcade.js.js -arduino.js -arduino.js.js -armasm.js -armasm.js.js -asciidoc.js -asciidoc.js.js -aspectj.js -aspectj.js.js -autohotkey.js -autohotkey.js.js -autoit.js -autoit.js.js -avrasm.js -avrasm.js.js -awk.js -awk.js.js -axapta.js -axapta.js.js -bash.js -bash.js.js -basic.js -basic.js.js -bnf.js -bnf.js.js -brainfuck.js -brainfuck.js.js -c.js -c.js.js -cal.js -cal.js.js -capnproto.js -capnproto.js.js -ceylon.js -ceylon.js.js -clean.js -clean.js.js -clojure-repl.js -clojure-repl.js.js -clojure.js -clojure.js.js -cmake.js -cmake.js.js -coffeescript.js -coffeescript.js.js -coq.js -coq.js.js -cos.js -cos.js.js -cpp.js -cpp.js.js -crmsh.js -crmsh.js.js -crystal.js -crystal.js.js -csharp.js -csharp.js.js -csp.js -csp.js.js -css.js -css.js.js -d.js -d.js.js -dart.js -dart.js.js -delphi.js -delphi.js.js -diff.js -diff.js.js -django.js -django.js.js -dns.js -dns.js.js -dockerfile.js -dockerfile.js.js -dos.js -dos.js.js -dsconfig.js -dsconfig.js.js -dts.js -dts.js.js -dust.js -dust.js.js -ebnf.js -ebnf.js.js -elixir.js -elixir.js.js -elm.js -elm.js.js -erb.js -erb.js.js -erlang-repl.js -erlang-repl.js.js -erlang.js -erlang.js.js -excel.js -excel.js.js -fix.js -fix.js.js -flix.js -flix.js.js -fortran.js -fortran.js.js -fsharp.js -fsharp.js.js -gams.js -gams.js.js -gauss.js -gauss.js.js -gcode.js -gcode.js.js -gherkin.js -gherkin.js.js -glsl.js -glsl.js.js -gml.js -gml.js.js -go.js -go.js.js -golo.js -golo.js.js -gradle.js -gradle.js.js -graphql.js -graphql.js.js -groovy.js -groovy.js.js -haml.js -haml.js.js -handlebars.js -handlebars.js.js -haskell.js -haskell.js.js -haxe.js -haxe.js.js -hsp.js -hsp.js.js -http.js -http.js.js -hy.js -hy.js.js -inform7.js -inform7.js.js -ini.js -ini.js.js -irpf90.js -irpf90.js.js -isbl.js -isbl.js.js -java.js -java.js.js -javascript.js -javascript.js.js -jboss-cli.js -jboss-cli.js.js -json.js -json.js.js -julia-repl.js -julia-repl.js.js -julia.js -julia.js.js -kotlin.js -kotlin.js.js -lasso.js -lasso.js.js -latex.js -latex.js.js -ldif.js -ldif.js.js -leaf.js -leaf.js.js -less.js -less.js.js -lisp.js -lisp.js.js -livecodeserver.js -livecodeserver.js.js -livescript.js -livescript.js.js -llvm.js -llvm.js.js -lsl.js -lsl.js.js -lua.js -lua.js.js -makefile.js -makefile.js.js -markdown.js -markdown.js.js -mathematica.js -mathematica.js.js -matlab.js -matlab.js.js -maxima.js -maxima.js.js -mel.js -mel.js.js -mercury.js -mercury.js.js -mipsasm.js -mipsasm.js.js -mizar.js -mizar.js.js -mojolicious.js -mojolicious.js.js -monkey.js -monkey.js.js -moonscript.js -moonscript.js.js -n1ql.js -n1ql.js.js -nestedtext.js -nestedtext.js.js -nginx.js -nginx.js.js -nim.js -nim.js.js -nix.js -nix.js.js -node-repl.js -node-repl.js.js -nsis.js -nsis.js.js -objectivec.js -objectivec.js.js -ocaml.js -ocaml.js.js -openscad.js -openscad.js.js -oxygene.js -oxygene.js.js -parser3.js -parser3.js.js -perl.js -perl.js.js -pf.js -pf.js.js -pgsql.js -pgsql.js.js -php-template.js -php-template.js.js -php.js -php.js.js -plaintext.js -plaintext.js.js -pony.js -pony.js.js -powershell.js -powershell.js.js -processing.js -processing.js.js -profile.js -profile.js.js -prolog.js -prolog.js.js -properties.js -properties.js.js -protobuf.js -protobuf.js.js -puppet.js -puppet.js.js -purebasic.js -purebasic.js.js -python-repl.js -python-repl.js.js -python.js -python.js.js -q.js -q.js.js -qml.js -qml.js.js -r.js -r.js.js -reasonml.js -reasonml.js.js -rib.js -rib.js.js -roboconf.js -roboconf.js.js -routeros.js -routeros.js.js -rsl.js -rsl.js.js -ruby.js -ruby.js.js -ruleslanguage.js -ruleslanguage.js.js -rust.js -rust.js.js -sas.js -sas.js.js -scala.js -scala.js.js -scheme.js -scheme.js.js -scilab.js -scilab.js.js -scss.js -scss.js.js -shell.js -shell.js.js -smali.js -smali.js.js -smalltalk.js -smalltalk.js.js -sml.js -sml.js.js -sqf.js -sqf.js.js -sql.js -sql.js.js -stan.js -stan.js.js -stata.js -stata.js.js -step21.js -step21.js.js -stylus.js -stylus.js.js -subunit.js -subunit.js.js -swift.js -swift.js.js -taggerscript.js -taggerscript.js.js -tap.js -tap.js.js -tcl.js -tcl.js.js -thrift.js -thrift.js.js -tp.js -tp.js.js -twig.js -twig.js.js -typescript.js -typescript.js.js -vala.js -vala.js.js -vbnet.js -vbnet.js.js -vbscript-html.js -vbscript-html.js.js -vbscript.js -vbscript.js.js -verilog.js -verilog.js.js -vhdl.js -vhdl.js.js -vim.js -vim.js.js -wasm.js -wasm.js.js -wren.js -wren.js.js -x86asm.js -x86asm.js.js -xl.js -xl.js.js -xml.js -xml.js.js -xquery.js -xquery.js.js -yaml.js -yaml.js.js -zephir.js -zephir.js.js - -1c-light.scss -a11y-dark.scss -a11y-light.scss -agate.scss -an-old-hope.scss -androidstudio.scss -arduino-light.scss -arta.scss -ascetic.scss -atom-one-dark-reasonable.scss -atom-one-dark.scss -atom-one-light.scss -base16 -brown-paper.scss -codepen-embed.scss -color-brewer.scss -cybertopia-cherry.scss -cybertopia-dimmer.scss -cybertopia-icecap.scss -cybertopia-saturated.scss -dark.scss -default.scss -devibeans.scss -docco.scss -far.scss -felipec.scss -foundation.scss -github-dark-dimmed.scss -github-dark.scss -github.scss -gml.scss -googlecode.scss -gradient-dark.scss -gradient-light.scss -grayscale.scss -hybrid.scss -idea.scss -intellij-light.scss -ir-black.scss -isbl-editor-dark.scss -isbl-editor-light.scss -kimbie-dark.scss -kimbie-light.scss -lightfair.scss -lioshi.scss -magula.scss -mono-blue.scss -monokai-sublime.scss -monokai.scss -night-owl.scss -nnfx-dark.scss -nnfx-light.scss -nord.scss -obsidian.scss -panda-syntax-dark.scss -panda-syntax-light.scss -paraiso-dark.scss -paraiso-light.scss -pojoaque.scss -purebasic.scss -qtcreator-dark.scss -qtcreator-light.scss -rainbow.scss -rose-pine-dawn.scss -rose-pine-moon.scss -rose-pine.scss -routeros.scss -school-book.scss -shades-of-purple.scss -srcery.scss -stackoverflow-dark.scss -stackoverflow-light.scss -sunburst.scss -tokyo-night-dark.scss -tokyo-night-light.scss -tomorrow-night-blue.scss -tomorrow-night-bright.scss -vs.scss -vs2015.scss -xcode.scss -xt256.scss - -3024.scss -apathy.scss -apprentice.scss -ashes.scss -atelier-cave-light.scss -atelier-cave.scss -atelier-dune-light.scss -atelier-dune.scss -atelier-estuary-light.scss -atelier-estuary.scss -atelier-forest-light.scss -atelier-forest.scss -atelier-heath-light.scss -atelier-heath.scss -atelier-lakeside-light.scss -atelier-lakeside.scss -atelier-plateau-light.scss -atelier-plateau.scss -atelier-savanna-light.scss -atelier-savanna.scss -atelier-seaside-light.scss -atelier-seaside.scss -atelier-sulphurpool-light.scss -atelier-sulphurpool.scss -atlas.scss -bespin.scss -black-metal-bathory.scss -black-metal-burzum.scss -black-metal-dark-funeral.scss -black-metal-gorgoroth.scss -black-metal-immortal.scss -black-metal-khold.scss -black-metal-marduk.scss -black-metal-mayhem.scss -black-metal-nile.scss -black-metal-venom.scss -black-metal.scss -brewer.scss -bright.scss -brogrammer.scss -brush-trees-dark.scss -brush-trees.scss -chalk.scss -circus.scss -classic-dark.scss -classic-light.scss -codeschool.scss -colors.scss -cupcake.scss -cupertino.scss -danqing.scss -darcula.scss -dark-violet.scss -darkmoss.scss -darktooth.scss -decaf.scss -default-dark.scss -default-light.scss -dirtysea.scss -dracula.scss -edge-dark.scss -edge-light.scss -eighties.scss -embers.scss -equilibrium-dark.scss -equilibrium-gray-dark.scss -equilibrium-gray-light.scss -equilibrium-light.scss -espresso.scss -eva-dim.scss -eva.scss -flat.scss -framer.scss -fruit-soda.scss -gigavolt.scss -github.scss -google-dark.scss -google-light.scss -grayscale-dark.scss -grayscale-light.scss -green-screen.scss -gruvbox-dark-hard.scss -gruvbox-dark-medium.scss -gruvbox-dark-pale.scss -gruvbox-dark-soft.scss -gruvbox-light-hard.scss -gruvbox-light-medium.scss -gruvbox-light-soft.scss -hardcore.scss -harmonic16-dark.scss -harmonic16-light.scss -heetch-dark.scss -heetch-light.scss -helios.scss -hopscotch.scss -horizon-dark.scss -horizon-light.scss -humanoid-dark.scss -humanoid-light.scss -ia-dark.scss -ia-light.scss -icy-dark.scss -ir-black.scss -isotope.scss -kimber.scss -london-tube.scss -macintosh.scss -marrakesh.scss -materia.scss -material-darker.scss -material-lighter.scss -material-palenight.scss -material-vivid.scss -material.scss -mellow-purple.scss -mexico-light.scss -mocha.scss -monokai.scss -nebula.scss -nord.scss -nova.scss -ocean.scss -oceanicnext.scss -one-light.scss -onedark.scss -outrun-dark.scss -papercolor-dark.scss -papercolor-light.scss -paraiso.scss -pasque.scss -phd.scss -pico.scss -pop.scss -porple.scss -qualia.scss -railscasts.scss -rebecca.scss -ros-pine-dawn.scss -ros-pine-moon.scss -ros-pine.scss -sagelight.scss -sandcastle.scss -seti-ui.scss -shapeshifter.scss -silk-dark.scss -silk-light.scss -snazzy.scss -solar-flare-light.scss -solar-flare.scss -solarized-dark.scss -solarized-light.scss -spacemacs.scss -summercamp.scss -summerfruit-dark.scss -summerfruit-light.scss -synth-midnight-terminal-dark.scss -synth-midnight-terminal-light.scss -tango.scss -tender.scss -tomorrow-night.scss -tomorrow.scss -twilight.scss -unikitty-dark.scss -unikitty-light.scss -vulcan.scss -windows-10-light.scss -windows-10.scss -windows-95-light.scss -windows-95.scss -windows-high-contrast-light.scss -windows-high-contrast.scss -windows-nt-light.scss -windows-nt.scss -woodland.scss -xcode-dusk.scss -zenburn.scss - -1c-light.css -1c-light.min.css -a11y-dark.css -a11y-dark.min.css -a11y-light.css -a11y-light.min.css -agate.css -agate.min.css -an-old-hope.css -an-old-hope.min.css -androidstudio.css -androidstudio.min.css -arduino-light.css -arduino-light.min.css -arta.css -arta.min.css -ascetic.css -ascetic.min.css -atom-one-dark-reasonable.css -atom-one-dark-reasonable.min.css -atom-one-dark.css -atom-one-dark.min.css -atom-one-light.css -atom-one-light.min.css -base16 -brown-paper.css -brown-paper.min.css -brown-papersq.png -codepen-embed.css -codepen-embed.min.css -color-brewer.css -color-brewer.min.css -cybertopia-cherry.css -cybertopia-cherry.min.css -cybertopia-dimmer.css -cybertopia-dimmer.min.css -cybertopia-icecap.css -cybertopia-icecap.min.css -cybertopia-saturated.css -cybertopia-saturated.min.css -dark.css -dark.min.css -default.css -default.min.css -devibeans.css -devibeans.min.css -docco.css -docco.min.css -far.css -far.min.css -felipec.css -felipec.min.css -foundation.css -foundation.min.css -github-dark-dimmed.css -github-dark-dimmed.min.css -github-dark.css -github-dark.min.css -github.css -github.min.css -gml.css -gml.min.css -googlecode.css -googlecode.min.css -gradient-dark.css -gradient-dark.min.css -gradient-light.css -gradient-light.min.css -grayscale.css -grayscale.min.css -hybrid.css -hybrid.min.css -idea.css -idea.min.css -intellij-light.css -intellij-light.min.css -ir-black.css -ir-black.min.css -isbl-editor-dark.css -isbl-editor-dark.min.css -isbl-editor-light.css -isbl-editor-light.min.css -kimbie-dark.css -kimbie-dark.min.css -kimbie-light.css -kimbie-light.min.css -lightfair.css -lightfair.min.css -lioshi.css -lioshi.min.css -magula.css -magula.min.css -mono-blue.css -mono-blue.min.css -monokai-sublime.css -monokai-sublime.min.css -monokai.css -monokai.min.css -night-owl.css -night-owl.min.css -nnfx-dark.css -nnfx-dark.min.css -nnfx-light.css -nnfx-light.min.css -nord.css -nord.min.css -obsidian.css -obsidian.min.css -panda-syntax-dark.css -panda-syntax-dark.min.css -panda-syntax-light.css -panda-syntax-light.min.css -paraiso-dark.css -paraiso-dark.min.css -paraiso-light.css -paraiso-light.min.css -pojoaque.css -pojoaque.jpg -pojoaque.min.css -purebasic.css -purebasic.min.css -qtcreator-dark.css -qtcreator-dark.min.css -qtcreator-light.css -qtcreator-light.min.css -rainbow.css -rainbow.min.css -rose-pine-dawn.css -rose-pine-dawn.min.css -rose-pine-moon.css -rose-pine-moon.min.css -rose-pine.css -rose-pine.min.css -routeros.css -routeros.min.css -school-book.css -school-book.min.css -shades-of-purple.css -shades-of-purple.min.css -srcery.css -srcery.min.css -stackoverflow-dark.css -stackoverflow-dark.min.css -stackoverflow-light.css -stackoverflow-light.min.css -sunburst.css -sunburst.min.css -tokyo-night-dark.css -tokyo-night-dark.min.css -tokyo-night-light.css -tokyo-night-light.min.css -tomorrow-night-blue.css -tomorrow-night-blue.min.css -tomorrow-night-bright.css -tomorrow-night-bright.min.css -vs.css -vs.min.css -vs2015.css -vs2015.min.css -xcode.css -xcode.min.css -xt256.css -xt256.min.css - -3024.css -3024.min.css -apathy.css -apathy.min.css -apprentice.css -apprentice.min.css -ashes.css -ashes.min.css -atelier-cave-light.css -atelier-cave-light.min.css -atelier-cave.css -atelier-cave.min.css -atelier-dune-light.css -atelier-dune-light.min.css -atelier-dune.css -atelier-dune.min.css -atelier-estuary-light.css -atelier-estuary-light.min.css -atelier-estuary.css -atelier-estuary.min.css -atelier-forest-light.css -atelier-forest-light.min.css -atelier-forest.css -atelier-forest.min.css -atelier-heath-light.css -atelier-heath-light.min.css -atelier-heath.css -atelier-heath.min.css -atelier-lakeside-light.css -atelier-lakeside-light.min.css -atelier-lakeside.css -atelier-lakeside.min.css -atelier-plateau-light.css -atelier-plateau-light.min.css -atelier-plateau.css -atelier-plateau.min.css -atelier-savanna-light.css -atelier-savanna-light.min.css -atelier-savanna.css -atelier-savanna.min.css -atelier-seaside-light.css -atelier-seaside-light.min.css -atelier-seaside.css -atelier-seaside.min.css -atelier-sulphurpool-light.css -atelier-sulphurpool-light.min.css -atelier-sulphurpool.css -atelier-sulphurpool.min.css -atlas.css -atlas.min.css -bespin.css -bespin.min.css -black-metal-bathory.css -black-metal-bathory.min.css -black-metal-burzum.css -black-metal-burzum.min.css -black-metal-dark-funeral.css -black-metal-dark-funeral.min.css -black-metal-gorgoroth.css -black-metal-gorgoroth.min.css -black-metal-immortal.css -black-metal-immortal.min.css -black-metal-khold.css -black-metal-khold.min.css -black-metal-marduk.css -black-metal-marduk.min.css -black-metal-mayhem.css -black-metal-mayhem.min.css -black-metal-nile.css -black-metal-nile.min.css -black-metal-venom.css -black-metal-venom.min.css -black-metal.css -black-metal.min.css -brewer.css -brewer.min.css -bright.css -bright.min.css -brogrammer.css -brogrammer.min.css -brush-trees-dark.css -brush-trees-dark.min.css -brush-trees.css -brush-trees.min.css -chalk.css -chalk.min.css -circus.css -circus.min.css -classic-dark.css -classic-dark.min.css -classic-light.css -classic-light.min.css -codeschool.css -codeschool.min.css -colors.css -colors.min.css -cupcake.css -cupcake.min.css -cupertino.css -cupertino.min.css -danqing.css -danqing.min.css -darcula.css -darcula.min.css -dark-violet.css -dark-violet.min.css -darkmoss.css -darkmoss.min.css -darktooth.css -darktooth.min.css -decaf.css -decaf.min.css -default-dark.css -default-dark.min.css -default-light.css -default-light.min.css -dirtysea.css -dirtysea.min.css -dracula.css -dracula.min.css -edge-dark.css -edge-dark.min.css -edge-light.css -edge-light.min.css -eighties.css -eighties.min.css -embers.css -embers.min.css -equilibrium-dark.css -equilibrium-dark.min.css -equilibrium-gray-dark.css -equilibrium-gray-dark.min.css -equilibrium-gray-light.css -equilibrium-gray-light.min.css -equilibrium-light.css -equilibrium-light.min.css -espresso.css -espresso.min.css -eva-dim.css -eva-dim.min.css -eva.css -eva.min.css -flat.css -flat.min.css -framer.css -framer.min.css -fruit-soda.css -fruit-soda.min.css -gigavolt.css -gigavolt.min.css -github.css -github.min.css -google-dark.css -google-dark.min.css -google-light.css -google-light.min.css -grayscale-dark.css -grayscale-dark.min.css -grayscale-light.css -grayscale-light.min.css -green-screen.css -green-screen.min.css -gruvbox-dark-hard.css -gruvbox-dark-hard.min.css -gruvbox-dark-medium.css -gruvbox-dark-medium.min.css -gruvbox-dark-pale.css -gruvbox-dark-pale.min.css -gruvbox-dark-soft.css -gruvbox-dark-soft.min.css -gruvbox-light-hard.css -gruvbox-light-hard.min.css -gruvbox-light-medium.css -gruvbox-light-medium.min.css -gruvbox-light-soft.css -gruvbox-light-soft.min.css -hardcore.css -hardcore.min.css -harmonic16-dark.css -harmonic16-dark.min.css -harmonic16-light.css -harmonic16-light.min.css -heetch-dark.css -heetch-dark.min.css -heetch-light.css -heetch-light.min.css -helios.css -helios.min.css -hopscotch.css -hopscotch.min.css -horizon-dark.css -horizon-dark.min.css -horizon-light.css -horizon-light.min.css -humanoid-dark.css -humanoid-dark.min.css -humanoid-light.css -humanoid-light.min.css -ia-dark.css -ia-dark.min.css -ia-light.css -ia-light.min.css -icy-dark.css -icy-dark.min.css -ir-black.css -ir-black.min.css -isotope.css -isotope.min.css -kimber.css -kimber.min.css -london-tube.css -london-tube.min.css -macintosh.css -macintosh.min.css -marrakesh.css -marrakesh.min.css -materia.css -materia.min.css -material-darker.css -material-darker.min.css -material-lighter.css -material-lighter.min.css -material-palenight.css -material-palenight.min.css -material-vivid.css -material-vivid.min.css -material.css -material.min.css -mellow-purple.css -mellow-purple.min.css -mexico-light.css -mexico-light.min.css -mocha.css -mocha.min.css -monokai.css -monokai.min.css -nebula.css -nebula.min.css -nord.css -nord.min.css -nova.css -nova.min.css -ocean.css -ocean.min.css -oceanicnext.css -oceanicnext.min.css -one-light.css -one-light.min.css -onedark.css -onedark.min.css -outrun-dark.css -outrun-dark.min.css -papercolor-dark.css -papercolor-dark.min.css -papercolor-light.css -papercolor-light.min.css -paraiso.css -paraiso.min.css -pasque.css -pasque.min.css -phd.css -phd.min.css -pico.css -pico.min.css -pop.css -pop.min.css -porple.css -porple.min.css -qualia.css -qualia.min.css -railscasts.css -railscasts.min.css -rebecca.css -rebecca.min.css -ros-pine-dawn.css -ros-pine-dawn.min.css -ros-pine-moon.css -ros-pine-moon.min.css -ros-pine.css -ros-pine.min.css -sagelight.css -sagelight.min.css -sandcastle.css -sandcastle.min.css -seti-ui.css -seti-ui.min.css -shapeshifter.css -shapeshifter.min.css -silk-dark.css -silk-dark.min.css -silk-light.css -silk-light.min.css -snazzy.css -snazzy.min.css -solar-flare-light.css -solar-flare-light.min.css -solar-flare.css -solar-flare.min.css -solarized-dark.css -solarized-dark.min.css -solarized-light.css -solarized-light.min.css -spacemacs.css -spacemacs.min.css -summercamp.css -summercamp.min.css -summerfruit-dark.css -summerfruit-dark.min.css -summerfruit-light.css -summerfruit-light.min.css -synth-midnight-terminal-dark.css -synth-midnight-terminal-dark.min.css -synth-midnight-terminal-light.css -synth-midnight-terminal-light.min.css -tango.css -tango.min.css -tender.css -tender.min.css -tomorrow-night.css -tomorrow-night.min.css -tomorrow.css -tomorrow.min.css -twilight.css -twilight.min.css -unikitty-dark.css -unikitty-dark.min.css -unikitty-light.css -unikitty-light.min.css -vulcan.css -vulcan.min.css -windows-10-light.css -windows-10-light.min.css -windows-10.css -windows-10.min.css -windows-95-light.css -windows-95-light.min.css -windows-95.css -windows-95.min.css -windows-high-contrast-light.css -windows-high-contrast-light.min.css -windows-high-contrast.css -windows-high-contrast.min.css -windows-nt-light.css -windows-nt-light.min.css -windows-nt.css -windows-nt.min.css -woodland.css -woodland.min.css -xcode-dusk.css -xcode-dusk.min.css -zenburn.css -zenburn.min.css - -index.d.ts - -README.md -dist -package.json - -html-parse-stringify.js -html-parse-stringify.js.map -html-parse-stringify.modern.js -html-parse-stringify.modern.js.map -html-parse-stringify.module.js -html-parse-stringify.module.js.map -html-parse-stringify.umd.js -html-parse-stringify.umd.js.map - -LICENSE -README.md -dist -i18next.js -i18next.min.js -index.d.mts -index.d.ts -index.js -index.v4.d.ts -package.json -typescript - -cjs -esm -umd - -i18next.js - -i18next.bundled.js -i18next.js -package.json - -i18next.js -i18next.min.js - -helpers.d.ts -options.d.ts -t.d.ts -t.v4.d.ts - -CHANGELOG.md -LICENSE -README.md -dist -i18nextBrowserLanguageDetector.js -i18nextBrowserLanguageDetector.min.js -index.d.mts -index.d.ts -index.js -package.json -tsconfig.nonEsModuleInterop.json - -cjs -esm -umd - -i18nextBrowserLanguageDetector.js - -i18nextBrowserLanguageDetector.js -package.json - -i18nextBrowserLanguageDetector.js -i18nextBrowserLanguageDetector.min.js - -LICENSE-MIT -README.md -index.d.ts -index.js -legacy.js -package.json - -index.d.ts -index.js -license -package.json -readme.md - -README.md -imurmurhash.js -imurmurhash.min.js -package.json - -README.md -dist -package.json - -index.d.mts -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map - -LICENSE -README.md -dist -package.json -src - -internmap.js -internmap.min.js - -index.js - -index.d.ts -index.js -license -package.json -readme.md - -CHANGELOG.md -LICENSE -README.md -core.json -index.js -package.json -test - -index.js - -LICENSE -README.md -index.js -package.json - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -index.js -mode.js -package.json -test -windows.js - -basic.js - -LICENSE.md -README.md -dist -package.json - -commonjs -esm - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -parse-args-cjs.cjs.map -parse-args-cjs.d.cts.map -parse-args.d.ts -parse-args.js - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -parse-args.d.ts -parse-args.d.ts.map -parse-args.js -parse-args.js.map - -LICENSE -README.md -bin -dist -lib -package.json -register.js - -jiti.js - -babel.d.ts -babel.js -jiti.d.ts -jiti.js -plugins -types.d.ts -utils.d.ts - -babel-plugin-transform-import-meta.d.ts -import-meta-env.d.ts - -index.js - -CHANGELOG.md -LICENSE -README.md -index.js -package.json - -CHANGELOG.md -LICENSE -README.md -bin -dist -index.js -lib -package.json - -js-yaml.js - -js-yaml.js -js-yaml.min.js -js-yaml.mjs - -common.js -dumper.js -exception.js -loader.js -schema -schema.js -snippet.js -type -type.js - -core.js -default.js -failsafe.js -json.js - -binary.js -bool.js -float.js -int.js -map.js -merge.js -null.js -omap.js -pairs.js -seq.js -set.js -str.js -timestamp.js - -LICENSE -README.md -index.js -package.json -test - -index.js - -LICENSE -README.md -index.js -package.json -spec - -fixtures -index.spec.js - -schema.js - -LICENSE -example -index.js -package.json -readme.markdown -test - -key_cmp.js -nested.js -str.js -value_cmp.js - -cmp.js -nested.js -replacer.js -space.js -str.js -to-json.js - -CHANGELOG.md -LICENSE -Makefile -README.md -package.json -stringify.js -test - -mocha.opts -stringify_test.js - -README.md -package.json -src - -index.d.ts -index.js - -LICENSE -README.md -lib -package.json - -cast.js -index.js -parse-string.js - -LICENSE -package.json -readme.md -src - -index.d.ts -index.js - -LICENSE -README.md -build -package.json - -index.d.ts -index.js - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -_DataView.js -_Hash.js -_LazyWrapper.js -_ListCache.js -_LodashWrapper.js -_Map.js -_MapCache.js -_Promise.js -_Set.js -_SetCache.js -_Stack.js -_Symbol.js -_Uint8Array.js -_WeakMap.js -_apply.js -_arrayAggregator.js -_arrayEach.js -_arrayEachRight.js -_arrayEvery.js -_arrayFilter.js -_arrayIncludes.js -_arrayIncludesWith.js -_arrayLikeKeys.js -_arrayMap.js -_arrayPush.js -_arrayReduce.js -_arrayReduceRight.js -_arraySample.js -_arraySampleSize.js -_arrayShuffle.js -_arraySome.js -_asciiSize.js -_asciiToArray.js -_asciiWords.js -_assignMergeValue.js -_assignValue.js -_assocIndexOf.js -_baseAggregator.js -_baseAssign.js -_baseAssignIn.js -_baseAssignValue.js -_baseAt.js -_baseClamp.js -_baseClone.js -_baseConforms.js -_baseConformsTo.js -_baseCreate.js -_baseDelay.js -_baseDifference.js -_baseEach.js -_baseEachRight.js -_baseEvery.js -_baseExtremum.js -_baseFill.js -_baseFilter.js -_baseFindIndex.js -_baseFindKey.js -_baseFlatten.js -_baseFor.js -_baseForOwn.js -_baseForOwnRight.js -_baseForRight.js -_baseFunctions.js -_baseGet.js -_baseGetAllKeys.js -_baseGetTag.js -_baseGt.js -_baseHas.js -_baseHasIn.js -_baseInRange.js -_baseIndexOf.js -_baseIndexOfWith.js -_baseIntersection.js -_baseInverter.js -_baseInvoke.js -_baseIsArguments.js -_baseIsArrayBuffer.js -_baseIsDate.js -_baseIsEqual.js -_baseIsEqualDeep.js -_baseIsMap.js -_baseIsMatch.js -_baseIsNaN.js -_baseIsNative.js -_baseIsRegExp.js -_baseIsSet.js -_baseIsTypedArray.js -_baseIteratee.js -_baseKeys.js -_baseKeysIn.js -_baseLodash.js -_baseLt.js -_baseMap.js -_baseMatches.js -_baseMatchesProperty.js -_baseMean.js -_baseMerge.js -_baseMergeDeep.js -_baseNth.js -_baseOrderBy.js -_basePick.js -_basePickBy.js -_baseProperty.js -_basePropertyDeep.js -_basePropertyOf.js -_basePullAll.js -_basePullAt.js -_baseRandom.js -_baseRange.js -_baseReduce.js -_baseRepeat.js -_baseRest.js -_baseSample.js -_baseSampleSize.js -_baseSet.js -_baseSetData.js -_baseSetToString.js -_baseShuffle.js -_baseSlice.js -_baseSome.js -_baseSortBy.js -_baseSortedIndex.js -_baseSortedIndexBy.js -_baseSortedUniq.js -_baseSum.js -_baseTimes.js -_baseToNumber.js -_baseToPairs.js -_baseToString.js -_baseTrim.js -_baseUnary.js -_baseUniq.js -_baseUnset.js -_baseUpdate.js -_baseValues.js -_baseWhile.js -_baseWrapperValue.js -_baseXor.js -_baseZipObject.js -_cacheHas.js -_castArrayLikeObject.js -_castFunction.js -_castPath.js -_castRest.js -_castSlice.js -_charsEndIndex.js -_charsStartIndex.js -_cloneArrayBuffer.js -_cloneBuffer.js -_cloneDataView.js -_cloneRegExp.js -_cloneSymbol.js -_cloneTypedArray.js -_compareAscending.js -_compareMultiple.js -_composeArgs.js -_composeArgsRight.js -_copyArray.js -_copyObject.js -_copySymbols.js -_copySymbolsIn.js -_coreJsData.js -_countHolders.js -_createAggregator.js -_createAssigner.js -_createBaseEach.js -_createBaseFor.js -_createBind.js -_createCaseFirst.js -_createCompounder.js -_createCtor.js -_createCurry.js -_createFind.js -_createFlow.js -_createHybrid.js -_createInverter.js -_createMathOperation.js -_createOver.js -_createPadding.js -_createPartial.js -_createRange.js -_createRecurry.js -_createRelationalOperation.js -_createRound.js -_createSet.js -_createToPairs.js -_createWrap.js -_customDefaultsAssignIn.js -_customDefaultsMerge.js -_customOmitClone.js -_deburrLetter.js -_defineProperty.js -_equalArrays.js -_equalByTag.js -_equalObjects.js -_escapeHtmlChar.js -_escapeStringChar.js -_flatRest.js -_freeGlobal.js -_getAllKeys.js -_getAllKeysIn.js -_getData.js -_getFuncName.js -_getHolder.js -_getMapData.js -_getMatchData.js -_getNative.js -_getPrototype.js -_getRawTag.js -_getSymbols.js -_getSymbolsIn.js -_getTag.js -_getValue.js -_getView.js -_getWrapDetails.js -_hasPath.js -_hasUnicode.js -_hasUnicodeWord.js -_hashClear.js -_hashDelete.js -_hashGet.js -_hashHas.js -_hashSet.js -_initCloneArray.js -_initCloneByTag.js -_initCloneObject.js -_insertWrapDetails.js -_isFlattenable.js -_isIndex.js -_isIterateeCall.js -_isKey.js -_isKeyable.js -_isLaziable.js -_isMaskable.js -_isMasked.js -_isPrototype.js -_isStrictComparable.js -_iteratorToArray.js -_lazyClone.js -_lazyReverse.js -_lazyValue.js -_listCacheClear.js -_listCacheDelete.js -_listCacheGet.js -_listCacheHas.js -_listCacheSet.js -_mapCacheClear.js -_mapCacheDelete.js -_mapCacheGet.js -_mapCacheHas.js -_mapCacheSet.js -_mapToArray.js -_matchesStrictComparable.js -_memoizeCapped.js -_mergeData.js -_metaMap.js -_nativeCreate.js -_nativeKeys.js -_nativeKeysIn.js -_nodeUtil.js -_objectToString.js -_overArg.js -_overRest.js -_parent.js -_reEscape.js -_reEvaluate.js -_reInterpolate.js -_realNames.js -_reorder.js -_replaceHolders.js -_root.js -_safeGet.js -_setCacheAdd.js -_setCacheHas.js -_setData.js -_setToArray.js -_setToPairs.js -_setToString.js -_setWrapToString.js -_shortOut.js -_shuffleSelf.js -_stackClear.js -_stackDelete.js -_stackGet.js -_stackHas.js -_stackSet.js -_strictIndexOf.js -_strictLastIndexOf.js -_stringSize.js -_stringToArray.js -_stringToPath.js -_toKey.js -_toSource.js -_trimmedEndIndex.js -_unescapeHtmlChar.js -_unicodeSize.js -_unicodeToArray.js -_unicodeWords.js -_updateWrapDetails.js -_wrapperClone.js -add.js -after.js -array.js -ary.js -assign.js -assignIn.js -assignInWith.js -assignWith.js -at.js -attempt.js -before.js -bind.js -bindAll.js -bindKey.js -camelCase.js -capitalize.js -castArray.js -ceil.js -chain.js -chunk.js -clamp.js -clone.js -cloneDeep.js -cloneDeepWith.js -cloneWith.js -collection.js -commit.js -compact.js -concat.js -cond.js -conforms.js -conformsTo.js -constant.js -core.js -core.min.js -countBy.js -create.js -curry.js -curryRight.js -date.js -debounce.js -deburr.js -defaultTo.js -defaults.js -defaultsDeep.js -defer.js -delay.js -difference.js -differenceBy.js -differenceWith.js -divide.js -drop.js -dropRight.js -dropRightWhile.js -dropWhile.js -each.js -eachRight.js -endsWith.js -entries.js -entriesIn.js -eq.js -escape.js -escapeRegExp.js -every.js -extend.js -extendWith.js -fill.js -filter.js -find.js -findIndex.js -findKey.js -findLast.js -findLastIndex.js -findLastKey.js -first.js -flake.lock -flake.nix -flatMap.js -flatMapDeep.js -flatMapDepth.js -flatten.js -flattenDeep.js -flattenDepth.js -flip.js -floor.js -flow.js -flowRight.js -forEach.js -forEachRight.js -forIn.js -forInRight.js -forOwn.js -forOwnRight.js -fp -fp.js -fromPairs.js -function.js -functions.js -functionsIn.js -get.js -groupBy.js -gt.js -gte.js -has.js -hasIn.js -head.js -identity.js -inRange.js -includes.js -index.js -indexOf.js -initial.js -intersection.js -intersectionBy.js -intersectionWith.js -invert.js -invertBy.js -invoke.js -invokeMap.js -isArguments.js -isArray.js -isArrayBuffer.js -isArrayLike.js -isArrayLikeObject.js -isBoolean.js -isBuffer.js -isDate.js -isElement.js -isEmpty.js -isEqual.js -isEqualWith.js -isError.js -isFinite.js -isFunction.js -isInteger.js -isLength.js -isMap.js -isMatch.js -isMatchWith.js -isNaN.js -isNative.js -isNil.js -isNull.js -isNumber.js -isObject.js -isObjectLike.js -isPlainObject.js -isRegExp.js -isSafeInteger.js -isSet.js -isString.js -isSymbol.js -isTypedArray.js -isUndefined.js -isWeakMap.js -isWeakSet.js -iteratee.js -join.js -kebabCase.js -keyBy.js -keys.js -keysIn.js -lang.js -last.js -lastIndexOf.js -lodash.js -lodash.min.js -lowerCase.js -lowerFirst.js -lt.js -lte.js -map.js -mapKeys.js -mapValues.js -matches.js -matchesProperty.js -math.js -max.js -maxBy.js -mean.js -meanBy.js -memoize.js -merge.js -mergeWith.js -method.js -methodOf.js -min.js -minBy.js -mixin.js -multiply.js -negate.js -next.js -noop.js -now.js -nth.js -nthArg.js -number.js -object.js -omit.js -omitBy.js -once.js -orderBy.js -over.js -overArgs.js -overEvery.js -overSome.js -package.json -pad.js -padEnd.js -padStart.js -parseInt.js -partial.js -partialRight.js -partition.js -pick.js -pickBy.js -plant.js -property.js -propertyOf.js -pull.js -pullAll.js -pullAllBy.js -pullAllWith.js -pullAt.js -random.js -range.js -rangeRight.js -rearg.js -reduce.js -reduceRight.js -reject.js -release.md -remove.js -repeat.js -replace.js -rest.js -result.js -reverse.js -round.js -sample.js -sampleSize.js -seq.js -set.js -setWith.js -shuffle.js -size.js -slice.js -snakeCase.js -some.js -sortBy.js -sortedIndex.js -sortedIndexBy.js -sortedIndexOf.js -sortedLastIndex.js -sortedLastIndexBy.js -sortedLastIndexOf.js -sortedUniq.js -sortedUniqBy.js -split.js -spread.js -startCase.js -startsWith.js -string.js -stubArray.js -stubFalse.js -stubObject.js -stubString.js -stubTrue.js -subtract.js -sum.js -sumBy.js -tail.js -take.js -takeRight.js -takeRightWhile.js -takeWhile.js -tap.js -template.js -templateSettings.js -throttle.js -thru.js -times.js -toArray.js -toFinite.js -toInteger.js -toIterator.js -toJSON.js -toLength.js -toLower.js -toNumber.js -toPairs.js -toPairsIn.js -toPath.js -toPlainObject.js -toSafeInteger.js -toString.js -toUpper.js -transform.js -trim.js -trimEnd.js -trimStart.js -truncate.js -unary.js -unescape.js -union.js -unionBy.js -unionWith.js -uniq.js -uniqBy.js -uniqWith.js -uniqueId.js -unset.js -unzip.js -unzipWith.js -update.js -updateWith.js -upperCase.js -upperFirst.js -util.js -value.js -valueOf.js -values.js -valuesIn.js -without.js -words.js -wrap.js -wrapperAt.js -wrapperChain.js -wrapperLodash.js -wrapperReverse.js -wrapperValue.js -xor.js -xorBy.js -xorWith.js -zip.js -zipObject.js -zipObjectDeep.js -zipWith.js - -F.js -T.js -__.js -_baseConvert.js -_convertBrowser.js -_falseOptions.js -_mapping.js -_util.js -add.js -after.js -all.js -allPass.js -always.js -any.js -anyPass.js -apply.js -array.js -ary.js -assign.js -assignAll.js -assignAllWith.js -assignIn.js -assignInAll.js -assignInAllWith.js -assignInWith.js -assignWith.js -assoc.js -assocPath.js -at.js -attempt.js -before.js -bind.js -bindAll.js -bindKey.js -camelCase.js -capitalize.js -castArray.js -ceil.js -chain.js -chunk.js -clamp.js -clone.js -cloneDeep.js -cloneDeepWith.js -cloneWith.js -collection.js -commit.js -compact.js -complement.js -compose.js -concat.js -cond.js -conforms.js -conformsTo.js -constant.js -contains.js -convert.js -countBy.js -create.js -curry.js -curryN.js -curryRight.js -curryRightN.js -date.js -debounce.js -deburr.js -defaultTo.js -defaults.js -defaultsAll.js -defaultsDeep.js -defaultsDeepAll.js -defer.js -delay.js -difference.js -differenceBy.js -differenceWith.js -dissoc.js -dissocPath.js -divide.js -drop.js -dropLast.js -dropLastWhile.js -dropRight.js -dropRightWhile.js -dropWhile.js -each.js -eachRight.js -endsWith.js -entries.js -entriesIn.js -eq.js -equals.js -escape.js -escapeRegExp.js -every.js -extend.js -extendAll.js -extendAllWith.js -extendWith.js -fill.js -filter.js -find.js -findFrom.js -findIndex.js -findIndexFrom.js -findKey.js -findLast.js -findLastFrom.js -findLastIndex.js -findLastIndexFrom.js -findLastKey.js -first.js -flatMap.js -flatMapDeep.js -flatMapDepth.js -flatten.js -flattenDeep.js -flattenDepth.js -flip.js -floor.js -flow.js -flowRight.js -forEach.js -forEachRight.js -forIn.js -forInRight.js -forOwn.js -forOwnRight.js -fromPairs.js -function.js -functions.js -functionsIn.js -get.js -getOr.js -groupBy.js -gt.js -gte.js -has.js -hasIn.js -head.js -identical.js -identity.js -inRange.js -includes.js -includesFrom.js -indexBy.js -indexOf.js -indexOfFrom.js -init.js -initial.js -intersection.js -intersectionBy.js -intersectionWith.js -invert.js -invertBy.js -invertObj.js -invoke.js -invokeArgs.js -invokeArgsMap.js -invokeMap.js -isArguments.js -isArray.js -isArrayBuffer.js -isArrayLike.js -isArrayLikeObject.js -isBoolean.js -isBuffer.js -isDate.js -isElement.js -isEmpty.js -isEqual.js -isEqualWith.js -isError.js -isFinite.js -isFunction.js -isInteger.js -isLength.js -isMap.js -isMatch.js -isMatchWith.js -isNaN.js -isNative.js -isNil.js -isNull.js -isNumber.js -isObject.js -isObjectLike.js -isPlainObject.js -isRegExp.js -isSafeInteger.js -isSet.js -isString.js -isSymbol.js -isTypedArray.js -isUndefined.js -isWeakMap.js -isWeakSet.js -iteratee.js -join.js -juxt.js -kebabCase.js -keyBy.js -keys.js -keysIn.js -lang.js -last.js -lastIndexOf.js -lastIndexOfFrom.js -lowerCase.js -lowerFirst.js -lt.js -lte.js -map.js -mapKeys.js -mapValues.js -matches.js -matchesProperty.js -math.js -max.js -maxBy.js -mean.js -meanBy.js -memoize.js -merge.js -mergeAll.js -mergeAllWith.js -mergeWith.js -method.js -methodOf.js -min.js -minBy.js -mixin.js -multiply.js -nAry.js -negate.js -next.js -noop.js -now.js -nth.js -nthArg.js -number.js -object.js -omit.js -omitAll.js -omitBy.js -once.js -orderBy.js -over.js -overArgs.js -overEvery.js -overSome.js -pad.js -padChars.js -padCharsEnd.js -padCharsStart.js -padEnd.js -padStart.js -parseInt.js -partial.js -partialRight.js -partition.js -path.js -pathEq.js -pathOr.js -paths.js -pick.js -pickAll.js -pickBy.js -pipe.js -placeholder.js -plant.js -pluck.js -prop.js -propEq.js -propOr.js -property.js -propertyOf.js -props.js -pull.js -pullAll.js -pullAllBy.js -pullAllWith.js -pullAt.js -random.js -range.js -rangeRight.js -rangeStep.js -rangeStepRight.js -rearg.js -reduce.js -reduceRight.js -reject.js -remove.js -repeat.js -replace.js -rest.js -restFrom.js -result.js -reverse.js -round.js -sample.js -sampleSize.js -seq.js -set.js -setWith.js -shuffle.js -size.js -slice.js -snakeCase.js -some.js -sortBy.js -sortedIndex.js -sortedIndexBy.js -sortedIndexOf.js -sortedLastIndex.js -sortedLastIndexBy.js -sortedLastIndexOf.js -sortedUniq.js -sortedUniqBy.js -split.js -spread.js -spreadFrom.js -startCase.js -startsWith.js -string.js -stubArray.js -stubFalse.js -stubObject.js -stubString.js -stubTrue.js -subtract.js -sum.js -sumBy.js -symmetricDifference.js -symmetricDifferenceBy.js -symmetricDifferenceWith.js -tail.js -take.js -takeLast.js -takeLastWhile.js -takeRight.js -takeRightWhile.js -takeWhile.js -tap.js -template.js -templateSettings.js -throttle.js -thru.js -times.js -toArray.js -toFinite.js -toInteger.js -toIterator.js -toJSON.js -toLength.js -toLower.js -toNumber.js -toPairs.js -toPairsIn.js -toPath.js -toPlainObject.js -toSafeInteger.js -toString.js -toUpper.js -transform.js -trim.js -trimChars.js -trimCharsEnd.js -trimCharsStart.js -trimEnd.js -trimStart.js -truncate.js -unapply.js -unary.js -unescape.js -union.js -unionBy.js -unionWith.js -uniq.js -uniqBy.js -uniqWith.js -uniqueId.js -unnest.js -unset.js -unzip.js -unzipWith.js -update.js -updateWith.js -upperCase.js -upperFirst.js -useWith.js -util.js -value.js -valueOf.js -values.js -valuesIn.js -where.js -whereEq.js -without.js -words.js -wrap.js -wrapperAt.js -wrapperChain.js -wrapperLodash.js -wrapperReverse.js -wrapperValue.js -xor.js -xorBy.js -xorWith.js -zip.js -zipAll.js -zipObj.js -zipObject.js -zipObjectDeep.js -zipWith.js - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -cli.js -custom.js -index.js -loose-envify.js -package.json -replace.js - -LICENSE -README.md -dist -package.json - -commonjs -esm - -index.d.ts -index.d.ts.map -index.js -index.js.map -index.min.js -index.min.js.map -package.json - -index.d.ts -index.d.ts.map -index.js -index.js.map -index.min.js -index.min.js.map -package.json - -LICENSE -README.md -dist -dynamicIconImports.d.ts -dynamicIconImports.js -dynamicIconImports.js.map -package.json - -cjs -esm -lucide-react.d.ts -lucide-react.prefixed.d.ts -lucide-react.suffixed.d.ts -umd - -lucide-react.js -lucide-react.js.map - -Icon.js -Icon.js.map -createLucideIcon.js -createLucideIcon.js.map -defaultAttributes.js -defaultAttributes.js.map -icons -lucide-react.js -lucide-react.js.map -shared - -a-arrow-down.js -a-arrow-down.js.map -a-arrow-up.js -a-arrow-up.js.map -a-large-small.js -a-large-small.js.map -accessibility.js -accessibility.js.map -activity-square.js -activity-square.js.map -activity.js -activity.js.map -air-vent.js -air-vent.js.map -airplay.js -airplay.js.map -alarm-check.js -alarm-check.js.map -alarm-clock-check.js -alarm-clock-check.js.map -alarm-clock-minus.js -alarm-clock-minus.js.map -alarm-clock-off.js -alarm-clock-off.js.map -alarm-clock-plus.js -alarm-clock-plus.js.map -alarm-clock.js -alarm-clock.js.map -alarm-minus.js -alarm-minus.js.map -alarm-plus.js -alarm-plus.js.map -alarm-smoke.js -alarm-smoke.js.map -album.js -album.js.map -alert-circle.js -alert-circle.js.map -alert-octagon.js -alert-octagon.js.map -alert-triangle.js -alert-triangle.js.map -align-center-horizontal.js -align-center-horizontal.js.map -align-center-vertical.js -align-center-vertical.js.map -align-center.js -align-center.js.map -align-end-horizontal.js -align-end-horizontal.js.map -align-end-vertical.js -align-end-vertical.js.map -align-horizontal-distribute-center.js -align-horizontal-distribute-center.js.map -align-horizontal-distribute-end.js -align-horizontal-distribute-end.js.map -align-horizontal-distribute-start.js -align-horizontal-distribute-start.js.map -align-horizontal-justify-center.js -align-horizontal-justify-center.js.map -align-horizontal-justify-end.js -align-horizontal-justify-end.js.map -align-horizontal-justify-start.js -align-horizontal-justify-start.js.map -align-horizontal-space-around.js -align-horizontal-space-around.js.map -align-horizontal-space-between.js -align-horizontal-space-between.js.map -align-justify.js -align-justify.js.map -align-left.js -align-left.js.map -align-right.js -align-right.js.map -align-start-horizontal.js -align-start-horizontal.js.map -align-start-vertical.js -align-start-vertical.js.map -align-vertical-distribute-center.js -align-vertical-distribute-center.js.map -align-vertical-distribute-end.js -align-vertical-distribute-end.js.map -align-vertical-distribute-start.js -align-vertical-distribute-start.js.map -align-vertical-justify-center.js -align-vertical-justify-center.js.map -align-vertical-justify-end.js -align-vertical-justify-end.js.map -align-vertical-justify-start.js -align-vertical-justify-start.js.map -align-vertical-space-around.js -align-vertical-space-around.js.map -align-vertical-space-between.js -align-vertical-space-between.js.map -ambulance.js -ambulance.js.map -ampersand.js -ampersand.js.map -ampersands.js -ampersands.js.map -amphora.js -amphora.js.map -anchor.js -anchor.js.map -angry.js -angry.js.map -annoyed.js -annoyed.js.map -antenna.js -antenna.js.map -anvil.js -anvil.js.map -aperture.js -aperture.js.map -app-window-mac.js -app-window-mac.js.map -app-window.js -app-window.js.map -apple.js -apple.js.map -archive-restore.js -archive-restore.js.map -archive-x.js -archive-x.js.map -archive.js -archive.js.map -area-chart.js -area-chart.js.map -armchair.js -armchair.js.map -arrow-big-down-dash.js -arrow-big-down-dash.js.map -arrow-big-down.js -arrow-big-down.js.map -arrow-big-left-dash.js -arrow-big-left-dash.js.map -arrow-big-left.js -arrow-big-left.js.map -arrow-big-right-dash.js -arrow-big-right-dash.js.map -arrow-big-right.js -arrow-big-right.js.map -arrow-big-up-dash.js -arrow-big-up-dash.js.map -arrow-big-up.js -arrow-big-up.js.map -arrow-down-0-1.js -arrow-down-0-1.js.map -arrow-down-01.js -arrow-down-01.js.map -arrow-down-1-0.js -arrow-down-1-0.js.map -arrow-down-10.js -arrow-down-10.js.map -arrow-down-a-z.js -arrow-down-a-z.js.map -arrow-down-az.js -arrow-down-az.js.map -arrow-down-circle.js -arrow-down-circle.js.map -arrow-down-from-line.js -arrow-down-from-line.js.map -arrow-down-left-from-circle.js -arrow-down-left-from-circle.js.map -arrow-down-left-from-square.js -arrow-down-left-from-square.js.map -arrow-down-left-square.js -arrow-down-left-square.js.map -arrow-down-left.js -arrow-down-left.js.map -arrow-down-narrow-wide.js -arrow-down-narrow-wide.js.map -arrow-down-right-from-circle.js -arrow-down-right-from-circle.js.map -arrow-down-right-from-square.js -arrow-down-right-from-square.js.map -arrow-down-right-square.js -arrow-down-right-square.js.map -arrow-down-right.js -arrow-down-right.js.map -arrow-down-square.js -arrow-down-square.js.map -arrow-down-to-dot.js -arrow-down-to-dot.js.map -arrow-down-to-line.js -arrow-down-to-line.js.map -arrow-down-up.js -arrow-down-up.js.map -arrow-down-wide-narrow.js -arrow-down-wide-narrow.js.map -arrow-down-z-a.js -arrow-down-z-a.js.map -arrow-down-za.js -arrow-down-za.js.map -arrow-down.js -arrow-down.js.map -arrow-left-circle.js -arrow-left-circle.js.map -arrow-left-from-line.js -arrow-left-from-line.js.map -arrow-left-right.js -arrow-left-right.js.map -arrow-left-square.js -arrow-left-square.js.map -arrow-left-to-line.js -arrow-left-to-line.js.map -arrow-left.js -arrow-left.js.map -arrow-right-circle.js -arrow-right-circle.js.map -arrow-right-from-line.js -arrow-right-from-line.js.map -arrow-right-left.js -arrow-right-left.js.map -arrow-right-square.js -arrow-right-square.js.map -arrow-right-to-line.js -arrow-right-to-line.js.map -arrow-right.js -arrow-right.js.map -arrow-up-0-1.js -arrow-up-0-1.js.map -arrow-up-01.js -arrow-up-01.js.map -arrow-up-1-0.js -arrow-up-1-0.js.map -arrow-up-10.js -arrow-up-10.js.map -arrow-up-a-z.js -arrow-up-a-z.js.map -arrow-up-az.js -arrow-up-az.js.map -arrow-up-circle.js -arrow-up-circle.js.map -arrow-up-down.js -arrow-up-down.js.map -arrow-up-from-dot.js -arrow-up-from-dot.js.map -arrow-up-from-line.js -arrow-up-from-line.js.map -arrow-up-left-from-circle.js -arrow-up-left-from-circle.js.map -arrow-up-left-from-square.js -arrow-up-left-from-square.js.map -arrow-up-left-square.js -arrow-up-left-square.js.map -arrow-up-left.js -arrow-up-left.js.map -arrow-up-narrow-wide.js -arrow-up-narrow-wide.js.map -arrow-up-right-from-circle.js -arrow-up-right-from-circle.js.map -arrow-up-right-from-square.js -arrow-up-right-from-square.js.map -arrow-up-right-square.js -arrow-up-right-square.js.map -arrow-up-right.js -arrow-up-right.js.map -arrow-up-square.js -arrow-up-square.js.map -arrow-up-to-line.js -arrow-up-to-line.js.map -arrow-up-wide-narrow.js -arrow-up-wide-narrow.js.map -arrow-up-z-a.js -arrow-up-z-a.js.map -arrow-up-za.js -arrow-up-za.js.map -arrow-up.js -arrow-up.js.map -arrows-up-from-line.js -arrows-up-from-line.js.map -asterisk-square.js -asterisk-square.js.map -asterisk.js -asterisk.js.map -at-sign.js -at-sign.js.map -atom.js -atom.js.map -audio-lines.js -audio-lines.js.map -audio-waveform.js -audio-waveform.js.map -award.js -award.js.map -axe.js -axe.js.map -axis-3-d.js -axis-3-d.js.map -axis-3d.js -axis-3d.js.map -baby.js -baby.js.map -backpack.js -backpack.js.map -badge-alert.js -badge-alert.js.map -badge-cent.js -badge-cent.js.map -badge-check.js -badge-check.js.map -badge-dollar-sign.js -badge-dollar-sign.js.map -badge-euro.js -badge-euro.js.map -badge-help.js -badge-help.js.map -badge-indian-rupee.js -badge-indian-rupee.js.map -badge-info.js -badge-info.js.map -badge-japanese-yen.js -badge-japanese-yen.js.map -badge-minus.js -badge-minus.js.map -badge-percent.js -badge-percent.js.map -badge-plus.js -badge-plus.js.map -badge-pound-sterling.js -badge-pound-sterling.js.map -badge-russian-ruble.js -badge-russian-ruble.js.map -badge-swiss-franc.js -badge-swiss-franc.js.map -badge-x.js -badge-x.js.map -badge.js -badge.js.map -baggage-claim.js -baggage-claim.js.map -ban.js -ban.js.map -banana.js -banana.js.map -bandage.js -bandage.js.map -banknote.js -banknote.js.map -bar-chart-2.js -bar-chart-2.js.map -bar-chart-3.js -bar-chart-3.js.map -bar-chart-4.js -bar-chart-4.js.map -bar-chart-big.js -bar-chart-big.js.map -bar-chart-horizontal-big.js -bar-chart-horizontal-big.js.map -bar-chart-horizontal.js -bar-chart-horizontal.js.map -bar-chart.js -bar-chart.js.map -barcode.js -barcode.js.map -baseline.js -baseline.js.map -bath.js -bath.js.map -battery-charging.js -battery-charging.js.map -battery-full.js -battery-full.js.map -battery-low.js -battery-low.js.map -battery-medium.js -battery-medium.js.map -battery-warning.js -battery-warning.js.map -battery.js -battery.js.map -beaker.js -beaker.js.map -bean-off.js -bean-off.js.map -bean.js -bean.js.map -bed-double.js -bed-double.js.map -bed-single.js -bed-single.js.map -bed.js -bed.js.map -beef.js -beef.js.map -beer-off.js -beer-off.js.map -beer.js -beer.js.map -bell-dot.js -bell-dot.js.map -bell-electric.js -bell-electric.js.map -bell-minus.js -bell-minus.js.map -bell-off.js -bell-off.js.map -bell-plus.js -bell-plus.js.map -bell-ring.js -bell-ring.js.map -bell.js -bell.js.map -between-horizonal-end.js -between-horizonal-end.js.map -between-horizonal-start.js -between-horizonal-start.js.map -between-horizontal-end.js -between-horizontal-end.js.map -between-horizontal-start.js -between-horizontal-start.js.map -between-vertical-end.js -between-vertical-end.js.map -between-vertical-start.js -between-vertical-start.js.map -biceps-flexed.js -biceps-flexed.js.map -bike.js -bike.js.map -binary.js -binary.js.map -binoculars.js -binoculars.js.map -biohazard.js -biohazard.js.map -bird.js -bird.js.map -bitcoin.js -bitcoin.js.map -blend.js -blend.js.map -blinds.js -blinds.js.map -blocks.js -blocks.js.map -bluetooth-connected.js -bluetooth-connected.js.map -bluetooth-off.js -bluetooth-off.js.map -bluetooth-searching.js -bluetooth-searching.js.map -bluetooth.js -bluetooth.js.map -bold.js -bold.js.map -bolt.js -bolt.js.map -bomb.js -bomb.js.map -bone.js -bone.js.map -book-a.js -book-a.js.map -book-audio.js -book-audio.js.map -book-check.js -book-check.js.map -book-copy.js -book-copy.js.map -book-dashed.js -book-dashed.js.map -book-down.js -book-down.js.map -book-headphones.js -book-headphones.js.map -book-heart.js -book-heart.js.map -book-image.js -book-image.js.map -book-key.js -book-key.js.map -book-lock.js -book-lock.js.map -book-marked.js -book-marked.js.map -book-minus.js -book-minus.js.map -book-open-check.js -book-open-check.js.map -book-open-text.js -book-open-text.js.map -book-open.js -book-open.js.map -book-plus.js -book-plus.js.map -book-template.js -book-template.js.map -book-text.js -book-text.js.map -book-type.js -book-type.js.map -book-up-2.js -book-up-2.js.map -book-up.js -book-up.js.map -book-user.js -book-user.js.map -book-x.js -book-x.js.map -book.js -book.js.map -bookmark-check.js -bookmark-check.js.map -bookmark-minus.js -bookmark-minus.js.map -bookmark-plus.js -bookmark-plus.js.map -bookmark-x.js -bookmark-x.js.map -bookmark.js -bookmark.js.map -boom-box.js -boom-box.js.map -bot-message-square.js -bot-message-square.js.map -bot-off.js -bot-off.js.map -bot.js -bot.js.map -box-select.js -box-select.js.map -box.js -box.js.map -boxes.js -boxes.js.map -braces.js -braces.js.map -brackets.js -brackets.js.map -brain-circuit.js -brain-circuit.js.map -brain-cog.js -brain-cog.js.map -brain.js -brain.js.map -brick-wall.js -brick-wall.js.map -briefcase-business.js -briefcase-business.js.map -briefcase-conveyor-belt.js -briefcase-conveyor-belt.js.map -briefcase-medical.js -briefcase-medical.js.map -briefcase.js -briefcase.js.map -bring-to-front.js -bring-to-front.js.map -brush.js -brush.js.map -bug-off.js -bug-off.js.map -bug-play.js -bug-play.js.map -bug.js -bug.js.map -building-2.js -building-2.js.map -building.js -building.js.map -bus-front.js -bus-front.js.map -bus.js -bus.js.map -cable-car.js -cable-car.js.map -cable.js -cable.js.map -cake-slice.js -cake-slice.js.map -cake.js -cake.js.map -calculator.js -calculator.js.map -calendar-1.js -calendar-1.js.map -calendar-arrow-down.js -calendar-arrow-down.js.map -calendar-arrow-up.js -calendar-arrow-up.js.map -calendar-check-2.js -calendar-check-2.js.map -calendar-check.js -calendar-check.js.map -calendar-clock.js -calendar-clock.js.map -calendar-cog.js -calendar-cog.js.map -calendar-days.js -calendar-days.js.map -calendar-fold.js -calendar-fold.js.map -calendar-heart.js -calendar-heart.js.map -calendar-minus-2.js -calendar-minus-2.js.map -calendar-minus.js -calendar-minus.js.map -calendar-off.js -calendar-off.js.map -calendar-plus-2.js -calendar-plus-2.js.map -calendar-plus.js -calendar-plus.js.map -calendar-range.js -calendar-range.js.map -calendar-search.js -calendar-search.js.map -calendar-sync.js -calendar-sync.js.map -calendar-x-2.js -calendar-x-2.js.map -calendar-x.js -calendar-x.js.map -calendar.js -calendar.js.map -camera-off.js -camera-off.js.map -camera.js -camera.js.map -candlestick-chart.js -candlestick-chart.js.map -candy-cane.js -candy-cane.js.map -candy-off.js -candy-off.js.map -candy.js -candy.js.map -cannabis.js -cannabis.js.map -captions-off.js -captions-off.js.map -captions.js -captions.js.map -car-front.js -car-front.js.map -car-taxi-front.js -car-taxi-front.js.map -car.js -car.js.map -caravan.js -caravan.js.map -carrot.js -carrot.js.map -case-lower.js -case-lower.js.map -case-sensitive.js -case-sensitive.js.map -case-upper.js -case-upper.js.map -cassette-tape.js -cassette-tape.js.map -cast.js -cast.js.map -castle.js -castle.js.map -cat.js -cat.js.map -cctv.js -cctv.js.map -chart-area.js -chart-area.js.map -chart-bar-big.js -chart-bar-big.js.map -chart-bar-decreasing.js -chart-bar-decreasing.js.map -chart-bar-increasing.js -chart-bar-increasing.js.map -chart-bar-stacked.js -chart-bar-stacked.js.map -chart-bar.js -chart-bar.js.map -chart-candlestick.js -chart-candlestick.js.map -chart-column-big.js -chart-column-big.js.map -chart-column-decreasing.js -chart-column-decreasing.js.map -chart-column-increasing.js -chart-column-increasing.js.map -chart-column-stacked.js -chart-column-stacked.js.map -chart-column.js -chart-column.js.map -chart-gantt.js -chart-gantt.js.map -chart-line.js -chart-line.js.map -chart-network.js -chart-network.js.map -chart-no-axes-column-decreasing.js -chart-no-axes-column-decreasing.js.map -chart-no-axes-column-increasing.js -chart-no-axes-column-increasing.js.map -chart-no-axes-column.js -chart-no-axes-column.js.map -chart-no-axes-combined.js -chart-no-axes-combined.js.map -chart-no-axes-gantt.js -chart-no-axes-gantt.js.map -chart-pie.js -chart-pie.js.map -chart-scatter.js -chart-scatter.js.map -chart-spline.js -chart-spline.js.map -check-check.js -check-check.js.map -check-circle-2.js -check-circle-2.js.map -check-circle.js -check-circle.js.map -check-square-2.js -check-square-2.js.map -check-square.js -check-square.js.map -check.js -check.js.map -chef-hat.js -chef-hat.js.map -cherry.js -cherry.js.map -chevron-down-circle.js -chevron-down-circle.js.map -chevron-down-square.js -chevron-down-square.js.map -chevron-down.js -chevron-down.js.map -chevron-first.js -chevron-first.js.map -chevron-last.js -chevron-last.js.map -chevron-left-circle.js -chevron-left-circle.js.map -chevron-left-square.js -chevron-left-square.js.map -chevron-left.js -chevron-left.js.map -chevron-right-circle.js -chevron-right-circle.js.map -chevron-right-square.js -chevron-right-square.js.map -chevron-right.js -chevron-right.js.map -chevron-up-circle.js -chevron-up-circle.js.map -chevron-up-square.js -chevron-up-square.js.map -chevron-up.js -chevron-up.js.map -chevrons-down-up.js -chevrons-down-up.js.map -chevrons-down.js -chevrons-down.js.map -chevrons-left-right-ellipsis.js -chevrons-left-right-ellipsis.js.map -chevrons-left-right.js -chevrons-left-right.js.map -chevrons-left.js -chevrons-left.js.map -chevrons-right-left.js -chevrons-right-left.js.map -chevrons-right.js -chevrons-right.js.map -chevrons-up-down.js -chevrons-up-down.js.map -chevrons-up.js -chevrons-up.js.map -chrome.js -chrome.js.map -church.js -church.js.map -cigarette-off.js -cigarette-off.js.map -cigarette.js -cigarette.js.map -circle-alert.js -circle-alert.js.map -circle-arrow-down.js -circle-arrow-down.js.map -circle-arrow-left.js -circle-arrow-left.js.map -circle-arrow-out-down-left.js -circle-arrow-out-down-left.js.map -circle-arrow-out-down-right.js -circle-arrow-out-down-right.js.map -circle-arrow-out-up-left.js -circle-arrow-out-up-left.js.map -circle-arrow-out-up-right.js -circle-arrow-out-up-right.js.map -circle-arrow-right.js -circle-arrow-right.js.map -circle-arrow-up.js -circle-arrow-up.js.map -circle-check-big.js -circle-check-big.js.map -circle-check.js -circle-check.js.map -circle-chevron-down.js -circle-chevron-down.js.map -circle-chevron-left.js -circle-chevron-left.js.map -circle-chevron-right.js -circle-chevron-right.js.map -circle-chevron-up.js -circle-chevron-up.js.map -circle-dashed.js -circle-dashed.js.map -circle-divide.js -circle-divide.js.map -circle-dollar-sign.js -circle-dollar-sign.js.map -circle-dot-dashed.js -circle-dot-dashed.js.map -circle-dot.js -circle-dot.js.map -circle-ellipsis.js -circle-ellipsis.js.map -circle-equal.js -circle-equal.js.map -circle-fading-arrow-up.js -circle-fading-arrow-up.js.map -circle-fading-plus.js -circle-fading-plus.js.map -circle-gauge.js -circle-gauge.js.map -circle-help.js -circle-help.js.map -circle-minus.js -circle-minus.js.map -circle-off.js -circle-off.js.map -circle-parking-off.js -circle-parking-off.js.map -circle-parking.js -circle-parking.js.map -circle-pause.js -circle-pause.js.map -circle-percent.js -circle-percent.js.map -circle-play.js -circle-play.js.map -circle-plus.js -circle-plus.js.map -circle-power.js -circle-power.js.map -circle-slash-2.js -circle-slash-2.js.map -circle-slash.js -circle-slash.js.map -circle-slashed.js -circle-slashed.js.map -circle-stop.js -circle-stop.js.map -circle-user-round.js -circle-user-round.js.map -circle-user.js -circle-user.js.map -circle-x.js -circle-x.js.map -circle.js -circle.js.map -circuit-board.js -circuit-board.js.map -citrus.js -citrus.js.map -clapperboard.js -clapperboard.js.map -clipboard-check.js -clipboard-check.js.map -clipboard-copy.js -clipboard-copy.js.map -clipboard-edit.js -clipboard-edit.js.map -clipboard-list.js -clipboard-list.js.map -clipboard-minus.js -clipboard-minus.js.map -clipboard-paste.js -clipboard-paste.js.map -clipboard-pen-line.js -clipboard-pen-line.js.map -clipboard-pen.js -clipboard-pen.js.map -clipboard-plus.js -clipboard-plus.js.map -clipboard-signature.js -clipboard-signature.js.map -clipboard-type.js -clipboard-type.js.map -clipboard-x.js -clipboard-x.js.map -clipboard.js -clipboard.js.map -clock-1.js -clock-1.js.map -clock-10.js -clock-10.js.map -clock-11.js -clock-11.js.map -clock-12.js -clock-12.js.map -clock-2.js -clock-2.js.map -clock-3.js -clock-3.js.map -clock-4.js -clock-4.js.map -clock-5.js -clock-5.js.map -clock-6.js -clock-6.js.map -clock-7.js -clock-7.js.map -clock-8.js -clock-8.js.map -clock-9.js -clock-9.js.map -clock-alert.js -clock-alert.js.map -clock-arrow-down.js -clock-arrow-down.js.map -clock-arrow-up.js -clock-arrow-up.js.map -clock.js -clock.js.map -cloud-alert.js -cloud-alert.js.map -cloud-cog.js -cloud-cog.js.map -cloud-download.js -cloud-download.js.map -cloud-drizzle.js -cloud-drizzle.js.map -cloud-fog.js -cloud-fog.js.map -cloud-hail.js -cloud-hail.js.map -cloud-lightning.js -cloud-lightning.js.map -cloud-moon-rain.js -cloud-moon-rain.js.map -cloud-moon.js -cloud-moon.js.map -cloud-off.js -cloud-off.js.map -cloud-rain-wind.js -cloud-rain-wind.js.map -cloud-rain.js -cloud-rain.js.map -cloud-snow.js -cloud-snow.js.map -cloud-sun-rain.js -cloud-sun-rain.js.map -cloud-sun.js -cloud-sun.js.map -cloud-upload.js -cloud-upload.js.map -cloud.js -cloud.js.map -cloudy.js -cloudy.js.map -clover.js -clover.js.map -club.js -club.js.map -code-2.js -code-2.js.map -code-square.js -code-square.js.map -code-xml.js -code-xml.js.map -code.js -code.js.map -codepen.js -codepen.js.map -codesandbox.js -codesandbox.js.map -coffee.js -coffee.js.map -cog.js -cog.js.map -coins.js -coins.js.map -columns-2.js -columns-2.js.map -columns-3.js -columns-3.js.map -columns-4.js -columns-4.js.map -columns.js -columns.js.map -combine.js -combine.js.map -command.js -command.js.map -compass.js -compass.js.map -component.js -component.js.map -computer.js -computer.js.map -concierge-bell.js -concierge-bell.js.map -cone.js -cone.js.map -construction.js -construction.js.map -contact-2.js -contact-2.js.map -contact-round.js -contact-round.js.map -contact.js -contact.js.map -container.js -container.js.map -contrast.js -contrast.js.map -cookie.js -cookie.js.map -cooking-pot.js -cooking-pot.js.map -copy-check.js -copy-check.js.map -copy-minus.js -copy-minus.js.map -copy-plus.js -copy-plus.js.map -copy-slash.js -copy-slash.js.map -copy-x.js -copy-x.js.map -copy.js -copy.js.map -copyleft.js -copyleft.js.map -copyright.js -copyright.js.map -corner-down-left.js -corner-down-left.js.map -corner-down-right.js -corner-down-right.js.map -corner-left-down.js -corner-left-down.js.map -corner-left-up.js -corner-left-up.js.map -corner-right-down.js -corner-right-down.js.map -corner-right-up.js -corner-right-up.js.map -corner-up-left.js -corner-up-left.js.map -corner-up-right.js -corner-up-right.js.map -cpu.js -cpu.js.map -creative-commons.js -creative-commons.js.map -credit-card.js -credit-card.js.map -croissant.js -croissant.js.map -crop.js -crop.js.map -cross.js -cross.js.map -crosshair.js -crosshair.js.map -crown.js -crown.js.map -cuboid.js -cuboid.js.map -cup-soda.js -cup-soda.js.map -curly-braces.js -curly-braces.js.map -currency.js -currency.js.map -cylinder.js -cylinder.js.map -dam.js -dam.js.map -database-backup.js -database-backup.js.map -database-zap.js -database-zap.js.map -database.js -database.js.map -delete.js -delete.js.map -dessert.js -dessert.js.map -diameter.js -diameter.js.map -diamond-minus.js -diamond-minus.js.map -diamond-percent.js -diamond-percent.js.map -diamond-plus.js -diamond-plus.js.map -diamond.js -diamond.js.map -dice-1.js -dice-1.js.map -dice-2.js -dice-2.js.map -dice-3.js -dice-3.js.map -dice-4.js -dice-4.js.map -dice-5.js -dice-5.js.map -dice-6.js -dice-6.js.map -dices.js -dices.js.map -diff.js -diff.js.map -disc-2.js -disc-2.js.map -disc-3.js -disc-3.js.map -disc-album.js -disc-album.js.map -disc.js -disc.js.map -divide-circle.js -divide-circle.js.map -divide-square.js -divide-square.js.map -divide.js -divide.js.map -dna-off.js -dna-off.js.map -dna.js -dna.js.map -dock.js -dock.js.map -dog.js -dog.js.map -dollar-sign.js -dollar-sign.js.map -donut.js -donut.js.map -door-closed.js -door-closed.js.map -door-open.js -door-open.js.map -dot-square.js -dot-square.js.map -dot.js -dot.js.map -download-cloud.js -download-cloud.js.map -download.js -download.js.map -drafting-compass.js -drafting-compass.js.map -drama.js -drama.js.map -dribbble.js -dribbble.js.map -drill.js -drill.js.map -droplet.js -droplet.js.map -droplets.js -droplets.js.map -drum.js -drum.js.map -drumstick.js -drumstick.js.map -dumbbell.js -dumbbell.js.map -ear-off.js -ear-off.js.map -ear.js -ear.js.map -earth-lock.js -earth-lock.js.map -earth.js -earth.js.map -eclipse.js -eclipse.js.map -edit-2.js -edit-2.js.map -edit-3.js -edit-3.js.map -edit.js -edit.js.map -egg-fried.js -egg-fried.js.map -egg-off.js -egg-off.js.map -egg.js -egg.js.map -ellipsis-vertical.js -ellipsis-vertical.js.map -ellipsis.js -ellipsis.js.map -equal-approximately.js -equal-approximately.js.map -equal-not.js -equal-not.js.map -equal-square.js -equal-square.js.map -equal.js -equal.js.map -eraser.js -eraser.js.map -ethernet-port.js -ethernet-port.js.map -euro.js -euro.js.map -expand.js -expand.js.map -external-link.js -external-link.js.map -eye-closed.js -eye-closed.js.map -eye-off.js -eye-off.js.map -eye.js -eye.js.map -facebook.js -facebook.js.map -factory.js -factory.js.map -fan.js -fan.js.map -fast-forward.js -fast-forward.js.map -feather.js -feather.js.map -fence.js -fence.js.map -ferris-wheel.js -ferris-wheel.js.map -figma.js -figma.js.map -file-archive.js -file-archive.js.map -file-audio-2.js -file-audio-2.js.map -file-audio.js -file-audio.js.map -file-axis-3-d.js -file-axis-3-d.js.map -file-axis-3d.js -file-axis-3d.js.map -file-badge-2.js -file-badge-2.js.map -file-badge.js -file-badge.js.map -file-bar-chart-2.js -file-bar-chart-2.js.map -file-bar-chart.js -file-bar-chart.js.map -file-box.js -file-box.js.map -file-chart-column-increasing.js -file-chart-column-increasing.js.map -file-chart-column.js -file-chart-column.js.map -file-chart-line.js -file-chart-line.js.map -file-chart-pie.js -file-chart-pie.js.map -file-check-2.js -file-check-2.js.map -file-check.js -file-check.js.map -file-clock.js -file-clock.js.map -file-code-2.js -file-code-2.js.map -file-code.js -file-code.js.map -file-cog-2.js -file-cog-2.js.map -file-cog.js -file-cog.js.map -file-diff.js -file-diff.js.map -file-digit.js -file-digit.js.map -file-down.js -file-down.js.map -file-edit.js -file-edit.js.map -file-heart.js -file-heart.js.map -file-image.js -file-image.js.map -file-input.js -file-input.js.map -file-json-2.js -file-json-2.js.map -file-json.js -file-json.js.map -file-key-2.js -file-key-2.js.map -file-key.js -file-key.js.map -file-line-chart.js -file-line-chart.js.map -file-lock-2.js -file-lock-2.js.map -file-lock.js -file-lock.js.map -file-minus-2.js -file-minus-2.js.map -file-minus.js -file-minus.js.map -file-music.js -file-music.js.map -file-output.js -file-output.js.map -file-pen-line.js -file-pen-line.js.map -file-pen.js -file-pen.js.map -file-pie-chart.js -file-pie-chart.js.map -file-plus-2.js -file-plus-2.js.map -file-plus.js -file-plus.js.map -file-question.js -file-question.js.map -file-scan.js -file-scan.js.map -file-search-2.js -file-search-2.js.map -file-search.js -file-search.js.map -file-signature.js -file-signature.js.map -file-sliders.js -file-sliders.js.map -file-spreadsheet.js -file-spreadsheet.js.map -file-stack.js -file-stack.js.map -file-symlink.js -file-symlink.js.map -file-terminal.js -file-terminal.js.map -file-text.js -file-text.js.map -file-type-2.js -file-type-2.js.map -file-type.js -file-type.js.map -file-up.js -file-up.js.map -file-user.js -file-user.js.map -file-video-2.js -file-video-2.js.map -file-video.js -file-video.js.map -file-volume-2.js -file-volume-2.js.map -file-volume.js -file-volume.js.map -file-warning.js -file-warning.js.map -file-x-2.js -file-x-2.js.map -file-x.js -file-x.js.map -file.js -file.js.map -files.js -files.js.map -film.js -film.js.map -filter-x.js -filter-x.js.map -filter.js -filter.js.map -fingerprint.js -fingerprint.js.map -fire-extinguisher.js -fire-extinguisher.js.map -fish-off.js -fish-off.js.map -fish-symbol.js -fish-symbol.js.map -fish.js -fish.js.map -flag-off.js -flag-off.js.map -flag-triangle-left.js -flag-triangle-left.js.map -flag-triangle-right.js -flag-triangle-right.js.map -flag.js -flag.js.map -flame-kindling.js -flame-kindling.js.map -flame.js -flame.js.map -flashlight-off.js -flashlight-off.js.map -flashlight.js -flashlight.js.map -flask-conical-off.js -flask-conical-off.js.map -flask-conical.js -flask-conical.js.map -flask-round.js -flask-round.js.map -flip-horizontal-2.js -flip-horizontal-2.js.map -flip-horizontal.js -flip-horizontal.js.map -flip-vertical-2.js -flip-vertical-2.js.map -flip-vertical.js -flip-vertical.js.map -flower-2.js -flower-2.js.map -flower.js -flower.js.map -focus.js -focus.js.map -fold-horizontal.js -fold-horizontal.js.map -fold-vertical.js -fold-vertical.js.map -folder-archive.js -folder-archive.js.map -folder-check.js -folder-check.js.map -folder-clock.js -folder-clock.js.map -folder-closed.js -folder-closed.js.map -folder-code.js -folder-code.js.map -folder-cog-2.js -folder-cog-2.js.map -folder-cog.js -folder-cog.js.map -folder-dot.js -folder-dot.js.map -folder-down.js -folder-down.js.map -folder-edit.js -folder-edit.js.map -folder-git-2.js -folder-git-2.js.map -folder-git.js -folder-git.js.map -folder-heart.js -folder-heart.js.map -folder-input.js -folder-input.js.map -folder-kanban.js -folder-kanban.js.map -folder-key.js -folder-key.js.map -folder-lock.js -folder-lock.js.map -folder-minus.js -folder-minus.js.map -folder-open-dot.js -folder-open-dot.js.map -folder-open.js -folder-open.js.map -folder-output.js -folder-output.js.map -folder-pen.js -folder-pen.js.map -folder-plus.js -folder-plus.js.map -folder-root.js -folder-root.js.map -folder-search-2.js -folder-search-2.js.map -folder-search.js -folder-search.js.map -folder-symlink.js -folder-symlink.js.map -folder-sync.js -folder-sync.js.map -folder-tree.js -folder-tree.js.map -folder-up.js -folder-up.js.map -folder-x.js -folder-x.js.map -folder.js -folder.js.map -folders.js -folders.js.map -footprints.js -footprints.js.map -fork-knife-crossed.js -fork-knife-crossed.js.map -fork-knife.js -fork-knife.js.map -forklift.js -forklift.js.map -form-input.js -form-input.js.map -forward.js -forward.js.map -frame.js -frame.js.map -framer.js -framer.js.map -frown.js -frown.js.map -fuel.js -fuel.js.map -fullscreen.js -fullscreen.js.map -function-square.js -function-square.js.map -gallery-horizontal-end.js -gallery-horizontal-end.js.map -gallery-horizontal.js -gallery-horizontal.js.map -gallery-thumbnails.js -gallery-thumbnails.js.map -gallery-vertical-end.js -gallery-vertical-end.js.map -gallery-vertical.js -gallery-vertical.js.map -gamepad-2.js -gamepad-2.js.map -gamepad.js -gamepad.js.map -gantt-chart-square.js -gantt-chart-square.js.map -gantt-chart.js -gantt-chart.js.map -gauge-circle.js -gauge-circle.js.map -gauge.js -gauge.js.map -gavel.js -gavel.js.map -gem.js -gem.js.map -ghost.js -ghost.js.map -gift.js -gift.js.map -git-branch-plus.js -git-branch-plus.js.map -git-branch.js -git-branch.js.map -git-commit-horizontal.js -git-commit-horizontal.js.map -git-commit-vertical.js -git-commit-vertical.js.map -git-commit.js -git-commit.js.map -git-compare-arrows.js -git-compare-arrows.js.map -git-compare.js -git-compare.js.map -git-fork.js -git-fork.js.map -git-graph.js -git-graph.js.map -git-merge.js -git-merge.js.map -git-pull-request-arrow.js -git-pull-request-arrow.js.map -git-pull-request-closed.js -git-pull-request-closed.js.map -git-pull-request-create-arrow.js -git-pull-request-create-arrow.js.map -git-pull-request-create.js -git-pull-request-create.js.map -git-pull-request-draft.js -git-pull-request-draft.js.map -git-pull-request.js -git-pull-request.js.map -github.js -github.js.map -gitlab.js -gitlab.js.map -glass-water.js -glass-water.js.map -glasses.js -glasses.js.map -globe-2.js -globe-2.js.map -globe-lock.js -globe-lock.js.map -globe.js -globe.js.map -goal.js -goal.js.map -grab.js -grab.js.map -graduation-cap.js -graduation-cap.js.map -grape.js -grape.js.map -grid-2-x-2-plus.js -grid-2-x-2-plus.js.map -grid-2-x-2.js -grid-2-x-2.js.map -grid-2x2-check.js -grid-2x2-check.js.map -grid-2x2-plus.js -grid-2x2-plus.js.map -grid-2x2-x.js -grid-2x2-x.js.map -grid-2x2.js -grid-2x2.js.map -grid-3-x-3.js -grid-3-x-3.js.map -grid-3x3.js -grid-3x3.js.map -grid.js -grid.js.map -grip-horizontal.js -grip-horizontal.js.map -grip-vertical.js -grip-vertical.js.map -grip.js -grip.js.map -group.js -group.js.map -guitar.js -guitar.js.map -ham.js -ham.js.map -hammer.js -hammer.js.map -hand-coins.js -hand-coins.js.map -hand-heart.js -hand-heart.js.map -hand-helping.js -hand-helping.js.map -hand-metal.js -hand-metal.js.map -hand-platter.js -hand-platter.js.map -hand.js -hand.js.map -handshake.js -handshake.js.map -hard-drive-download.js -hard-drive-download.js.map -hard-drive-upload.js -hard-drive-upload.js.map -hard-drive.js -hard-drive.js.map -hard-hat.js -hard-hat.js.map -hash.js -hash.js.map -haze.js -haze.js.map -hdmi-port.js -hdmi-port.js.map -heading-1.js -heading-1.js.map -heading-2.js -heading-2.js.map -heading-3.js -heading-3.js.map -heading-4.js -heading-4.js.map -heading-5.js -heading-5.js.map -heading-6.js -heading-6.js.map -heading.js -heading.js.map -headphone-off.js -headphone-off.js.map -headphones.js -headphones.js.map -headset.js -headset.js.map -heart-crack.js -heart-crack.js.map -heart-handshake.js -heart-handshake.js.map -heart-off.js -heart-off.js.map -heart-pulse.js -heart-pulse.js.map -heart.js -heart.js.map -heater.js -heater.js.map -help-circle.js -help-circle.js.map -helping-hand.js -helping-hand.js.map -hexagon.js -hexagon.js.map -highlighter.js -highlighter.js.map -history.js -history.js.map -home.js -home.js.map -hop-off.js -hop-off.js.map -hop.js -hop.js.map -hospital.js -hospital.js.map -hotel.js -hotel.js.map -hourglass.js -hourglass.js.map -house-plug.js -house-plug.js.map -house-plus.js -house-plus.js.map -house.js -house.js.map -ice-cream-2.js -ice-cream-2.js.map -ice-cream-bowl.js -ice-cream-bowl.js.map -ice-cream-cone.js -ice-cream-cone.js.map -ice-cream.js -ice-cream.js.map -id-card.js -id-card.js.map -image-down.js -image-down.js.map -image-minus.js -image-minus.js.map -image-off.js -image-off.js.map -image-play.js -image-play.js.map -image-plus.js -image-plus.js.map -image-up.js -image-up.js.map -image-upscale.js -image-upscale.js.map -image.js -image.js.map -images.js -images.js.map -import.js -import.js.map -inbox.js -inbox.js.map -indent-decrease.js -indent-decrease.js.map -indent-increase.js -indent-increase.js.map -indent.js -indent.js.map -index.js -index.js.map -indian-rupee.js -indian-rupee.js.map -infinity.js -infinity.js.map -info.js -info.js.map -inspect.js -inspect.js.map -inspection-panel.js -inspection-panel.js.map -instagram.js -instagram.js.map -italic.js -italic.js.map -iteration-ccw.js -iteration-ccw.js.map -iteration-cw.js -iteration-cw.js.map -japanese-yen.js -japanese-yen.js.map -joystick.js -joystick.js.map -kanban-square-dashed.js -kanban-square-dashed.js.map -kanban-square.js -kanban-square.js.map -kanban.js -kanban.js.map -key-round.js -key-round.js.map -key-square.js -key-square.js.map -key.js -key.js.map -keyboard-music.js -keyboard-music.js.map -keyboard-off.js -keyboard-off.js.map -keyboard.js -keyboard.js.map -lamp-ceiling.js -lamp-ceiling.js.map -lamp-desk.js -lamp-desk.js.map -lamp-floor.js -lamp-floor.js.map -lamp-wall-down.js -lamp-wall-down.js.map -lamp-wall-up.js -lamp-wall-up.js.map -lamp.js -lamp.js.map -land-plot.js -land-plot.js.map -landmark.js -landmark.js.map -languages.js -languages.js.map -laptop-2.js -laptop-2.js.map -laptop-minimal-check.js -laptop-minimal-check.js.map -laptop-minimal.js -laptop-minimal.js.map -laptop.js -laptop.js.map -lasso-select.js -lasso-select.js.map -lasso.js -lasso.js.map -laugh.js -laugh.js.map -layers-2.js -layers-2.js.map -layers-3.js -layers-3.js.map -layers.js -layers.js.map -layout-dashboard.js -layout-dashboard.js.map -layout-grid.js -layout-grid.js.map -layout-list.js -layout-list.js.map -layout-panel-left.js -layout-panel-left.js.map -layout-panel-top.js -layout-panel-top.js.map -layout-template.js -layout-template.js.map -layout.js -layout.js.map -leaf.js -leaf.js.map -leafy-green.js -leafy-green.js.map -lectern.js -lectern.js.map -letter-text.js -letter-text.js.map -library-big.js -library-big.js.map -library-square.js -library-square.js.map -library.js -library.js.map -life-buoy.js -life-buoy.js.map -ligature.js -ligature.js.map -lightbulb-off.js -lightbulb-off.js.map -lightbulb.js -lightbulb.js.map -line-chart.js -line-chart.js.map -link-2-off.js -link-2-off.js.map -link-2.js -link-2.js.map -link.js -link.js.map -linkedin.js -linkedin.js.map -list-check.js -list-check.js.map -list-checks.js -list-checks.js.map -list-collapse.js -list-collapse.js.map -list-end.js -list-end.js.map -list-filter.js -list-filter.js.map -list-minus.js -list-minus.js.map -list-music.js -list-music.js.map -list-ordered.js -list-ordered.js.map -list-plus.js -list-plus.js.map -list-restart.js -list-restart.js.map -list-start.js -list-start.js.map -list-todo.js -list-todo.js.map -list-tree.js -list-tree.js.map -list-video.js -list-video.js.map -list-x.js -list-x.js.map -list.js -list.js.map -loader-2.js -loader-2.js.map -loader-circle.js -loader-circle.js.map -loader-pinwheel.js -loader-pinwheel.js.map -loader.js -loader.js.map -locate-fixed.js -locate-fixed.js.map -locate-off.js -locate-off.js.map -locate.js -locate.js.map -lock-keyhole-open.js -lock-keyhole-open.js.map -lock-keyhole.js -lock-keyhole.js.map -lock-open.js -lock-open.js.map -lock.js -lock.js.map -log-in.js -log-in.js.map -log-out.js -log-out.js.map -logs.js -logs.js.map -lollipop.js -lollipop.js.map -luggage.js -luggage.js.map -m-square.js -m-square.js.map -magnet.js -magnet.js.map -mail-check.js -mail-check.js.map -mail-minus.js -mail-minus.js.map -mail-open.js -mail-open.js.map -mail-plus.js -mail-plus.js.map -mail-question.js -mail-question.js.map -mail-search.js -mail-search.js.map -mail-warning.js -mail-warning.js.map -mail-x.js -mail-x.js.map -mail.js -mail.js.map -mailbox.js -mailbox.js.map -mails.js -mails.js.map -map-pin-check-inside.js -map-pin-check-inside.js.map -map-pin-check.js -map-pin-check.js.map -map-pin-house.js -map-pin-house.js.map -map-pin-minus-inside.js -map-pin-minus-inside.js.map -map-pin-minus.js -map-pin-minus.js.map -map-pin-off.js -map-pin-off.js.map -map-pin-plus-inside.js -map-pin-plus-inside.js.map -map-pin-plus.js -map-pin-plus.js.map -map-pin-x-inside.js -map-pin-x-inside.js.map -map-pin-x.js -map-pin-x.js.map -map-pin.js -map-pin.js.map -map-pinned.js -map-pinned.js.map -map.js -map.js.map -martini.js -martini.js.map -maximize-2.js -maximize-2.js.map -maximize.js -maximize.js.map -medal.js -medal.js.map -megaphone-off.js -megaphone-off.js.map -megaphone.js -megaphone.js.map -meh.js -meh.js.map -memory-stick.js -memory-stick.js.map -menu-square.js -menu-square.js.map -menu.js -menu.js.map -merge.js -merge.js.map -message-circle-code.js -message-circle-code.js.map -message-circle-dashed.js -message-circle-dashed.js.map -message-circle-heart.js -message-circle-heart.js.map -message-circle-more.js -message-circle-more.js.map -message-circle-off.js -message-circle-off.js.map -message-circle-plus.js -message-circle-plus.js.map -message-circle-question.js -message-circle-question.js.map -message-circle-reply.js -message-circle-reply.js.map -message-circle-warning.js -message-circle-warning.js.map -message-circle-x.js -message-circle-x.js.map -message-circle.js -message-circle.js.map -message-square-code.js -message-square-code.js.map -message-square-dashed.js -message-square-dashed.js.map -message-square-diff.js -message-square-diff.js.map -message-square-dot.js -message-square-dot.js.map -message-square-heart.js -message-square-heart.js.map -message-square-lock.js -message-square-lock.js.map -message-square-more.js -message-square-more.js.map -message-square-off.js -message-square-off.js.map -message-square-plus.js -message-square-plus.js.map -message-square-quote.js -message-square-quote.js.map -message-square-reply.js -message-square-reply.js.map -message-square-share.js -message-square-share.js.map -message-square-text.js -message-square-text.js.map -message-square-warning.js -message-square-warning.js.map -message-square-x.js -message-square-x.js.map -message-square.js -message-square.js.map -messages-square.js -messages-square.js.map -mic-2.js -mic-2.js.map -mic-off.js -mic-off.js.map -mic-vocal.js -mic-vocal.js.map -mic.js -mic.js.map -microchip.js -microchip.js.map -microscope.js -microscope.js.map -microwave.js -microwave.js.map -milestone.js -milestone.js.map -milk-off.js -milk-off.js.map -milk.js -milk.js.map -minimize-2.js -minimize-2.js.map -minimize.js -minimize.js.map -minus-circle.js -minus-circle.js.map -minus-square.js -minus-square.js.map -minus.js -minus.js.map -monitor-check.js -monitor-check.js.map -monitor-cog.js -monitor-cog.js.map -monitor-dot.js -monitor-dot.js.map -monitor-down.js -monitor-down.js.map -monitor-off.js -monitor-off.js.map -monitor-pause.js -monitor-pause.js.map -monitor-play.js -monitor-play.js.map -monitor-smartphone.js -monitor-smartphone.js.map -monitor-speaker.js -monitor-speaker.js.map -monitor-stop.js -monitor-stop.js.map -monitor-up.js -monitor-up.js.map -monitor-x.js -monitor-x.js.map -monitor.js -monitor.js.map -moon-star.js -moon-star.js.map -moon.js -moon.js.map -more-horizontal.js -more-horizontal.js.map -more-vertical.js -more-vertical.js.map -mountain-snow.js -mountain-snow.js.map -mountain.js -mountain.js.map -mouse-off.js -mouse-off.js.map -mouse-pointer-2.js -mouse-pointer-2.js.map -mouse-pointer-ban.js -mouse-pointer-ban.js.map -mouse-pointer-click.js -mouse-pointer-click.js.map -mouse-pointer-square-dashed.js -mouse-pointer-square-dashed.js.map -mouse-pointer.js -mouse-pointer.js.map -mouse.js -mouse.js.map -move-3-d.js -move-3-d.js.map -move-3d.js -move-3d.js.map -move-diagonal-2.js -move-diagonal-2.js.map -move-diagonal.js -move-diagonal.js.map -move-down-left.js -move-down-left.js.map -move-down-right.js -move-down-right.js.map -move-down.js -move-down.js.map -move-horizontal.js -move-horizontal.js.map -move-left.js -move-left.js.map -move-right.js -move-right.js.map -move-up-left.js -move-up-left.js.map -move-up-right.js -move-up-right.js.map -move-up.js -move-up.js.map -move-vertical.js -move-vertical.js.map -move.js -move.js.map -music-2.js -music-2.js.map -music-3.js -music-3.js.map -music-4.js -music-4.js.map -music.js -music.js.map -navigation-2-off.js -navigation-2-off.js.map -navigation-2.js -navigation-2.js.map -navigation-off.js -navigation-off.js.map -navigation.js -navigation.js.map -network.js -network.js.map -newspaper.js -newspaper.js.map -nfc.js -nfc.js.map -notebook-pen.js -notebook-pen.js.map -notebook-tabs.js -notebook-tabs.js.map -notebook-text.js -notebook-text.js.map -notebook.js -notebook.js.map -notepad-text-dashed.js -notepad-text-dashed.js.map -notepad-text.js -notepad-text.js.map -nut-off.js -nut-off.js.map -nut.js -nut.js.map -octagon-alert.js -octagon-alert.js.map -octagon-minus.js -octagon-minus.js.map -octagon-pause.js -octagon-pause.js.map -octagon-x.js -octagon-x.js.map -octagon.js -octagon.js.map -omega.js -omega.js.map -option.js -option.js.map -orbit.js -orbit.js.map -origami.js -origami.js.map -outdent.js -outdent.js.map -package-2.js -package-2.js.map -package-check.js -package-check.js.map -package-minus.js -package-minus.js.map -package-open.js -package-open.js.map -package-plus.js -package-plus.js.map -package-search.js -package-search.js.map -package-x.js -package-x.js.map -package.js -package.js.map -paint-bucket.js -paint-bucket.js.map -paint-roller.js -paint-roller.js.map -paintbrush-2.js -paintbrush-2.js.map -paintbrush-vertical.js -paintbrush-vertical.js.map -paintbrush.js -paintbrush.js.map -palette.js -palette.js.map -palmtree.js -palmtree.js.map -panel-bottom-close.js -panel-bottom-close.js.map -panel-bottom-dashed.js -panel-bottom-dashed.js.map -panel-bottom-inactive.js -panel-bottom-inactive.js.map -panel-bottom-open.js -panel-bottom-open.js.map -panel-bottom.js -panel-bottom.js.map -panel-left-close.js -panel-left-close.js.map -panel-left-dashed.js -panel-left-dashed.js.map -panel-left-inactive.js -panel-left-inactive.js.map -panel-left-open.js -panel-left-open.js.map -panel-left.js -panel-left.js.map -panel-right-close.js -panel-right-close.js.map -panel-right-dashed.js -panel-right-dashed.js.map -panel-right-inactive.js -panel-right-inactive.js.map -panel-right-open.js -panel-right-open.js.map -panel-right.js -panel-right.js.map -panel-top-close.js -panel-top-close.js.map -panel-top-dashed.js -panel-top-dashed.js.map -panel-top-inactive.js -panel-top-inactive.js.map -panel-top-open.js -panel-top-open.js.map -panel-top.js -panel-top.js.map -panels-left-bottom.js -panels-left-bottom.js.map -panels-left-right.js -panels-left-right.js.map -panels-right-bottom.js -panels-right-bottom.js.map -panels-top-bottom.js -panels-top-bottom.js.map -panels-top-left.js -panels-top-left.js.map -paperclip.js -paperclip.js.map -parentheses.js -parentheses.js.map -parking-circle-off.js -parking-circle-off.js.map -parking-circle.js -parking-circle.js.map -parking-meter.js -parking-meter.js.map -parking-square-off.js -parking-square-off.js.map -parking-square.js -parking-square.js.map -party-popper.js -party-popper.js.map -pause-circle.js -pause-circle.js.map -pause-octagon.js -pause-octagon.js.map -pause.js -pause.js.map -paw-print.js -paw-print.js.map -pc-case.js -pc-case.js.map -pen-box.js -pen-box.js.map -pen-line.js -pen-line.js.map -pen-off.js -pen-off.js.map -pen-square.js -pen-square.js.map -pen-tool.js -pen-tool.js.map -pen.js -pen.js.map -pencil-line.js -pencil-line.js.map -pencil-off.js -pencil-off.js.map -pencil-ruler.js -pencil-ruler.js.map -pencil.js -pencil.js.map -pentagon.js -pentagon.js.map -percent-circle.js -percent-circle.js.map -percent-diamond.js -percent-diamond.js.map -percent-square.js -percent-square.js.map -percent.js -percent.js.map -person-standing.js -person-standing.js.map -philippine-peso.js -philippine-peso.js.map -phone-call.js -phone-call.js.map -phone-forwarded.js -phone-forwarded.js.map -phone-incoming.js -phone-incoming.js.map -phone-missed.js -phone-missed.js.map -phone-off.js -phone-off.js.map -phone-outgoing.js -phone-outgoing.js.map -phone.js -phone.js.map -pi-square.js -pi-square.js.map -pi.js -pi.js.map -piano.js -piano.js.map -pickaxe.js -pickaxe.js.map -picture-in-picture-2.js -picture-in-picture-2.js.map -picture-in-picture.js -picture-in-picture.js.map -pie-chart.js -pie-chart.js.map -piggy-bank.js -piggy-bank.js.map -pilcrow-left.js -pilcrow-left.js.map -pilcrow-right.js -pilcrow-right.js.map -pilcrow-square.js -pilcrow-square.js.map -pilcrow.js -pilcrow.js.map -pill-bottle.js -pill-bottle.js.map -pill.js -pill.js.map -pin-off.js -pin-off.js.map -pin.js -pin.js.map -pipette.js -pipette.js.map -pizza.js -pizza.js.map -plane-landing.js -plane-landing.js.map -plane-takeoff.js -plane-takeoff.js.map -plane.js -plane.js.map -play-circle.js -play-circle.js.map -play-square.js -play-square.js.map -play.js -play.js.map -plug-2.js -plug-2.js.map -plug-zap-2.js -plug-zap-2.js.map -plug-zap.js -plug-zap.js.map -plug.js -plug.js.map -plus-circle.js -plus-circle.js.map -plus-square.js -plus-square.js.map -plus.js -plus.js.map -pocket-knife.js -pocket-knife.js.map -pocket.js -pocket.js.map -podcast.js -podcast.js.map -pointer-off.js -pointer-off.js.map -pointer.js -pointer.js.map -popcorn.js -popcorn.js.map -popsicle.js -popsicle.js.map -pound-sterling.js -pound-sterling.js.map -power-circle.js -power-circle.js.map -power-off.js -power-off.js.map -power-square.js -power-square.js.map -power.js -power.js.map -presentation.js -presentation.js.map -printer-check.js -printer-check.js.map -printer.js -printer.js.map -projector.js -projector.js.map -proportions.js -proportions.js.map -puzzle.js -puzzle.js.map -pyramid.js -pyramid.js.map -qr-code.js -qr-code.js.map -quote.js -quote.js.map -rabbit.js -rabbit.js.map -radar.js -radar.js.map -radiation.js -radiation.js.map -radical.js -radical.js.map -radio-receiver.js -radio-receiver.js.map -radio-tower.js -radio-tower.js.map -radio.js -radio.js.map -radius.js -radius.js.map -rail-symbol.js -rail-symbol.js.map -rainbow.js -rainbow.js.map -rat.js -rat.js.map -ratio.js -ratio.js.map -receipt-cent.js -receipt-cent.js.map -receipt-euro.js -receipt-euro.js.map -receipt-indian-rupee.js -receipt-indian-rupee.js.map -receipt-japanese-yen.js -receipt-japanese-yen.js.map -receipt-pound-sterling.js -receipt-pound-sterling.js.map -receipt-russian-ruble.js -receipt-russian-ruble.js.map -receipt-swiss-franc.js -receipt-swiss-franc.js.map -receipt-text.js -receipt-text.js.map -receipt.js -receipt.js.map -rectangle-ellipsis.js -rectangle-ellipsis.js.map -rectangle-horizontal.js -rectangle-horizontal.js.map -rectangle-vertical.js -rectangle-vertical.js.map -recycle.js -recycle.js.map -redo-2.js -redo-2.js.map -redo-dot.js -redo-dot.js.map -redo.js -redo.js.map -refresh-ccw-dot.js -refresh-ccw-dot.js.map -refresh-ccw.js -refresh-ccw.js.map -refresh-cw-off.js -refresh-cw-off.js.map -refresh-cw.js -refresh-cw.js.map -refrigerator.js -refrigerator.js.map -regex.js -regex.js.map -remove-formatting.js -remove-formatting.js.map -repeat-1.js -repeat-1.js.map -repeat-2.js -repeat-2.js.map -repeat.js -repeat.js.map -replace-all.js -replace-all.js.map -replace.js -replace.js.map -reply-all.js -reply-all.js.map -reply.js -reply.js.map -rewind.js -rewind.js.map -ribbon.js -ribbon.js.map -rocket.js -rocket.js.map -rocking-chair.js -rocking-chair.js.map -roller-coaster.js -roller-coaster.js.map -rotate-3-d.js -rotate-3-d.js.map -rotate-3d.js -rotate-3d.js.map -rotate-ccw-square.js -rotate-ccw-square.js.map -rotate-ccw.js -rotate-ccw.js.map -rotate-cw-square.js -rotate-cw-square.js.map -rotate-cw.js -rotate-cw.js.map -route-off.js -route-off.js.map -route.js -route.js.map -router.js -router.js.map -rows-2.js -rows-2.js.map -rows-3.js -rows-3.js.map -rows-4.js -rows-4.js.map -rows.js -rows.js.map -rss.js -rss.js.map -ruler.js -ruler.js.map -russian-ruble.js -russian-ruble.js.map -sailboat.js -sailboat.js.map -salad.js -salad.js.map -sandwich.js -sandwich.js.map -satellite-dish.js -satellite-dish.js.map -satellite.js -satellite.js.map -save-all.js -save-all.js.map -save-off.js -save-off.js.map -save.js -save.js.map -scale-3-d.js -scale-3-d.js.map -scale-3d.js -scale-3d.js.map -scale.js -scale.js.map -scaling.js -scaling.js.map -scan-barcode.js -scan-barcode.js.map -scan-eye.js -scan-eye.js.map -scan-face.js -scan-face.js.map -scan-line.js -scan-line.js.map -scan-qr-code.js -scan-qr-code.js.map -scan-search.js -scan-search.js.map -scan-text.js -scan-text.js.map -scan.js -scan.js.map -scatter-chart.js -scatter-chart.js.map -school-2.js -school-2.js.map -school.js -school.js.map -scissors-line-dashed.js -scissors-line-dashed.js.map -scissors-square-dashed-bottom.js -scissors-square-dashed-bottom.js.map -scissors-square.js -scissors-square.js.map -scissors.js -scissors.js.map -screen-share-off.js -screen-share-off.js.map -screen-share.js -screen-share.js.map -scroll-text.js -scroll-text.js.map -scroll.js -scroll.js.map -search-check.js -search-check.js.map -search-code.js -search-code.js.map -search-slash.js -search-slash.js.map -search-x.js -search-x.js.map -search.js -search.js.map -section.js -section.js.map -send-horizonal.js -send-horizonal.js.map -send-horizontal.js -send-horizontal.js.map -send-to-back.js -send-to-back.js.map -send.js -send.js.map -separator-horizontal.js -separator-horizontal.js.map -separator-vertical.js -separator-vertical.js.map -server-cog.js -server-cog.js.map -server-crash.js -server-crash.js.map -server-off.js -server-off.js.map -server.js -server.js.map -settings-2.js -settings-2.js.map -settings.js -settings.js.map -shapes.js -shapes.js.map -share-2.js -share-2.js.map -share.js -share.js.map -sheet.js -sheet.js.map -shell.js -shell.js.map -shield-alert.js -shield-alert.js.map -shield-ban.js -shield-ban.js.map -shield-check.js -shield-check.js.map -shield-close.js -shield-close.js.map -shield-ellipsis.js -shield-ellipsis.js.map -shield-half.js -shield-half.js.map -shield-minus.js -shield-minus.js.map -shield-off.js -shield-off.js.map -shield-plus.js -shield-plus.js.map -shield-question.js -shield-question.js.map -shield-x.js -shield-x.js.map -shield.js -shield.js.map -ship-wheel.js -ship-wheel.js.map -ship.js -ship.js.map -shirt.js -shirt.js.map -shopping-bag.js -shopping-bag.js.map -shopping-basket.js -shopping-basket.js.map -shopping-cart.js -shopping-cart.js.map -shovel.js -shovel.js.map -shower-head.js -shower-head.js.map -shrink.js -shrink.js.map -shrub.js -shrub.js.map -shuffle.js -shuffle.js.map -sidebar-close.js -sidebar-close.js.map -sidebar-open.js -sidebar-open.js.map -sidebar.js -sidebar.js.map -sigma-square.js -sigma-square.js.map -sigma.js -sigma.js.map -signal-high.js -signal-high.js.map -signal-low.js -signal-low.js.map -signal-medium.js -signal-medium.js.map -signal-zero.js -signal-zero.js.map -signal.js -signal.js.map -signature.js -signature.js.map -signpost-big.js -signpost-big.js.map -signpost.js -signpost.js.map -siren.js -siren.js.map -skip-back.js -skip-back.js.map -skip-forward.js -skip-forward.js.map -skull.js -skull.js.map -slack.js -slack.js.map -slash-square.js -slash-square.js.map -slash.js -slash.js.map -slice.js -slice.js.map -sliders-horizontal.js -sliders-horizontal.js.map -sliders-vertical.js -sliders-vertical.js.map -sliders.js -sliders.js.map -smartphone-charging.js -smartphone-charging.js.map -smartphone-nfc.js -smartphone-nfc.js.map -smartphone.js -smartphone.js.map -smile-plus.js -smile-plus.js.map -smile.js -smile.js.map -snail.js -snail.js.map -snowflake.js -snowflake.js.map -sofa.js -sofa.js.map -sort-asc.js -sort-asc.js.map -sort-desc.js -sort-desc.js.map -soup.js -soup.js.map -space.js -space.js.map -spade.js -spade.js.map -sparkle.js -sparkle.js.map -sparkles.js -sparkles.js.map -speaker.js -speaker.js.map -speech.js -speech.js.map -spell-check-2.js -spell-check-2.js.map -spell-check.js -spell-check.js.map -spline.js -spline.js.map -split-square-horizontal.js -split-square-horizontal.js.map -split-square-vertical.js -split-square-vertical.js.map -split.js -split.js.map -spray-can.js -spray-can.js.map -sprout.js -sprout.js.map -square-activity.js -square-activity.js.map -square-arrow-down-left.js -square-arrow-down-left.js.map -square-arrow-down-right.js -square-arrow-down-right.js.map -square-arrow-down.js -square-arrow-down.js.map -square-arrow-left.js -square-arrow-left.js.map -square-arrow-out-down-left.js -square-arrow-out-down-left.js.map -square-arrow-out-down-right.js -square-arrow-out-down-right.js.map -square-arrow-out-up-left.js -square-arrow-out-up-left.js.map -square-arrow-out-up-right.js -square-arrow-out-up-right.js.map -square-arrow-right.js -square-arrow-right.js.map -square-arrow-up-left.js -square-arrow-up-left.js.map -square-arrow-up-right.js -square-arrow-up-right.js.map -square-arrow-up.js -square-arrow-up.js.map -square-asterisk.js -square-asterisk.js.map -square-bottom-dashed-scissors.js -square-bottom-dashed-scissors.js.map -square-chart-gantt.js -square-chart-gantt.js.map -square-check-big.js -square-check-big.js.map -square-check.js -square-check.js.map -square-chevron-down.js -square-chevron-down.js.map -square-chevron-left.js -square-chevron-left.js.map -square-chevron-right.js -square-chevron-right.js.map -square-chevron-up.js -square-chevron-up.js.map -square-code.js -square-code.js.map -square-dashed-bottom-code.js -square-dashed-bottom-code.js.map -square-dashed-bottom.js -square-dashed-bottom.js.map -square-dashed-kanban.js -square-dashed-kanban.js.map -square-dashed-mouse-pointer.js -square-dashed-mouse-pointer.js.map -square-dashed.js -square-dashed.js.map -square-divide.js -square-divide.js.map -square-dot.js -square-dot.js.map -square-equal.js -square-equal.js.map -square-function.js -square-function.js.map -square-gantt-chart.js -square-gantt-chart.js.map -square-kanban.js -square-kanban.js.map -square-library.js -square-library.js.map -square-m.js -square-m.js.map -square-menu.js -square-menu.js.map -square-minus.js -square-minus.js.map -square-mouse-pointer.js -square-mouse-pointer.js.map -square-parking-off.js -square-parking-off.js.map -square-parking.js -square-parking.js.map -square-pen.js -square-pen.js.map -square-percent.js -square-percent.js.map -square-pi.js -square-pi.js.map -square-pilcrow.js -square-pilcrow.js.map -square-play.js -square-play.js.map -square-plus.js -square-plus.js.map -square-power.js -square-power.js.map -square-radical.js -square-radical.js.map -square-scissors.js -square-scissors.js.map -square-sigma.js -square-sigma.js.map -square-slash.js -square-slash.js.map -square-split-horizontal.js -square-split-horizontal.js.map -square-split-vertical.js -square-split-vertical.js.map -square-square.js -square-square.js.map -square-stack.js -square-stack.js.map -square-terminal.js -square-terminal.js.map -square-user-round.js -square-user-round.js.map -square-user.js -square-user.js.map -square-x.js -square-x.js.map -square.js -square.js.map -squircle.js -squircle.js.map -squirrel.js -squirrel.js.map -stamp.js -stamp.js.map -star-half.js -star-half.js.map -star-off.js -star-off.js.map -star.js -star.js.map -stars.js -stars.js.map -step-back.js -step-back.js.map -step-forward.js -step-forward.js.map -stethoscope.js -stethoscope.js.map -sticker.js -sticker.js.map -sticky-note.js -sticky-note.js.map -stop-circle.js -stop-circle.js.map -store.js -store.js.map -stretch-horizontal.js -stretch-horizontal.js.map -stretch-vertical.js -stretch-vertical.js.map -strikethrough.js -strikethrough.js.map -subscript.js -subscript.js.map -subtitles.js -subtitles.js.map -sun-dim.js -sun-dim.js.map -sun-medium.js -sun-medium.js.map -sun-moon.js -sun-moon.js.map -sun-snow.js -sun-snow.js.map -sun.js -sun.js.map -sunrise.js -sunrise.js.map -sunset.js -sunset.js.map -superscript.js -superscript.js.map -swatch-book.js -swatch-book.js.map -swiss-franc.js -swiss-franc.js.map -switch-camera.js -switch-camera.js.map -sword.js -sword.js.map -swords.js -swords.js.map -syringe.js -syringe.js.map -table-2.js -table-2.js.map -table-cells-merge.js -table-cells-merge.js.map -table-cells-split.js -table-cells-split.js.map -table-columns-split.js -table-columns-split.js.map -table-of-contents.js -table-of-contents.js.map -table-properties.js -table-properties.js.map -table-rows-split.js -table-rows-split.js.map -table.js -table.js.map -tablet-smartphone.js -tablet-smartphone.js.map -tablet.js -tablet.js.map -tablets.js -tablets.js.map -tag.js -tag.js.map -tags.js -tags.js.map -tally-1.js -tally-1.js.map -tally-2.js -tally-2.js.map -tally-3.js -tally-3.js.map -tally-4.js -tally-4.js.map -tally-5.js -tally-5.js.map -tangent.js -tangent.js.map -target.js -target.js.map -telescope.js -telescope.js.map -tent-tree.js -tent-tree.js.map -tent.js -tent.js.map -terminal-square.js -terminal-square.js.map -terminal.js -terminal.js.map -test-tube-2.js -test-tube-2.js.map -test-tube-diagonal.js -test-tube-diagonal.js.map -test-tube.js -test-tube.js.map -test-tubes.js -test-tubes.js.map -text-cursor-input.js -text-cursor-input.js.map -text-cursor.js -text-cursor.js.map -text-quote.js -text-quote.js.map -text-search.js -text-search.js.map -text-select.js -text-select.js.map -text-selection.js -text-selection.js.map -text.js -text.js.map -theater.js -theater.js.map -thermometer-snowflake.js -thermometer-snowflake.js.map -thermometer-sun.js -thermometer-sun.js.map -thermometer.js -thermometer.js.map -thumbs-down.js -thumbs-down.js.map -thumbs-up.js -thumbs-up.js.map -ticket-check.js -ticket-check.js.map -ticket-minus.js -ticket-minus.js.map -ticket-percent.js -ticket-percent.js.map -ticket-plus.js -ticket-plus.js.map -ticket-slash.js -ticket-slash.js.map -ticket-x.js -ticket-x.js.map -ticket.js -ticket.js.map -tickets-plane.js -tickets-plane.js.map -tickets.js -tickets.js.map -timer-off.js -timer-off.js.map -timer-reset.js -timer-reset.js.map -timer.js -timer.js.map -toggle-left.js -toggle-left.js.map -toggle-right.js -toggle-right.js.map -toilet.js -toilet.js.map -tornado.js -tornado.js.map -torus.js -torus.js.map -touchpad-off.js -touchpad-off.js.map -touchpad.js -touchpad.js.map -tower-control.js -tower-control.js.map -toy-brick.js -toy-brick.js.map -tractor.js -tractor.js.map -traffic-cone.js -traffic-cone.js.map -train-front-tunnel.js -train-front-tunnel.js.map -train-front.js -train-front.js.map -train-track.js -train-track.js.map -train.js -train.js.map -tram-front.js -tram-front.js.map -trash-2.js -trash-2.js.map -trash.js -trash.js.map -tree-deciduous.js -tree-deciduous.js.map -tree-palm.js -tree-palm.js.map -tree-pine.js -tree-pine.js.map -trees.js -trees.js.map -trello.js -trello.js.map -trending-down.js -trending-down.js.map -trending-up-down.js -trending-up-down.js.map -trending-up.js -trending-up.js.map -triangle-alert.js -triangle-alert.js.map -triangle-right.js -triangle-right.js.map -triangle.js -triangle.js.map -trophy.js -trophy.js.map -truck.js -truck.js.map -turtle.js -turtle.js.map -tv-2.js -tv-2.js.map -tv-minimal-play.js -tv-minimal-play.js.map -tv-minimal.js -tv-minimal.js.map -tv.js -tv.js.map -twitch.js -twitch.js.map -twitter.js -twitter.js.map -type-outline.js -type-outline.js.map -type.js -type.js.map -umbrella-off.js -umbrella-off.js.map -umbrella.js -umbrella.js.map -underline.js -underline.js.map -undo-2.js -undo-2.js.map -undo-dot.js -undo-dot.js.map -undo.js -undo.js.map -unfold-horizontal.js -unfold-horizontal.js.map -unfold-vertical.js -unfold-vertical.js.map -ungroup.js -ungroup.js.map -university.js -university.js.map -unlink-2.js -unlink-2.js.map -unlink.js -unlink.js.map -unlock-keyhole.js -unlock-keyhole.js.map -unlock.js -unlock.js.map -unplug.js -unplug.js.map -upload-cloud.js -upload-cloud.js.map -upload.js -upload.js.map -usb.js -usb.js.map -user-2.js -user-2.js.map -user-check-2.js -user-check-2.js.map -user-check.js -user-check.js.map -user-circle-2.js -user-circle-2.js.map -user-circle.js -user-circle.js.map -user-cog-2.js -user-cog-2.js.map -user-cog.js -user-cog.js.map -user-minus-2.js -user-minus-2.js.map -user-minus.js -user-minus.js.map -user-pen.js -user-pen.js.map -user-plus-2.js -user-plus-2.js.map -user-plus.js -user-plus.js.map -user-round-check.js -user-round-check.js.map -user-round-cog.js -user-round-cog.js.map -user-round-minus.js -user-round-minus.js.map -user-round-pen.js -user-round-pen.js.map -user-round-plus.js -user-round-plus.js.map -user-round-search.js -user-round-search.js.map -user-round-x.js -user-round-x.js.map -user-round.js -user-round.js.map -user-search.js -user-search.js.map -user-square-2.js -user-square-2.js.map -user-square.js -user-square.js.map -user-x-2.js -user-x-2.js.map -user-x.js -user-x.js.map -user.js -user.js.map -users-2.js -users-2.js.map -users-round.js -users-round.js.map -users.js -users.js.map -utensils-crossed.js -utensils-crossed.js.map -utensils.js -utensils.js.map -utility-pole.js -utility-pole.js.map -variable.js -variable.js.map -vault.js -vault.js.map -vegan.js -vegan.js.map -venetian-mask.js -venetian-mask.js.map -verified.js -verified.js.map -vibrate-off.js -vibrate-off.js.map -vibrate.js -vibrate.js.map -video-off.js -video-off.js.map -video.js -video.js.map -videotape.js -videotape.js.map -view.js -view.js.map -voicemail.js -voicemail.js.map -volleyball.js -volleyball.js.map -volume-1.js -volume-1.js.map -volume-2.js -volume-2.js.map -volume-off.js -volume-off.js.map -volume-x.js -volume-x.js.map -volume.js -volume.js.map -vote.js -vote.js.map -wallet-2.js -wallet-2.js.map -wallet-cards.js -wallet-cards.js.map -wallet-minimal.js -wallet-minimal.js.map -wallet.js -wallet.js.map -wallpaper.js -wallpaper.js.map -wand-2.js -wand-2.js.map -wand-sparkles.js -wand-sparkles.js.map -wand.js -wand.js.map -warehouse.js -warehouse.js.map -washing-machine.js -washing-machine.js.map -watch.js -watch.js.map -waves.js -waves.js.map -waypoints.js -waypoints.js.map -webcam.js -webcam.js.map -webhook-off.js -webhook-off.js.map -webhook.js -webhook.js.map -weight.js -weight.js.map -wheat-off.js -wheat-off.js.map -wheat.js -wheat.js.map -whole-word.js -whole-word.js.map -wifi-high.js -wifi-high.js.map -wifi-low.js -wifi-low.js.map -wifi-off.js -wifi-off.js.map -wifi-zero.js -wifi-zero.js.map -wifi.js -wifi.js.map -wind-arrow-down.js -wind-arrow-down.js.map -wind.js -wind.js.map -wine-off.js -wine-off.js.map -wine.js -wine.js.map -workflow.js -workflow.js.map -worm.js -worm.js.map -wrap-text.js -wrap-text.js.map -wrench.js -wrench.js.map -x-circle.js -x-circle.js.map -x-octagon.js -x-octagon.js.map -x-square.js -x-square.js.map -x.js -x.js.map -youtube.js -youtube.js.map -zap-off.js -zap-off.js.map -zap.js -zap.js.map -zoom-in.js -zoom-in.js.map -zoom-out.js -zoom-out.js.map - -src - -utils.js -utils.js.map - -lucide-react.js -lucide-react.js.map -lucide-react.min.js -lucide-react.min.js.map - -LICENSE.md -README.md -bin -lib -man -marked.min.js -package.json - -main.js -marked.js - -marked.cjs -marked.cjs.map -marked.d.cts -marked.d.ts -marked.esm.js -marked.esm.js.map -marked.umd.js -marked.umd.js.map - -marked.1 -marked.1.md - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -minimatch.js -package.json - -LICENSE -README.md -dist -package.json - -commonjs -esm - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -CHANGELOG.md -LICENSE.txt -README.md -dist -index.d.ts -package.json - -mock-socket.amd.js -mock-socket.cjs.js -mock-socket.es.js -mock-socket.es.mjs -mock-socket.js - -index.js -license.md -package.json -readme.md - -HISTORY.md -LICENSE -README.md -child_process.js -crypto.js -dns.js -fs.js -index.js -package.json -readline.js -zlib.js - -LICENSE -README.md -async -bin -index.browser.cjs -index.browser.js -index.cjs -index.d.cts -index.d.ts -index.js -nanoid.js -non-secure -package.json -url-alphabet - -index.browser.cjs -index.browser.js -index.cjs -index.d.ts -index.js -index.native.js -package.json - -nanoid.cjs - -index.cjs -index.d.ts -index.js -package.json - -index.cjs -index.js -package.json - -README.md -index.js -package.json - -dist -package.json - -index.d.mts -index.d.ts -index.js -index.mjs -types.d.mts -types.d.ts -types.js -types.mjs - -LICENSE -README.md -index.js -lib -package.json -types - -back.js -common.js -global_emitter.js -intercept.js -intercepted_request_router.js -interceptor.js -match_body.js -playback_interceptor.js -recorder.js -scope.js -socket.js - -index.d.ts - -LICENSE -README.md -index.js -package.json - -@types -LICENSE.md -README.md -package.json -src - -index.d.ts - -body.js -errors -headers.js -index.js -request.js -response.js -utils - -abort-error.js -base.js -fetch-error.js - -get-search.js -is-redirect.js -is.js -multipart-parser.js -referrer.js - -LICENSE -README.md -data -package.json - -processed -release-schedule - -envs.json - -release-schedule.json - -LICENSE -README.md -index.js -package.json - -index.js -license -package.json -readme.md - -index.js -license -package.json -readme.md - -LICENSE -dist -index.js -package.json -readme.markdown - -object_hash.js - -CHANGELOG.md -LICENSE -README.md -lib -package.json - -help.js -index.js -util.js - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE.md -README.md -dist -package.json - -commonjs -esm - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -index.js -package.json - -LICENSE.md -README.md -dist -package.json - -commonjs -esm - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json - -LICENSE -README.md -package.json -picocolors.browser.js -picocolors.d.ts -picocolors.js -types.d.ts - -CHANGELOG.md -LICENSE -README.md -index.js -lib -package.json - -constants.js -parse.js -picomatch.js -scan.js -utils.js - -index.js -license -package.json -readme.md - -LICENSE -README.md -index.d.ts -lib -package.json - -index.js - -LICENSE -README.md -browser.js -coverage -lib -package.json - -lcov-report -lcov.info - -base.css -bitmapper.js.html -bitpacker.js.html -block-navigation.js -chunkstream.js.html -constants.js.html -crc.js.html -favicon.png -filter-pack.js.html -filter-parse-async.js.html -filter-parse-sync.js.html -filter-parse.js.html -format-normaliser.js.html -index.html -interlace.js.html -packer-async.js.html -packer-sync.js.html -packer.js.html -paeth-predictor.js.html -parser-async.js.html -parser-sync.js.html -parser.js.html -png-sync.js.html -png.js.html -prettify.css -prettify.js -sort-arrow-sprite.png -sorter.js -sync-inflate.js.html -sync-reader.js.html - -bitmapper.js -bitpacker.js -chunkstream.js -constants.js -crc.js -filter-pack.js -filter-parse-async.js -filter-parse-sync.js -filter-parse.js -format-normaliser.js -interlace.js -packer-async.js -packer-sync.js -packer.js -paeth-predictor.js -parser-async.js -parser-sync.js -parser.js -png-sync.js -png.js -sync-inflate.js -sync-reader.js - -LICENSE -README.md -lib -package.json - -at-rule.d.ts -at-rule.js -comment.d.ts -comment.js -container.d.ts -container.js -css-syntax-error.d.ts -css-syntax-error.js -declaration.d.ts -declaration.js -document.d.ts -document.js -fromJSON.d.ts -fromJSON.js -input.d.ts -input.js -lazy-result.d.ts -lazy-result.js -list.d.ts -list.js -map-generator.js -no-work-result.d.ts -no-work-result.js -node.d.ts -node.js -parse.d.ts -parse.js -parser.js -postcss.d.mts -postcss.d.ts -postcss.js -postcss.mjs -previous-map.d.ts -previous-map.js -processor.d.ts -processor.js -result.d.ts -result.js -root.d.ts -root.js -rule.d.ts -rule.js -stringifier.d.ts -stringifier.js -stringify.d.ts -stringify.js -symbols.js -terminal-highlight.js -tokenize.js -warn-once.js -warning.d.ts -warning.js - -LICENSE -README.md -index.js -lib -package.json - -assign-layer-names.js -data-url.js -join-layer.js -join-media.js -load-content.js -parse-statements.js -process-content.js -resolve-id.js - -LICENSE -README.md -async.js -index.js -index.mjs -objectifier.js -package.json -parser.js -process-result.js -sync.js - -LICENSE -README.md -package.json -src - -index.d.ts -index.js -options.js -plugins.js -req.js - -LICENSE -README.md -index.d.ts -index.js -package.json - -postcss-selector-parser - -API.md -CHANGELOG.md -LICENSE-MIT -README.md -dist -package.json -postcss-selector-parser.d.ts - -index.js -parser.js -processor.js -selectors -sortAscending.js -tokenTypes.js -tokenize.js -util - -attribute.js -className.js -combinator.js -comment.js -constructors.js -container.js -guards.js -id.js -index.js -namespace.js -nesting.js -node.js -pseudo.js -root.js -selector.js -string.js -tag.js -types.js -universal.js - -ensureObject.js -getProp.js -index.js -stripComments.js -unesc.js - -API.md -CHANGELOG.md -LICENSE-MIT -README.md -dist -package.json -postcss-selector-parser.d.ts - -index.js -parser.js -processor.js -selectors -sortAscending.js -tokenTypes.js -tokenize.js -util - -attribute.js -className.js -combinator.js -comment.js -constructors.js -container.js -guards.js -id.js -index.js -namespace.js -nesting.js -node.js -pseudo.js -root.js -selector.js -string.js -tag.js -types.js -universal.js - -ensureObject.js -getProp.js -index.js -stripComments.js -unesc.js - -LICENSE -README.md -lib -package.json - -index.d.ts -index.js -parse.js -stringify.js -unit.js -walk.js - -CHANGELOG.md -LICENSE -README.md -lib -package.json - -Func.js -List.js -Num.js -Obj.js -Str.js -index.js - -LICENSE -README.md -checkPropTypes.js -factory.js -factoryWithThrowingShims.js -factoryWithTypeCheckers.js -index.js -lib -package.json -prop-types.js -prop-types.min.js - -ReactPropTypesSecret.js -has.js - -react-is - -LICENSE -README.md -build-info.json -cjs -index.js -package.json -umd - -react-is.development.js -react-is.production.min.js - -react-is.development.js -react-is.production.min.js - -LICENSE.md -README.md -index.js -package.json -tests - -index.js - -LICENSE-MIT.txt -README.md -package.json -punycode.es6.js -punycode.js - -README.md -bin -helper -lib -license -package.json - -qrcode - -to-sjis-browser.js -to-sjis.js - -browser.js -can-promise.js -core -index.js -renderer -server.js - -alignment-pattern.js -alphanumeric-data.js -bit-buffer.js -bit-matrix.js -byte-data.js -error-correction-code.js -error-correction-level.js -finder-pattern.js -format-info.js -galois-field.js -kanji-data.js -mask-pattern.js -mode.js -numeric-data.js -polynomial.js -qrcode.js -reed-solomon-encoder.js -regex.js -segments.js -utils.js -version-check.js -version.js - -canvas.js -png.js -svg-tag.js -svg.js -terminal -terminal.js -utf8.js -utils.js - -terminal-small.js -terminal.js - -LICENSE -README.md -index.d.ts -index.js -package.json - -LICENSE -README.md -cjs -index.js -jsx-dev-runtime.js -jsx-runtime.js -package.json -react.shared-subset.js -umd - -react-jsx-dev-runtime.development.js -react-jsx-dev-runtime.production.min.js -react-jsx-dev-runtime.profiling.min.js -react-jsx-runtime.development.js -react-jsx-runtime.production.min.js -react-jsx-runtime.profiling.min.js -react.development.js -react.production.min.js -react.shared-subset.development.js -react.shared-subset.production.min.js - -react.development.js -react.production.min.js -react.profiling.min.js - -LICENSE -README.md -dist -package.json -src -tsconfig.json - -index.d.ts -index.esm.js -index.esm.js.map -index.js -index.js.map -index.min.js -index.min.js.map -style.css -style.css.d.ts -style.css.map -style.module.css -style.module.css.d.ts - -DayPicker.tsx -components -contexts -hooks -index.ts -style.css -style.css.d.ts -types - -Button -Caption -CaptionDropdowns -CaptionLabel -CaptionNavigation -Day -DayContent -Dropdown -Footer -Head -HeadRow -IconDropdown -IconLeft -IconRight -Month -Months -MonthsDropdown -Navigation -Root -Row -Table -WeekNumber -YearsDropdown - -Button.test.tsx -Button.tsx -index.ts - -Caption.test.tsx -Caption.tsx -index.ts - -CaptionDropdowns.test.tsx -CaptionDropdowns.tsx -index.ts - -CaptionLabel.test.tsx -CaptionLabel.tsx -index.ts - -CaptionNavigation.test.tsx -CaptionNavigation.tsx -index.ts - -Day.test.tsx -Day.tsx -index.ts - -DayContent.test.tsx -DayContent.tsx -index.ts - -Dropdown.test.tsx -Dropdown.tsx -index.ts - -Footer.test.tsx -Footer.tsx -index.ts - -Head.test.tsx -Head.tsx -index.ts - -HeadRow.test.tsx -HeadRow.tsx -index.ts -utils - -getWeekdays.test.ts -getWeekdays.ts -index.ts - -IconDropdown.test.tsx -IconDropdown.tsx -index.ts - -IconLeft.test.tsx -IconLeft.tsx -index.ts - -IconRight.test.tsx -IconRight.tsx -index.ts - -Month.test.tsx -Month.tsx -index.ts - -Months.test.tsx -Months.tsx -index.ts - -MonthsDropdown.test.tsx -MonthsDropdown.tsx -__snapshots__ -index.ts - -MonthsDropdown.test.tsx.snap - -Navigation.test.tsx -Navigation.tsx -index.ts - -Root.test.tsx -Root.tsx -index.ts - -Row.test.tsx -Row.tsx -index.ts - -Table.test.tsx -Table.tsx -__snapshots__ -index.ts -utils - -Table.test.tsx.snap - -daysToMonthWeeks.ts -getMonthWeeks.test.ts -getMonthWeeks.ts - -WeekNumber.test.tsx -WeekNumber.tsx -__snapshots__ -index.ts - -WeekNumber.test.tsx.snap - -YearsDropdown.test.tsx -YearsDropdown.tsx -__snapshots__ -index.ts - -YearsDropdown.test.tsx.snap - -DayPicker -Focus -Modifiers -Navigation -RootProvider.tsx -SelectMultiple -SelectRange -SelectSingle - -DayPickerContext.test.ts -DayPickerContext.tsx -defaultClassNames.ts -defaultContextValues.ts -formatters -index.ts -labels -utils - -formatCaption.test.ts -formatCaption.ts -formatDay.test.ts -formatDay.ts -formatMonthCaption.test.ts -formatMonthCaption.ts -formatWeekNumber.test.ts -formatWeekNumber.ts -formatWeekdayName.test.ts -formatWeekdayName.ts -formatYearCaption.test.ts -formatYearCaption.ts -index.ts - -index.ts -labelDay.test.ts -labelDay.ts -labelMonthDropdown.test.ts -labelMonthDropdown.ts -labelNext.test.ts -labelNext.ts -labelPrevious.test.ts -labelPrevious.ts -labelWeekNumber.test.ts -labelWeekNumber.ts -labelWeekday.test.ts -labelWeekday.ts -labelYearDropdown.test.ts -labelYearDropdown.ts - -index.ts -parseFromToProps.test.ts -parseFromToProps.ts - -FocusContext.test.ts -FocusContext.tsx -index.ts -utils - -getInitialFocusTarget.test.ts -getInitialFocusTarget.ts -getNextFocus.test.ts -getNextFocus.ts - -ModifiersContext.test.ts -ModifiersContext.tsx -index.ts -utils - -getActiveModifiers.test.ts -getActiveModifiers.ts -getCustomModifiers.test.ts -getCustomModifiers.ts -getInternalModifiers.test.ts -getInternalModifiers.ts -isDateInRange.test.ts -isDateInRange.ts -isMatch.test.ts -isMatch.ts -matcherToArray.test.ts -matcherToArray.ts - -NavigationContext.test.ts -NavigationContext.tsx -index.ts -useNavigationState.test.ts -useNavigationState.ts -utils - -getDisplayMonths.ts -getInitialMonth.test.ts -getInitialMonth.ts -getNextMonth.test.ts -getNextMonth.ts -getPreviousMonth.test.ts -getPreviousMonth.ts - -SelectMultipleContext.test.ts -SelectMultipleContext.tsx -index.ts - -SelectRangeContext.test.ts -SelectRangeContext.tsx -index.ts -utils - -addToRange.test.ts -addToRange.ts - -SelectSingleContext.test.ts -SelectSingleContext.tsx -index.ts - -useActiveModifiers -useControlledValue -useDayEventHandlers -useDayRender -useId -useInput -useSelectedDays - -index.ts -useActiveModifiers.test.tsx -useActiveModifiers.tsx - -index.ts -useControlledValue.test.ts -useControlledValue.ts - -index.ts -useDayEventHandlers.test.tsx -useDayEventHandlers.tsx - -index.ts -useDayRender.test.tsx -useDayRender.tsx -utils - -getDayClassNames.test.ts -getDayClassNames.ts -getDayStyle.ts - -index.ts -useId.ts - -index.ts -useInput.ts -utils - -isValidDate.tsx - -index.ts -useSelectedDays.test.ts -useSelectedDays.ts - -DayPickerBase.ts -DayPickerDefault.ts -DayPickerMultiple.ts -DayPickerRange.ts -DayPickerSingle.ts -EventHandlers.ts -Formatters.ts -Labels.ts -Matchers.ts -Modifiers.ts -Styles.ts - -LICENSE -README.md -cjs -client.js -index.js -package.json -profiling.js -server.browser.js -server.js -server.node.js -test-utils.js -umd - -react-dom-server-legacy.browser.development.js -react-dom-server-legacy.browser.production.min.js -react-dom-server-legacy.node.development.js -react-dom-server-legacy.node.production.min.js -react-dom-server.browser.development.js -react-dom-server.browser.production.min.js -react-dom-server.node.development.js -react-dom-server.node.production.min.js -react-dom-test-utils.development.js -react-dom-test-utils.production.min.js -react-dom.development.js -react-dom.production.min.js -react-dom.profiling.min.js - -react-dom-server-legacy.browser.development.js -react-dom-server-legacy.browser.production.min.js -react-dom-server.browser.development.js -react-dom-server.browser.production.min.js -react-dom-test-utils.development.js -react-dom-test-utils.production.min.js -react-dom.development.js -react-dom.production.min.js -react-dom.profiling.min.js - -LICENSE -README.md -dist -package.json - -constants.d.ts -constants.d.ts.map -controller.d.ts -controller.d.ts.map -form.d.ts -form.d.ts.map -index.cjs.js -index.cjs.js.map -index.d.ts -index.d.ts.map -index.esm.mjs -index.esm.mjs.map -index.react-server.d.ts -index.react-server.d.ts.map -index.umd.js -index.umd.js.map -logic -react-server.esm.mjs -react-server.esm.mjs.map -types -useController.d.ts -useController.d.ts.map -useFieldArray.d.ts -useFieldArray.d.ts.map -useForm.d.ts -useForm.d.ts.map -useFormContext.d.ts -useFormContext.d.ts.map -useFormState.d.ts -useFormState.d.ts.map -useIsomorphicLayoutEffect.d.ts -useIsomorphicLayoutEffect.d.ts.map -useWatch.d.ts -useWatch.d.ts.map -utils -watch.d.ts -watch.d.ts.map - -appendErrors.d.ts -appendErrors.d.ts.map -createFormControl.d.ts -createFormControl.d.ts.map -generateId.d.ts -generateId.d.ts.map -generateWatchOutput.d.ts -generateWatchOutput.d.ts.map -getCheckboxValue.d.ts -getCheckboxValue.d.ts.map -getDirtyFields.d.ts -getDirtyFields.d.ts.map -getEventValue.d.ts -getEventValue.d.ts.map -getFieldValue.d.ts -getFieldValue.d.ts.map -getFieldValueAs.d.ts -getFieldValueAs.d.ts.map -getFocusFieldName.d.ts -getFocusFieldName.d.ts.map -getNodeParentName.d.ts -getNodeParentName.d.ts.map -getProxyFormState.d.ts -getProxyFormState.d.ts.map -getRadioValue.d.ts -getRadioValue.d.ts.map -getResolverOptions.d.ts -getResolverOptions.d.ts.map -getRuleValue.d.ts -getRuleValue.d.ts.map -getValidateError.d.ts -getValidateError.d.ts.map -getValidationModes.d.ts -getValidationModes.d.ts.map -getValueAndMessage.d.ts -getValueAndMessage.d.ts.map -hasPromiseValidation.d.ts -hasPromiseValidation.d.ts.map -hasValidation.d.ts -hasValidation.d.ts.map -index.d.ts -index.d.ts.map -isNameInFieldArray.d.ts -isNameInFieldArray.d.ts.map -isWatched.d.ts -isWatched.d.ts.map -iterateFieldsByAction.d.ts -iterateFieldsByAction.d.ts.map -schemaErrorLookup.d.ts -schemaErrorLookup.d.ts.map -shouldRenderFormState.d.ts -shouldRenderFormState.d.ts.map -shouldSubscribeByName.d.ts -shouldSubscribeByName.d.ts.map -skipValidation.d.ts -skipValidation.d.ts.map -unsetEmptyArray.d.ts -unsetEmptyArray.d.ts.map -updateFieldArrayRootError.d.ts -updateFieldArrayRootError.d.ts.map -validateField.d.ts -validateField.d.ts.map - -controller.d.ts -controller.d.ts.map -errors.d.ts -errors.d.ts.map -events.d.ts -events.d.ts.map -fieldArray.d.ts -fieldArray.d.ts.map -fields.d.ts -fields.d.ts.map -form.d.ts -form.d.ts.map -index.d.ts -index.d.ts.map -path -resolvers.d.ts -resolvers.d.ts.map -utils.d.ts -utils.d.ts.map -validator.d.ts -validator.d.ts.map - -common.d.ts -common.d.ts.map -eager.d.ts -eager.d.ts.map -index.d.ts -index.d.ts.map - -append.d.ts -append.d.ts.map -cloneObject.d.ts -cloneObject.d.ts.map -compact.d.ts -compact.d.ts.map -convertToArrayPayload.d.ts -convertToArrayPayload.d.ts.map -createSubject.d.ts -createSubject.d.ts.map -deepEqual.d.ts -deepEqual.d.ts.map -deepMerge.d.ts -deepMerge.d.ts.map -extractFormValues.d.ts -extractFormValues.d.ts.map -fillEmptyArray.d.ts -fillEmptyArray.d.ts.map -flatten.d.ts -flatten.d.ts.map -get.d.ts -get.d.ts.map -index.d.ts -index.d.ts.map -insert.d.ts -insert.d.ts.map -isBoolean.d.ts -isBoolean.d.ts.map -isCheckBoxInput.d.ts -isCheckBoxInput.d.ts.map -isDateObject.d.ts -isDateObject.d.ts.map -isEmptyObject.d.ts -isEmptyObject.d.ts.map -isFileInput.d.ts -isFileInput.d.ts.map -isFunction.d.ts -isFunction.d.ts.map -isHTMLElement.d.ts -isHTMLElement.d.ts.map -isKey.d.ts -isKey.d.ts.map -isMultipleSelect.d.ts -isMultipleSelect.d.ts.map -isNullOrUndefined.d.ts -isNullOrUndefined.d.ts.map -isObject.d.ts -isObject.d.ts.map -isPlainObject.d.ts -isPlainObject.d.ts.map -isPrimitive.d.ts -isPrimitive.d.ts.map -isRadioInput.d.ts -isRadioInput.d.ts.map -isRadioOrCheckbox.d.ts -isRadioOrCheckbox.d.ts.map -isRegex.d.ts -isRegex.d.ts.map -isString.d.ts -isString.d.ts.map -isUndefined.d.ts -isUndefined.d.ts.map -isWeb.d.ts -isWeb.d.ts.map -live.d.ts -live.d.ts.map -move.d.ts -move.d.ts.map -noop.d.ts -noop.d.ts.map -objectHasFunction.d.ts -objectHasFunction.d.ts.map -prepend.d.ts -prepend.d.ts.map -remove.d.ts -remove.d.ts.map -set.d.ts -set.d.ts.map -sleep.d.ts -sleep.d.ts.map -stringToPath.d.ts -stringToPath.d.ts.map -swap.d.ts -swap.d.ts.map -unset.d.ts -unset.d.ts.map -update.d.ts -update.d.ts.map - -CHANGELOG.md -LICENSE -README.md -TransWithoutContext.d.mts -TransWithoutContext.d.ts -dist -helpers.d.ts -icu.macro.d.mts -icu.macro.d.ts -icu.macro.js -index.d.mts -index.d.ts -initReactI18next.d.mts -initReactI18next.d.ts -package.json -react-i18next.js -react-i18next.min.js -src -vitest.workspace.typescript.mts - -amd -commonjs -es -umd - -react-i18next.js -react-i18next.min.js - -I18nextProvider.js -Trans.js -TransWithoutContext.js -Translation.js -context.js -defaults.js -i18nInstance.js -index.js -initReactI18next.js -unescape.js -useSSR.js -useTranslation.js -utils.js -withSSR.js -withTranslation.js - -I18nextProvider.js -Trans.js -TransWithoutContext.js -Translation.js -context.js -defaults.js -i18nInstance.js -index.js -initReactI18next.js -package.json -unescape.js -useSSR.js -useTranslation.js -utils.js -withSSR.js -withTranslation.js - -react-i18next.js -react-i18next.min.js - -I18nextProvider.js -Trans.js -TransWithoutContext.js -Translation.js -context.js -defaults.js -i18nInstance.js -index.js -initReactI18next.js -unescape.js -useSSR.js -useTranslation.js -utils.js -withSSR.js -withTranslation.js - -LICENSE -README.md -cjs -index.js -package.json -umd - -react-is.development.js -react-is.production.min.js - -react-is.development.js -react-is.production.min.js - -LICENSE -README.md -UI -dist -package.json -sidecar - -UI.d.ts -package.json - -es2015 -es2019 -es5 - -Combination.d.ts -Combination.js -SideEffect.d.ts -SideEffect.js -UI.d.ts -UI.js -aggresiveCapture.d.ts -aggresiveCapture.js -handleScroll.d.ts -handleScroll.js -index.d.ts -index.js -medium.d.ts -medium.js -pinchAndZoom.d.ts -pinchAndZoom.js -sidecar.d.ts -sidecar.js -types.d.ts -types.js - -Combination.d.ts -Combination.js -SideEffect.d.ts -SideEffect.js -UI.d.ts -UI.js -aggresiveCapture.d.ts -aggresiveCapture.js -handleScroll.d.ts -handleScroll.js -index.d.ts -index.js -medium.d.ts -medium.js -pinchAndZoom.d.ts -pinchAndZoom.js -sidecar.d.ts -sidecar.js -types.d.ts -types.js - -Combination.d.ts -Combination.js -SideEffect.d.ts -SideEffect.js -UI.d.ts -UI.js -aggresiveCapture.d.ts -aggresiveCapture.js -handleScroll.d.ts -handleScroll.js -index.d.ts -index.js -medium.d.ts -medium.js -pinchAndZoom.d.ts -pinchAndZoom.js -sidecar.d.ts -sidecar.js -types.d.ts -types.js - -package.json -sidecar.d.ts - -README.md -constants -dist -package.json - -package.json - -es2015 -es2019 -es5 - -component.d.ts -component.js -constants.d.ts -constants.js -index.d.ts -index.js -utils.d.ts -utils.js - -component.d.ts -component.js -constants.d.ts -constants.js -index.d.ts -index.js -utils.d.ts -utils.js - -component.d.ts -component.js -constants.d.ts -constants.js -index.d.ts -index.js -utils.d.ts -utils.js - -LICENSE -README.md -dist -package.json - -declarations -react-resizable-panels.browser.cjs.js -react-resizable-panels.browser.cjs.mjs -react-resizable-panels.browser.development.cjs.js -react-resizable-panels.browser.development.cjs.mjs -react-resizable-panels.browser.development.esm.js -react-resizable-panels.browser.esm.js -react-resizable-panels.cjs.d.mts -react-resizable-panels.cjs.d.mts.map -react-resizable-panels.cjs.d.ts -react-resizable-panels.cjs.d.ts.map -react-resizable-panels.cjs.js -react-resizable-panels.cjs.mjs -react-resizable-panels.development.cjs.js -react-resizable-panels.development.cjs.mjs -react-resizable-panels.development.esm.js -react-resizable-panels.development.node.cjs.js -react-resizable-panels.development.node.cjs.mjs -react-resizable-panels.development.node.esm.js -react-resizable-panels.esm.js -react-resizable-panels.node.cjs.js -react-resizable-panels.node.cjs.mjs -react-resizable-panels.node.esm.js - -src - -Panel.d.ts -PanelGroup.d.ts -PanelResizeHandle.d.ts -PanelResizeHandleRegistry.d.ts -constants.d.ts -index.d.ts -types.d.ts -utils - -assert.d.ts -csp.d.ts -cursor.d.ts -dom -rects - -getPanelElement.d.ts -getPanelElementsForGroup.d.ts -getPanelGroupElement.d.ts -getResizeHandleElement.d.ts -getResizeHandleElementIndex.d.ts -getResizeHandleElementsForGroup.d.ts -getResizeHandlePanelIds.d.ts - -getIntersectingRectangle.d.ts -intersects.d.ts -types.d.ts - -CHANGELOG.md -LICENSE.md -README.md -dist -package.json - -index.d.ts -index.js -index.js.map -lib -main.js -react-router.development.js -react-router.development.js.map -react-router.production.min.js -react-router.production.min.js.map -umd - -components.d.ts -context.d.ts -deprecations.d.ts -hooks.d.ts - -react-router.development.js -react-router.development.js.map -react-router.production.min.js -react-router.production.min.js.map - -CHANGELOG.md -LICENSE.md -README.md -dist -package.json -server.d.ts -server.js -server.mjs - -dom.d.ts -index.d.ts -index.js -index.js.map -main.js -react-router-dom.development.js -react-router-dom.development.js.map -react-router-dom.production.min.js -react-router-dom.production.min.js.map -server.d.ts -server.js -server.mjs -umd - -react-router-dom.development.js -react-router-dom.development.js.map -react-router-dom.production.min.js -react-router-dom.production.min.js.map - -CHANGELOG.md -LICENSE -README.md -es6 -lib -package.json -src -umd - -Animate.js -AnimateGroup.js -AnimateGroupChild.js -AnimateManager.js -configUpdate.js -easing.js -index.js -setRafTimeout.js -util.js - -Animate.js -AnimateGroup.js -AnimateGroupChild.js -AnimateManager.js -configUpdate.js -easing.js -index.js -setRafTimeout.js -util.js - -Animate.js -AnimateGroup.js -AnimateGroupChild.js -AnimateManager.js -configUpdate.js -easing.js -index.js -setRafTimeout.js -util.js - -ReactSmooth.js -ReactSmooth.min.js - -LICENSE -README.md -dist -package.json - -es2015 -es2019 -es5 -index.js - -component.d.ts -component.js -hook.d.ts -hook.js -index.d.ts -index.js -singleton.d.ts -singleton.js - -component.d.ts -component.js -hook.d.ts -hook.js -index.d.ts -index.js -singleton.d.ts -singleton.js - -component.d.ts -component.js -hook.d.ts -hook.js -index.d.ts -index.js -singleton.d.ts -singleton.js - -CSSTransition -LICENSE -README.md -ReplaceTransition -SwitchTransition -Transition -TransitionGroup -TransitionGroupContext -cjs -config -dist -esm -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -package.json - -CSSTransition.js -ReplaceTransition.js -SwitchTransition.js -Transition.js -TransitionGroup.js -TransitionGroupContext.js -config.js -index.js -utils - -ChildMapping.js -PropTypes.js -SimpleSet.js -reflow.js - -package.json - -react-transition-group.js -react-transition-group.min.js - -CSSTransition.js -ReplaceTransition.js -SwitchTransition.js -Transition.js -TransitionGroup.js -TransitionGroupContext.js -config.js -index.js -utils - -ChildMapping.js -PropTypes.js -SimpleSet.js -reflow.js - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -index.d.ts -index.js -package.json - -CHANGELOG.md -CONTRIBUTING.md -LICENSE -README.md -es6 -lib -package.json -types -umd - -cartesian -chart -component -container -context -index.js -numberAxis -polar -shape -util - -Area.js -Bar.js -Brush.js -CartesianAxis.js -CartesianGrid.js -ErrorBar.js -Line.js -ReferenceArea.js -ReferenceDot.js -ReferenceLine.js -Scatter.js -XAxis.js -YAxis.js -ZAxis.js -getEquidistantTicks.js -getTicks.js - -AccessibilityManager.js -AreaChart.js -BarChart.js -ComposedChart.js -FunnelChart.js -LineChart.js -PieChart.js -RadarChart.js -RadialBarChart.js -Sankey.js -ScatterChart.js -SunburstChart.js -Treemap.js -generateCategoricalChart.js -types.js - -Cell.js -Cursor.js -Customized.js -DefaultLegendContent.js -DefaultTooltipContent.js -Label.js -LabelList.js -Legend.js -ResponsiveContainer.js -Text.js -Tooltip.js -TooltipBoundingBox.js - -Layer.js -Surface.js - -chartLayoutContext.js - -Funnel.js - -Pie.js -PolarAngleAxis.js -PolarGrid.js -PolarRadiusAxis.js -Radar.js -RadialBar.js -types.js - -Cross.js -Curve.js -Dot.js -Polygon.js -Rectangle.js -Sector.js -Symbols.js -Trapezoid.js - -ActiveShapeUtils.js -BarUtils.js -CartesianUtils.js -ChartUtils.js -Constants.js -CssPrefixUtils.js -DOMUtils.js -DataUtils.js -DetectReferenceElementsDomain.js -Events.js -FunnelUtils.js -Global.js -IfOverflowMatches.js -LogUtils.js -PolarUtils.js -RadialBarUtils.js -ReactUtils.js -ReduceCSSCalc.js -ScatterUtils.js -ShallowEqual.js -TickUtils.js -calculateViewBox.js -cursor -getEveryNthWithCondition.js -getLegendProps.js -isDomainSpecifiedByUser.js -payload -tooltip -types.js - -getCursorPoints.js -getCursorRectangle.js -getRadialCursorPoints.js - -getUniqPayload.js - -translate.js - -cartesian -chart -component -container -context -index.js -numberAxis -polar -shape -util - -Area.js -Bar.js -Brush.js -CartesianAxis.js -CartesianGrid.js -ErrorBar.js -Line.js -ReferenceArea.js -ReferenceDot.js -ReferenceLine.js -Scatter.js -XAxis.js -YAxis.js -ZAxis.js -getEquidistantTicks.js -getTicks.js - -AccessibilityManager.js -AreaChart.js -BarChart.js -ComposedChart.js -FunnelChart.js -LineChart.js -PieChart.js -RadarChart.js -RadialBarChart.js -Sankey.js -ScatterChart.js -SunburstChart.js -Treemap.js -generateCategoricalChart.js -types.js - -Cell.js -Cursor.js -Customized.js -DefaultLegendContent.js -DefaultTooltipContent.js -Label.js -LabelList.js -Legend.js -ResponsiveContainer.js -Text.js -Tooltip.js -TooltipBoundingBox.js - -Layer.js -Surface.js - -chartLayoutContext.js - -Funnel.js - -Pie.js -PolarAngleAxis.js -PolarGrid.js -PolarRadiusAxis.js -Radar.js -RadialBar.js -types.js - -Cross.js -Curve.js -Dot.js -Polygon.js -Rectangle.js -Sector.js -Symbols.js -Trapezoid.js - -ActiveShapeUtils.js -BarUtils.js -CartesianUtils.js -ChartUtils.js -Constants.js -CssPrefixUtils.js -DOMUtils.js -DataUtils.js -DetectReferenceElementsDomain.js -Events.js -FunnelUtils.js -Global.js -IfOverflowMatches.js -LogUtils.js -PolarUtils.js -RadialBarUtils.js -ReactUtils.js -ReduceCSSCalc.js -ScatterUtils.js -ShallowEqual.js -TickUtils.js -calculateViewBox.js -cursor -getEveryNthWithCondition.js -getLegendProps.js -isDomainSpecifiedByUser.js -payload -tooltip -types.js - -getCursorPoints.js -getCursorRectangle.js -getRadialCursorPoints.js - -getUniqPayload.js - -translate.js - -cartesian -chart -component -container -context -index.d.ts -numberAxis -polar -shape -util - -Area.d.ts -Bar.d.ts -Brush.d.ts -CartesianAxis.d.ts -CartesianGrid.d.ts -ErrorBar.d.ts -Line.d.ts -ReferenceArea.d.ts -ReferenceDot.d.ts -ReferenceLine.d.ts -Scatter.d.ts -XAxis.d.ts -YAxis.d.ts -ZAxis.d.ts -getEquidistantTicks.d.ts -getTicks.d.ts - -AccessibilityManager.d.ts -AreaChart.d.ts -BarChart.d.ts -ComposedChart.d.ts -FunnelChart.d.ts -LineChart.d.ts -PieChart.d.ts -RadarChart.d.ts -RadialBarChart.d.ts -Sankey.d.ts -ScatterChart.d.ts -SunburstChart.d.ts -Treemap.d.ts -generateCategoricalChart.d.ts -types.d.ts - -Cell.d.ts -Cursor.d.ts -Customized.d.ts -DefaultLegendContent.d.ts -DefaultTooltipContent.d.ts -Label.d.ts -LabelList.d.ts -Legend.d.ts -ResponsiveContainer.d.ts -Text.d.ts -Tooltip.d.ts -TooltipBoundingBox.d.ts - -Layer.d.ts -Surface.d.ts - -chartLayoutContext.d.ts - -Funnel.d.ts - -Pie.d.ts -PolarAngleAxis.d.ts -PolarGrid.d.ts -PolarRadiusAxis.d.ts -Radar.d.ts -RadialBar.d.ts -types.d.ts - -Cross.d.ts -Curve.d.ts -Dot.d.ts -Polygon.d.ts -Rectangle.d.ts -Sector.d.ts -Symbols.d.ts -Trapezoid.d.ts - -ActiveShapeUtils.d.ts -BarUtils.d.ts -CartesianUtils.d.ts -ChartUtils.d.ts -Constants.d.ts -CssPrefixUtils.d.ts -DOMUtils.d.ts -DataUtils.d.ts -DetectReferenceElementsDomain.d.ts -Events.d.ts -FunnelUtils.d.ts -Global.d.ts -IfOverflowMatches.d.ts -LogUtils.d.ts -PolarUtils.d.ts -RadialBarUtils.d.ts -ReactUtils.d.ts -ReduceCSSCalc.d.ts -ScatterUtils.d.ts -ShallowEqual.d.ts -TickUtils.d.ts -calculateViewBox.d.ts -cursor -getEveryNthWithCondition.d.ts -getLegendProps.d.ts -isDomainSpecifiedByUser.d.ts -payload -tooltip -types.d.ts - -getCursorPoints.d.ts -getCursorRectangle.d.ts -getRadialCursorPoints.d.ts - -getUniqPayload.d.ts - -translate.d.ts - -Recharts.js -Recharts.js.LICENSE.txt -Recharts.js.map -report.html - -CHANGELOG.md -LICENSE -README.md -es6 -lib -package.json -src -umd - -getNiceTickValues.js -index.js -util - -arithmetic.js -utils.js - -getNiceTickValues.js -index.js -util - -arithmetic.js -utils.js - -getNiceTickValues.js -index.js -util - -arithmetic.js -utils.js - -RechartsScale.js -RechartsScale.min.js -RechartsScale.min.js.LICENSE.txt - -LICENSE -README.markdown -index.js -package.json - -CHANGELOG.md -LICENSE.txt -README.md -index.js -package.json - -LICENSE -SECURITY.md -async.js -bin -example -index.js -lib -package.json -readme.markdown -sync.js -test - -resolve - -async.js -sync.js - -async.js -caller.js -core.js -core.json -homedir.js -is-core.js -node-modules-paths.js -normalize-options.js -sync.js - -core.js -dotdot -dotdot.js -faulty_basedir.js -filter.js -filter_sync.js -home_paths.js -home_paths_sync.js -mock.js -mock_sync.js -module_dir -module_dir.js -node-modules-paths.js -node_path -node_path.js -nonstring.js -pathfilter -pathfilter.js -precedence -precedence.js -resolver -resolver.js -resolver_sync.js -shadowed_core -shadowed_core.js -subdirs.js -symlinks.js - -abc -index.js - -index.js - -xmodules -ymodules -zmodules - -aaa - -index.js - -aaa - -index.js - -bbb - -main.js -package.json - -x -y - -aaa -ccc - -index.js - -index.js - -bbb -ccc - -index.js - -index.js - -deep_ref - -main.js - -aaa -aaa.js -bbb -bbb.js - -index.js -main.js - -main.js - -baz -browser_field -cup.coffee -dot_main -dot_slash_main -false_main -foo.js -incorrect_main -invalid_main -mug.coffee -mug.js -multirepo -nested_symlinks -other_path -quux -same_names -symlinked -without_basedir - -doom.js -package.json -quux.js - -a.js -b.js -package.json - -index.js -package.json - -index.js -package.json - -index.js -package.json - -index.js -package.json - -package.json - -lerna.json -package.json -packages - -package-a -package-b - -index.js -package.json - -index.js -package.json - -mylib - -async.js -package.json -sync.js - -lib -root.js - -other-lib.js - -foo - -index.js - -foo -foo.js - -index.js - -_ -package - -symlink_target - -foo.js - - -bar.js -package.json - -main.js - - -util - -index.js - -index.js -license -package.json -readme.md - -LICENSE -README.md -SECURITY.md -benchmarks -eslint.config.js -package.json -reusify.d.ts -reusify.js -test.js -tsconfig.json - -createNoCodeFunction.js -fib.js -reuseNoCodeFunction.js - -LICENSE.md -README.md -dist -package.json - -bin -es -getLogFilter.d.ts -getLogFilter.js -loadConfigFile.d.ts -loadConfigFile.js -native.js -parseAst.d.ts -parseAst.js -rollup.d.ts -rollup.js -shared - -rollup - -getLogFilter.js -package.json -parseAst.js -rollup.js -shared - -node-entry.js -parseAst.js -watch.js - -fsevents-importer.js -index.js -loadConfigFile.js -parseAst.js -rollup.js -watch-cli.js -watch.js - -LICENSE -README.md -index.js -package.json - -CHANGELOG.md -CODE_OF_CONDUCT.md -LICENSE.txt -README.md -ajax -dist -fetch -operators -package.json -src -testing -tsconfig.json -webSocket - -package.json - -bundles -cjs -esm -esm5 -types - -rxjs.umd.js -rxjs.umd.js.map -rxjs.umd.min.js -rxjs.umd.min.js.map - -ajax -fetch -index.js -index.js.map -internal -operators -testing -webSocket - -index.js -index.js.map - -index.js -index.js.map - -AnyCatcher.js -AnyCatcher.js.map -AsyncSubject.js -AsyncSubject.js.map -BehaviorSubject.js -BehaviorSubject.js.map -Notification.js -Notification.js.map -NotificationFactories.js -NotificationFactories.js.map -Observable.js -Observable.js.map -Operator.js -Operator.js.map -ReplaySubject.js -ReplaySubject.js.map -Scheduler.js -Scheduler.js.map -Subject.js -Subject.js.map -Subscriber.js -Subscriber.js.map -Subscription.js -Subscription.js.map -ajax -config.js -config.js.map -firstValueFrom.js -firstValueFrom.js.map -lastValueFrom.js -lastValueFrom.js.map -observable -operators -scheduled -scheduler -symbol -testing -types.js -types.js.map -util - -AjaxResponse.js -AjaxResponse.js.map -ajax.js -ajax.js.map -errors.js -errors.js.map -getXHRResponse.js -getXHRResponse.js.map -types.js -types.js.map - -ConnectableObservable.js -ConnectableObservable.js.map -bindCallback.js -bindCallback.js.map -bindCallbackInternals.js -bindCallbackInternals.js.map -bindNodeCallback.js -bindNodeCallback.js.map -combineLatest.js -combineLatest.js.map -concat.js -concat.js.map -connectable.js -connectable.js.map -defer.js -defer.js.map -dom -empty.js -empty.js.map -forkJoin.js -forkJoin.js.map -from.js -from.js.map -fromEvent.js -fromEvent.js.map -fromEventPattern.js -fromEventPattern.js.map -fromSubscribable.js -fromSubscribable.js.map -generate.js -generate.js.map -iif.js -iif.js.map -innerFrom.js -innerFrom.js.map -interval.js -interval.js.map -merge.js -merge.js.map -never.js -never.js.map -of.js -of.js.map -onErrorResumeNext.js -onErrorResumeNext.js.map -pairs.js -pairs.js.map -partition.js -partition.js.map -race.js -race.js.map -range.js -range.js.map -throwError.js -throwError.js.map -timer.js -timer.js.map -using.js -using.js.map -zip.js -zip.js.map - -WebSocketSubject.js -WebSocketSubject.js.map -animationFrames.js -animationFrames.js.map -fetch.js -fetch.js.map -webSocket.js -webSocket.js.map - -OperatorSubscriber.js -OperatorSubscriber.js.map -audit.js -audit.js.map -auditTime.js -auditTime.js.map -buffer.js -buffer.js.map -bufferCount.js -bufferCount.js.map -bufferTime.js -bufferTime.js.map -bufferToggle.js -bufferToggle.js.map -bufferWhen.js -bufferWhen.js.map -catchError.js -catchError.js.map -combineAll.js -combineAll.js.map -combineLatest.js -combineLatest.js.map -combineLatestAll.js -combineLatestAll.js.map -combineLatestWith.js -combineLatestWith.js.map -concat.js -concat.js.map -concatAll.js -concatAll.js.map -concatMap.js -concatMap.js.map -concatMapTo.js -concatMapTo.js.map -concatWith.js -concatWith.js.map -connect.js -connect.js.map -count.js -count.js.map -debounce.js -debounce.js.map -debounceTime.js -debounceTime.js.map -defaultIfEmpty.js -defaultIfEmpty.js.map -delay.js -delay.js.map -delayWhen.js -delayWhen.js.map -dematerialize.js -dematerialize.js.map -distinct.js -distinct.js.map -distinctUntilChanged.js -distinctUntilChanged.js.map -distinctUntilKeyChanged.js -distinctUntilKeyChanged.js.map -elementAt.js -elementAt.js.map -endWith.js -endWith.js.map -every.js -every.js.map -exhaust.js -exhaust.js.map -exhaustAll.js -exhaustAll.js.map -exhaustMap.js -exhaustMap.js.map -expand.js -expand.js.map -filter.js -filter.js.map -finalize.js -finalize.js.map -find.js -find.js.map -findIndex.js -findIndex.js.map -first.js -first.js.map -flatMap.js -flatMap.js.map -groupBy.js -groupBy.js.map -ignoreElements.js -ignoreElements.js.map -isEmpty.js -isEmpty.js.map -joinAllInternals.js -joinAllInternals.js.map -last.js -last.js.map -map.js -map.js.map -mapTo.js -mapTo.js.map -materialize.js -materialize.js.map -max.js -max.js.map -merge.js -merge.js.map -mergeAll.js -mergeAll.js.map -mergeInternals.js -mergeInternals.js.map -mergeMap.js -mergeMap.js.map -mergeMapTo.js -mergeMapTo.js.map -mergeScan.js -mergeScan.js.map -mergeWith.js -mergeWith.js.map -min.js -min.js.map -multicast.js -multicast.js.map -observeOn.js -observeOn.js.map -onErrorResumeNextWith.js -onErrorResumeNextWith.js.map -pairwise.js -pairwise.js.map -partition.js -partition.js.map -pluck.js -pluck.js.map -publish.js -publish.js.map -publishBehavior.js -publishBehavior.js.map -publishLast.js -publishLast.js.map -publishReplay.js -publishReplay.js.map -race.js -race.js.map -raceWith.js -raceWith.js.map -reduce.js -reduce.js.map -refCount.js -refCount.js.map -repeat.js -repeat.js.map -repeatWhen.js -repeatWhen.js.map -retry.js -retry.js.map -retryWhen.js -retryWhen.js.map -sample.js -sample.js.map -sampleTime.js -sampleTime.js.map -scan.js -scan.js.map -scanInternals.js -scanInternals.js.map -sequenceEqual.js -sequenceEqual.js.map -share.js -share.js.map -shareReplay.js -shareReplay.js.map -single.js -single.js.map -skip.js -skip.js.map -skipLast.js -skipLast.js.map -skipUntil.js -skipUntil.js.map -skipWhile.js -skipWhile.js.map -startWith.js -startWith.js.map -subscribeOn.js -subscribeOn.js.map -switchAll.js -switchAll.js.map -switchMap.js -switchMap.js.map -switchMapTo.js -switchMapTo.js.map -switchScan.js -switchScan.js.map -take.js -take.js.map -takeLast.js -takeLast.js.map -takeUntil.js -takeUntil.js.map -takeWhile.js -takeWhile.js.map -tap.js -tap.js.map -throttle.js -throttle.js.map -throttleTime.js -throttleTime.js.map -throwIfEmpty.js -throwIfEmpty.js.map -timeInterval.js -timeInterval.js.map -timeout.js -timeout.js.map -timeoutWith.js -timeoutWith.js.map -timestamp.js -timestamp.js.map -toArray.js -toArray.js.map -window.js -window.js.map -windowCount.js -windowCount.js.map -windowTime.js -windowTime.js.map -windowToggle.js -windowToggle.js.map -windowWhen.js -windowWhen.js.map -withLatestFrom.js -withLatestFrom.js.map -zip.js -zip.js.map -zipAll.js -zipAll.js.map -zipWith.js -zipWith.js.map - -scheduleArray.js -scheduleArray.js.map -scheduleAsyncIterable.js -scheduleAsyncIterable.js.map -scheduleIterable.js -scheduleIterable.js.map -scheduleObservable.js -scheduleObservable.js.map -schedulePromise.js -schedulePromise.js.map -scheduleReadableStreamLike.js -scheduleReadableStreamLike.js.map -scheduled.js -scheduled.js.map - -Action.js -Action.js.map -AnimationFrameAction.js -AnimationFrameAction.js.map -AnimationFrameScheduler.js -AnimationFrameScheduler.js.map -AsapAction.js -AsapAction.js.map -AsapScheduler.js -AsapScheduler.js.map -AsyncAction.js -AsyncAction.js.map -AsyncScheduler.js -AsyncScheduler.js.map -QueueAction.js -QueueAction.js.map -QueueScheduler.js -QueueScheduler.js.map -VirtualTimeScheduler.js -VirtualTimeScheduler.js.map -animationFrame.js -animationFrame.js.map -animationFrameProvider.js -animationFrameProvider.js.map -asap.js -asap.js.map -async.js -async.js.map -dateTimestampProvider.js -dateTimestampProvider.js.map -immediateProvider.js -immediateProvider.js.map -intervalProvider.js -intervalProvider.js.map -performanceTimestampProvider.js -performanceTimestampProvider.js.map -queue.js -queue.js.map -timeoutProvider.js -timeoutProvider.js.map -timerHandle.js -timerHandle.js.map - -iterator.js -iterator.js.map -observable.js -observable.js.map - -ColdObservable.js -ColdObservable.js.map -HotObservable.js -HotObservable.js.map -SubscriptionLog.js -SubscriptionLog.js.map -SubscriptionLoggable.js -SubscriptionLoggable.js.map -TestMessage.js -TestMessage.js.map -TestScheduler.js -TestScheduler.js.map - -ArgumentOutOfRangeError.js -ArgumentOutOfRangeError.js.map -EmptyError.js -EmptyError.js.map -Immediate.js -Immediate.js.map -NotFoundError.js -NotFoundError.js.map -ObjectUnsubscribedError.js -ObjectUnsubscribedError.js.map -SequenceError.js -SequenceError.js.map -UnsubscriptionError.js -UnsubscriptionError.js.map -applyMixins.js -applyMixins.js.map -args.js -args.js.map -argsArgArrayOrObject.js -argsArgArrayOrObject.js.map -argsOrArgArray.js -argsOrArgArray.js.map -arrRemove.js -arrRemove.js.map -createErrorClass.js -createErrorClass.js.map -createObject.js -createObject.js.map -errorContext.js -errorContext.js.map -executeSchedule.js -executeSchedule.js.map -identity.js -identity.js.map -isArrayLike.js -isArrayLike.js.map -isAsyncIterable.js -isAsyncIterable.js.map -isDate.js -isDate.js.map -isFunction.js -isFunction.js.map -isInteropObservable.js -isInteropObservable.js.map -isIterable.js -isIterable.js.map -isObservable.js -isObservable.js.map -isPromise.js -isPromise.js.map -isReadableStreamLike.js -isReadableStreamLike.js.map -isScheduler.js -isScheduler.js.map -lift.js -lift.js.map -mapOneOrManyArgs.js -mapOneOrManyArgs.js.map -noop.js -noop.js.map -not.js -not.js.map -pipe.js -pipe.js.map -reportUnhandledError.js -reportUnhandledError.js.map -subscribeToArray.js -subscribeToArray.js.map -throwUnobservableError.js -throwUnobservableError.js.map -workarounds.js -workarounds.js.map - -index.js -index.js.map - -index.js -index.js.map - -index.js -index.js.map - -ajax -fetch -index.js -index.js.map -internal -operators -testing -webSocket - -index.js -index.js.map - -index.js -index.js.map - -AnyCatcher.js -AnyCatcher.js.map -AsyncSubject.js -AsyncSubject.js.map -BehaviorSubject.js -BehaviorSubject.js.map -Notification.js -Notification.js.map -NotificationFactories.js -NotificationFactories.js.map -Observable.js -Observable.js.map -Operator.js -Operator.js.map -ReplaySubject.js -ReplaySubject.js.map -Scheduler.js -Scheduler.js.map -Subject.js -Subject.js.map -Subscriber.js -Subscriber.js.map -Subscription.js -Subscription.js.map -ajax -config.js -config.js.map -firstValueFrom.js -firstValueFrom.js.map -lastValueFrom.js -lastValueFrom.js.map -observable -operators -scheduled -scheduler -symbol -testing -types.js -types.js.map -umd.js -umd.js.map -util - -AjaxResponse.js -AjaxResponse.js.map -ajax.js -ajax.js.map -errors.js -errors.js.map -getXHRResponse.js -getXHRResponse.js.map -types.js -types.js.map - -ConnectableObservable.js -ConnectableObservable.js.map -bindCallback.js -bindCallback.js.map -bindCallbackInternals.js -bindCallbackInternals.js.map -bindNodeCallback.js -bindNodeCallback.js.map -combineLatest.js -combineLatest.js.map -concat.js -concat.js.map -connectable.js -connectable.js.map -defer.js -defer.js.map -dom -empty.js -empty.js.map -forkJoin.js -forkJoin.js.map -from.js -from.js.map -fromEvent.js -fromEvent.js.map -fromEventPattern.js -fromEventPattern.js.map -fromSubscribable.js -fromSubscribable.js.map -generate.js -generate.js.map -iif.js -iif.js.map -innerFrom.js -innerFrom.js.map -interval.js -interval.js.map -merge.js -merge.js.map -never.js -never.js.map -of.js -of.js.map -onErrorResumeNext.js -onErrorResumeNext.js.map -pairs.js -pairs.js.map -partition.js -partition.js.map -race.js -race.js.map -range.js -range.js.map -throwError.js -throwError.js.map -timer.js -timer.js.map -using.js -using.js.map -zip.js -zip.js.map - -WebSocketSubject.js -WebSocketSubject.js.map -animationFrames.js -animationFrames.js.map -fetch.js -fetch.js.map -webSocket.js -webSocket.js.map - -OperatorSubscriber.js -OperatorSubscriber.js.map -audit.js -audit.js.map -auditTime.js -auditTime.js.map -buffer.js -buffer.js.map -bufferCount.js -bufferCount.js.map -bufferTime.js -bufferTime.js.map -bufferToggle.js -bufferToggle.js.map -bufferWhen.js -bufferWhen.js.map -catchError.js -catchError.js.map -combineAll.js -combineAll.js.map -combineLatest.js -combineLatest.js.map -combineLatestAll.js -combineLatestAll.js.map -combineLatestWith.js -combineLatestWith.js.map -concat.js -concat.js.map -concatAll.js -concatAll.js.map -concatMap.js -concatMap.js.map -concatMapTo.js -concatMapTo.js.map -concatWith.js -concatWith.js.map -connect.js -connect.js.map -count.js -count.js.map -debounce.js -debounce.js.map -debounceTime.js -debounceTime.js.map -defaultIfEmpty.js -defaultIfEmpty.js.map -delay.js -delay.js.map -delayWhen.js -delayWhen.js.map -dematerialize.js -dematerialize.js.map -distinct.js -distinct.js.map -distinctUntilChanged.js -distinctUntilChanged.js.map -distinctUntilKeyChanged.js -distinctUntilKeyChanged.js.map -elementAt.js -elementAt.js.map -endWith.js -endWith.js.map -every.js -every.js.map -exhaust.js -exhaust.js.map -exhaustAll.js -exhaustAll.js.map -exhaustMap.js -exhaustMap.js.map -expand.js -expand.js.map -filter.js -filter.js.map -finalize.js -finalize.js.map -find.js -find.js.map -findIndex.js -findIndex.js.map -first.js -first.js.map -flatMap.js -flatMap.js.map -groupBy.js -groupBy.js.map -ignoreElements.js -ignoreElements.js.map -isEmpty.js -isEmpty.js.map -joinAllInternals.js -joinAllInternals.js.map -last.js -last.js.map -map.js -map.js.map -mapTo.js -mapTo.js.map -materialize.js -materialize.js.map -max.js -max.js.map -merge.js -merge.js.map -mergeAll.js -mergeAll.js.map -mergeInternals.js -mergeInternals.js.map -mergeMap.js -mergeMap.js.map -mergeMapTo.js -mergeMapTo.js.map -mergeScan.js -mergeScan.js.map -mergeWith.js -mergeWith.js.map -min.js -min.js.map -multicast.js -multicast.js.map -observeOn.js -observeOn.js.map -onErrorResumeNextWith.js -onErrorResumeNextWith.js.map -pairwise.js -pairwise.js.map -partition.js -partition.js.map -pluck.js -pluck.js.map -publish.js -publish.js.map -publishBehavior.js -publishBehavior.js.map -publishLast.js -publishLast.js.map -publishReplay.js -publishReplay.js.map -race.js -race.js.map -raceWith.js -raceWith.js.map -reduce.js -reduce.js.map -refCount.js -refCount.js.map -repeat.js -repeat.js.map -repeatWhen.js -repeatWhen.js.map -retry.js -retry.js.map -retryWhen.js -retryWhen.js.map -sample.js -sample.js.map -sampleTime.js -sampleTime.js.map -scan.js -scan.js.map -scanInternals.js -scanInternals.js.map -sequenceEqual.js -sequenceEqual.js.map -share.js -share.js.map -shareReplay.js -shareReplay.js.map -single.js -single.js.map -skip.js -skip.js.map -skipLast.js -skipLast.js.map -skipUntil.js -skipUntil.js.map -skipWhile.js -skipWhile.js.map -startWith.js -startWith.js.map -subscribeOn.js -subscribeOn.js.map -switchAll.js -switchAll.js.map -switchMap.js -switchMap.js.map -switchMapTo.js -switchMapTo.js.map -switchScan.js -switchScan.js.map -take.js -take.js.map -takeLast.js -takeLast.js.map -takeUntil.js -takeUntil.js.map -takeWhile.js -takeWhile.js.map -tap.js -tap.js.map -throttle.js -throttle.js.map -throttleTime.js -throttleTime.js.map -throwIfEmpty.js -throwIfEmpty.js.map -timeInterval.js -timeInterval.js.map -timeout.js -timeout.js.map -timeoutWith.js -timeoutWith.js.map -timestamp.js -timestamp.js.map -toArray.js -toArray.js.map -window.js -window.js.map -windowCount.js -windowCount.js.map -windowTime.js -windowTime.js.map -windowToggle.js -windowToggle.js.map -windowWhen.js -windowWhen.js.map -withLatestFrom.js -withLatestFrom.js.map -zip.js -zip.js.map -zipAll.js -zipAll.js.map -zipWith.js -zipWith.js.map - -scheduleArray.js -scheduleArray.js.map -scheduleAsyncIterable.js -scheduleAsyncIterable.js.map -scheduleIterable.js -scheduleIterable.js.map -scheduleObservable.js -scheduleObservable.js.map -schedulePromise.js -schedulePromise.js.map -scheduleReadableStreamLike.js -scheduleReadableStreamLike.js.map -scheduled.js -scheduled.js.map - -Action.js -Action.js.map -AnimationFrameAction.js -AnimationFrameAction.js.map -AnimationFrameScheduler.js -AnimationFrameScheduler.js.map -AsapAction.js -AsapAction.js.map -AsapScheduler.js -AsapScheduler.js.map -AsyncAction.js -AsyncAction.js.map -AsyncScheduler.js -AsyncScheduler.js.map -QueueAction.js -QueueAction.js.map -QueueScheduler.js -QueueScheduler.js.map -VirtualTimeScheduler.js -VirtualTimeScheduler.js.map -animationFrame.js -animationFrame.js.map -animationFrameProvider.js -animationFrameProvider.js.map -asap.js -asap.js.map -async.js -async.js.map -dateTimestampProvider.js -dateTimestampProvider.js.map -immediateProvider.js -immediateProvider.js.map -intervalProvider.js -intervalProvider.js.map -performanceTimestampProvider.js -performanceTimestampProvider.js.map -queue.js -queue.js.map -timeoutProvider.js -timeoutProvider.js.map -timerHandle.js -timerHandle.js.map - -iterator.js -iterator.js.map -observable.js -observable.js.map - -ColdObservable.js -ColdObservable.js.map -HotObservable.js -HotObservable.js.map -SubscriptionLog.js -SubscriptionLog.js.map -SubscriptionLoggable.js -SubscriptionLoggable.js.map -TestMessage.js -TestMessage.js.map -TestScheduler.js -TestScheduler.js.map - -ArgumentOutOfRangeError.js -ArgumentOutOfRangeError.js.map -EmptyError.js -EmptyError.js.map -Immediate.js -Immediate.js.map -NotFoundError.js -NotFoundError.js.map -ObjectUnsubscribedError.js -ObjectUnsubscribedError.js.map -SequenceError.js -SequenceError.js.map -UnsubscriptionError.js -UnsubscriptionError.js.map -applyMixins.js -applyMixins.js.map -args.js -args.js.map -argsArgArrayOrObject.js -argsArgArrayOrObject.js.map -argsOrArgArray.js -argsOrArgArray.js.map -arrRemove.js -arrRemove.js.map -createErrorClass.js -createErrorClass.js.map -createObject.js -createObject.js.map -errorContext.js -errorContext.js.map -executeSchedule.js -executeSchedule.js.map -identity.js -identity.js.map -isArrayLike.js -isArrayLike.js.map -isAsyncIterable.js -isAsyncIterable.js.map -isDate.js -isDate.js.map -isFunction.js -isFunction.js.map -isInteropObservable.js -isInteropObservable.js.map -isIterable.js -isIterable.js.map -isObservable.js -isObservable.js.map -isPromise.js -isPromise.js.map -isReadableStreamLike.js -isReadableStreamLike.js.map -isScheduler.js -isScheduler.js.map -lift.js -lift.js.map -mapOneOrManyArgs.js -mapOneOrManyArgs.js.map -noop.js -noop.js.map -not.js -not.js.map -pipe.js -pipe.js.map -reportUnhandledError.js -reportUnhandledError.js.map -subscribeToArray.js -subscribeToArray.js.map -throwUnobservableError.js -throwUnobservableError.js.map -workarounds.js -workarounds.js.map - -index.js -index.js.map - -index.js -index.js.map - -index.js -index.js.map - -ajax -fetch -index.js -index.js.map -internal -operators -testing -webSocket - -index.js -index.js.map - -index.js -index.js.map - -AnyCatcher.js -AnyCatcher.js.map -AsyncSubject.js -AsyncSubject.js.map -BehaviorSubject.js -BehaviorSubject.js.map -Notification.js -Notification.js.map -NotificationFactories.js -NotificationFactories.js.map -Observable.js -Observable.js.map -Operator.js -Operator.js.map -ReplaySubject.js -ReplaySubject.js.map -Scheduler.js -Scheduler.js.map -Subject.js -Subject.js.map -Subscriber.js -Subscriber.js.map -Subscription.js -Subscription.js.map -ajax -config.js -config.js.map -firstValueFrom.js -firstValueFrom.js.map -lastValueFrom.js -lastValueFrom.js.map -observable -operators -scheduled -scheduler -symbol -testing -types.js -types.js.map -util - -AjaxResponse.js -AjaxResponse.js.map -ajax.js -ajax.js.map -errors.js -errors.js.map -getXHRResponse.js -getXHRResponse.js.map -types.js -types.js.map - -ConnectableObservable.js -ConnectableObservable.js.map -bindCallback.js -bindCallback.js.map -bindCallbackInternals.js -bindCallbackInternals.js.map -bindNodeCallback.js -bindNodeCallback.js.map -combineLatest.js -combineLatest.js.map -concat.js -concat.js.map -connectable.js -connectable.js.map -defer.js -defer.js.map -dom -empty.js -empty.js.map -forkJoin.js -forkJoin.js.map -from.js -from.js.map -fromEvent.js -fromEvent.js.map -fromEventPattern.js -fromEventPattern.js.map -fromSubscribable.js -fromSubscribable.js.map -generate.js -generate.js.map -iif.js -iif.js.map -innerFrom.js -innerFrom.js.map -interval.js -interval.js.map -merge.js -merge.js.map -never.js -never.js.map -of.js -of.js.map -onErrorResumeNext.js -onErrorResumeNext.js.map -pairs.js -pairs.js.map -partition.js -partition.js.map -race.js -race.js.map -range.js -range.js.map -throwError.js -throwError.js.map -timer.js -timer.js.map -using.js -using.js.map -zip.js -zip.js.map - -WebSocketSubject.js -WebSocketSubject.js.map -animationFrames.js -animationFrames.js.map -fetch.js -fetch.js.map -webSocket.js -webSocket.js.map - -OperatorSubscriber.js -OperatorSubscriber.js.map -audit.js -audit.js.map -auditTime.js -auditTime.js.map -buffer.js -buffer.js.map -bufferCount.js -bufferCount.js.map -bufferTime.js -bufferTime.js.map -bufferToggle.js -bufferToggle.js.map -bufferWhen.js -bufferWhen.js.map -catchError.js -catchError.js.map -combineAll.js -combineAll.js.map -combineLatest.js -combineLatest.js.map -combineLatestAll.js -combineLatestAll.js.map -combineLatestWith.js -combineLatestWith.js.map -concat.js -concat.js.map -concatAll.js -concatAll.js.map -concatMap.js -concatMap.js.map -concatMapTo.js -concatMapTo.js.map -concatWith.js -concatWith.js.map -connect.js -connect.js.map -count.js -count.js.map -debounce.js -debounce.js.map -debounceTime.js -debounceTime.js.map -defaultIfEmpty.js -defaultIfEmpty.js.map -delay.js -delay.js.map -delayWhen.js -delayWhen.js.map -dematerialize.js -dematerialize.js.map -distinct.js -distinct.js.map -distinctUntilChanged.js -distinctUntilChanged.js.map -distinctUntilKeyChanged.js -distinctUntilKeyChanged.js.map -elementAt.js -elementAt.js.map -endWith.js -endWith.js.map -every.js -every.js.map -exhaust.js -exhaust.js.map -exhaustAll.js -exhaustAll.js.map -exhaustMap.js -exhaustMap.js.map -expand.js -expand.js.map -filter.js -filter.js.map -finalize.js -finalize.js.map -find.js -find.js.map -findIndex.js -findIndex.js.map -first.js -first.js.map -flatMap.js -flatMap.js.map -groupBy.js -groupBy.js.map -ignoreElements.js -ignoreElements.js.map -isEmpty.js -isEmpty.js.map -joinAllInternals.js -joinAllInternals.js.map -last.js -last.js.map -map.js -map.js.map -mapTo.js -mapTo.js.map -materialize.js -materialize.js.map -max.js -max.js.map -merge.js -merge.js.map -mergeAll.js -mergeAll.js.map -mergeInternals.js -mergeInternals.js.map -mergeMap.js -mergeMap.js.map -mergeMapTo.js -mergeMapTo.js.map -mergeScan.js -mergeScan.js.map -mergeWith.js -mergeWith.js.map -min.js -min.js.map -multicast.js -multicast.js.map -observeOn.js -observeOn.js.map -onErrorResumeNextWith.js -onErrorResumeNextWith.js.map -pairwise.js -pairwise.js.map -partition.js -partition.js.map -pluck.js -pluck.js.map -publish.js -publish.js.map -publishBehavior.js -publishBehavior.js.map -publishLast.js -publishLast.js.map -publishReplay.js -publishReplay.js.map -race.js -race.js.map -raceWith.js -raceWith.js.map -reduce.js -reduce.js.map -refCount.js -refCount.js.map -repeat.js -repeat.js.map -repeatWhen.js -repeatWhen.js.map -retry.js -retry.js.map -retryWhen.js -retryWhen.js.map -sample.js -sample.js.map -sampleTime.js -sampleTime.js.map -scan.js -scan.js.map -scanInternals.js -scanInternals.js.map -sequenceEqual.js -sequenceEqual.js.map -share.js -share.js.map -shareReplay.js -shareReplay.js.map -single.js -single.js.map -skip.js -skip.js.map -skipLast.js -skipLast.js.map -skipUntil.js -skipUntil.js.map -skipWhile.js -skipWhile.js.map -startWith.js -startWith.js.map -subscribeOn.js -subscribeOn.js.map -switchAll.js -switchAll.js.map -switchMap.js -switchMap.js.map -switchMapTo.js -switchMapTo.js.map -switchScan.js -switchScan.js.map -take.js -take.js.map -takeLast.js -takeLast.js.map -takeUntil.js -takeUntil.js.map -takeWhile.js -takeWhile.js.map -tap.js -tap.js.map -throttle.js -throttle.js.map -throttleTime.js -throttleTime.js.map -throwIfEmpty.js -throwIfEmpty.js.map -timeInterval.js -timeInterval.js.map -timeout.js -timeout.js.map -timeoutWith.js -timeoutWith.js.map -timestamp.js -timestamp.js.map -toArray.js -toArray.js.map -window.js -window.js.map -windowCount.js -windowCount.js.map -windowTime.js -windowTime.js.map -windowToggle.js -windowToggle.js.map -windowWhen.js -windowWhen.js.map -withLatestFrom.js -withLatestFrom.js.map -zip.js -zip.js.map -zipAll.js -zipAll.js.map -zipWith.js -zipWith.js.map - -scheduleArray.js -scheduleArray.js.map -scheduleAsyncIterable.js -scheduleAsyncIterable.js.map -scheduleIterable.js -scheduleIterable.js.map -scheduleObservable.js -scheduleObservable.js.map -schedulePromise.js -schedulePromise.js.map -scheduleReadableStreamLike.js -scheduleReadableStreamLike.js.map -scheduled.js -scheduled.js.map - -Action.js -Action.js.map -AnimationFrameAction.js -AnimationFrameAction.js.map -AnimationFrameScheduler.js -AnimationFrameScheduler.js.map -AsapAction.js -AsapAction.js.map -AsapScheduler.js -AsapScheduler.js.map -AsyncAction.js -AsyncAction.js.map -AsyncScheduler.js -AsyncScheduler.js.map -QueueAction.js -QueueAction.js.map -QueueScheduler.js -QueueScheduler.js.map -VirtualTimeScheduler.js -VirtualTimeScheduler.js.map -animationFrame.js -animationFrame.js.map -animationFrameProvider.js -animationFrameProvider.js.map -asap.js -asap.js.map -async.js -async.js.map -dateTimestampProvider.js -dateTimestampProvider.js.map -immediateProvider.js -immediateProvider.js.map -intervalProvider.js -intervalProvider.js.map -performanceTimestampProvider.js -performanceTimestampProvider.js.map -queue.js -queue.js.map -timeoutProvider.js -timeoutProvider.js.map -timerHandle.js -timerHandle.js.map - -iterator.js -iterator.js.map -observable.js -observable.js.map - -ColdObservable.js -ColdObservable.js.map -HotObservable.js -HotObservable.js.map -SubscriptionLog.js -SubscriptionLog.js.map -SubscriptionLoggable.js -SubscriptionLoggable.js.map -TestMessage.js -TestMessage.js.map -TestScheduler.js -TestScheduler.js.map - -ArgumentOutOfRangeError.js -ArgumentOutOfRangeError.js.map -EmptyError.js -EmptyError.js.map -Immediate.js -Immediate.js.map -NotFoundError.js -NotFoundError.js.map -ObjectUnsubscribedError.js -ObjectUnsubscribedError.js.map -SequenceError.js -SequenceError.js.map -UnsubscriptionError.js -UnsubscriptionError.js.map -applyMixins.js -applyMixins.js.map -args.js -args.js.map -argsArgArrayOrObject.js -argsArgArrayOrObject.js.map -argsOrArgArray.js -argsOrArgArray.js.map -arrRemove.js -arrRemove.js.map -createErrorClass.js -createErrorClass.js.map -createObject.js -createObject.js.map -errorContext.js -errorContext.js.map -executeSchedule.js -executeSchedule.js.map -identity.js -identity.js.map -isArrayLike.js -isArrayLike.js.map -isAsyncIterable.js -isAsyncIterable.js.map -isDate.js -isDate.js.map -isFunction.js -isFunction.js.map -isInteropObservable.js -isInteropObservable.js.map -isIterable.js -isIterable.js.map -isObservable.js -isObservable.js.map -isPromise.js -isPromise.js.map -isReadableStreamLike.js -isReadableStreamLike.js.map -isScheduler.js -isScheduler.js.map -lift.js -lift.js.map -mapOneOrManyArgs.js -mapOneOrManyArgs.js.map -noop.js -noop.js.map -not.js -not.js.map -pipe.js -pipe.js.map -reportUnhandledError.js -reportUnhandledError.js.map -subscribeToArray.js -subscribeToArray.js.map -throwUnobservableError.js -throwUnobservableError.js.map -workarounds.js -workarounds.js.map - -index.js -index.js.map - -index.js -index.js.map - -index.js -index.js.map - -ajax -fetch -index.d.ts -index.d.ts.map -internal -operators -testing -webSocket - -index.d.ts -index.d.ts.map - -index.d.ts -index.d.ts.map - -AnyCatcher.d.ts -AnyCatcher.d.ts.map -AsyncSubject.d.ts -AsyncSubject.d.ts.map -BehaviorSubject.d.ts -BehaviorSubject.d.ts.map -Notification.d.ts -Notification.d.ts.map -NotificationFactories.d.ts -NotificationFactories.d.ts.map -Observable.d.ts -Observable.d.ts.map -Operator.d.ts -Operator.d.ts.map -ReplaySubject.d.ts -ReplaySubject.d.ts.map -Scheduler.d.ts -Scheduler.d.ts.map -Subject.d.ts -Subject.d.ts.map -Subscriber.d.ts -Subscriber.d.ts.map -Subscription.d.ts -Subscription.d.ts.map -ajax -config.d.ts -config.d.ts.map -firstValueFrom.d.ts -firstValueFrom.d.ts.map -lastValueFrom.d.ts -lastValueFrom.d.ts.map -observable -operators -scheduled -scheduler -symbol -testing -types.d.ts -types.d.ts.map -util - -AjaxResponse.d.ts -AjaxResponse.d.ts.map -ajax.d.ts -ajax.d.ts.map -errors.d.ts -errors.d.ts.map -getXHRResponse.d.ts -getXHRResponse.d.ts.map -types.d.ts -types.d.ts.map - -ConnectableObservable.d.ts -ConnectableObservable.d.ts.map -bindCallback.d.ts -bindCallback.d.ts.map -bindCallbackInternals.d.ts -bindCallbackInternals.d.ts.map -bindNodeCallback.d.ts -bindNodeCallback.d.ts.map -combineLatest.d.ts -combineLatest.d.ts.map -concat.d.ts -concat.d.ts.map -connectable.d.ts -connectable.d.ts.map -defer.d.ts -defer.d.ts.map -dom -empty.d.ts -empty.d.ts.map -forkJoin.d.ts -forkJoin.d.ts.map -from.d.ts -from.d.ts.map -fromEvent.d.ts -fromEvent.d.ts.map -fromEventPattern.d.ts -fromEventPattern.d.ts.map -fromSubscribable.d.ts -fromSubscribable.d.ts.map -generate.d.ts -generate.d.ts.map -iif.d.ts -iif.d.ts.map -innerFrom.d.ts -innerFrom.d.ts.map -interval.d.ts -interval.d.ts.map -merge.d.ts -merge.d.ts.map -never.d.ts -never.d.ts.map -of.d.ts -of.d.ts.map -onErrorResumeNext.d.ts -onErrorResumeNext.d.ts.map -pairs.d.ts -pairs.d.ts.map -partition.d.ts -partition.d.ts.map -race.d.ts -race.d.ts.map -range.d.ts -range.d.ts.map -throwError.d.ts -throwError.d.ts.map -timer.d.ts -timer.d.ts.map -using.d.ts -using.d.ts.map -zip.d.ts -zip.d.ts.map - -WebSocketSubject.d.ts -WebSocketSubject.d.ts.map -animationFrames.d.ts -animationFrames.d.ts.map -fetch.d.ts -fetch.d.ts.map -webSocket.d.ts -webSocket.d.ts.map - -OperatorSubscriber.d.ts -OperatorSubscriber.d.ts.map -audit.d.ts -audit.d.ts.map -auditTime.d.ts -auditTime.d.ts.map -buffer.d.ts -buffer.d.ts.map -bufferCount.d.ts -bufferCount.d.ts.map -bufferTime.d.ts -bufferTime.d.ts.map -bufferToggle.d.ts -bufferToggle.d.ts.map -bufferWhen.d.ts -bufferWhen.d.ts.map -catchError.d.ts -catchError.d.ts.map -combineAll.d.ts -combineAll.d.ts.map -combineLatest.d.ts -combineLatest.d.ts.map -combineLatestAll.d.ts -combineLatestAll.d.ts.map -combineLatestWith.d.ts -combineLatestWith.d.ts.map -concat.d.ts -concat.d.ts.map -concatAll.d.ts -concatAll.d.ts.map -concatMap.d.ts -concatMap.d.ts.map -concatMapTo.d.ts -concatMapTo.d.ts.map -concatWith.d.ts -concatWith.d.ts.map -connect.d.ts -connect.d.ts.map -count.d.ts -count.d.ts.map -debounce.d.ts -debounce.d.ts.map -debounceTime.d.ts -debounceTime.d.ts.map -defaultIfEmpty.d.ts -defaultIfEmpty.d.ts.map -delay.d.ts -delay.d.ts.map -delayWhen.d.ts -delayWhen.d.ts.map -dematerialize.d.ts -dematerialize.d.ts.map -distinct.d.ts -distinct.d.ts.map -distinctUntilChanged.d.ts -distinctUntilChanged.d.ts.map -distinctUntilKeyChanged.d.ts -distinctUntilKeyChanged.d.ts.map -elementAt.d.ts -elementAt.d.ts.map -endWith.d.ts -endWith.d.ts.map -every.d.ts -every.d.ts.map -exhaust.d.ts -exhaust.d.ts.map -exhaustAll.d.ts -exhaustAll.d.ts.map -exhaustMap.d.ts -exhaustMap.d.ts.map -expand.d.ts -expand.d.ts.map -filter.d.ts -filter.d.ts.map -finalize.d.ts -finalize.d.ts.map -find.d.ts -find.d.ts.map -findIndex.d.ts -findIndex.d.ts.map -first.d.ts -first.d.ts.map -flatMap.d.ts -flatMap.d.ts.map -groupBy.d.ts -groupBy.d.ts.map -ignoreElements.d.ts -ignoreElements.d.ts.map -isEmpty.d.ts -isEmpty.d.ts.map -joinAllInternals.d.ts -joinAllInternals.d.ts.map -last.d.ts -last.d.ts.map -map.d.ts -map.d.ts.map -mapTo.d.ts -mapTo.d.ts.map -materialize.d.ts -materialize.d.ts.map -max.d.ts -max.d.ts.map -merge.d.ts -merge.d.ts.map -mergeAll.d.ts -mergeAll.d.ts.map -mergeInternals.d.ts -mergeInternals.d.ts.map -mergeMap.d.ts -mergeMap.d.ts.map -mergeMapTo.d.ts -mergeMapTo.d.ts.map -mergeScan.d.ts -mergeScan.d.ts.map -mergeWith.d.ts -mergeWith.d.ts.map -min.d.ts -min.d.ts.map -multicast.d.ts -multicast.d.ts.map -observeOn.d.ts -observeOn.d.ts.map -onErrorResumeNextWith.d.ts -onErrorResumeNextWith.d.ts.map -pairwise.d.ts -pairwise.d.ts.map -partition.d.ts -partition.d.ts.map -pluck.d.ts -pluck.d.ts.map -publish.d.ts -publish.d.ts.map -publishBehavior.d.ts -publishBehavior.d.ts.map -publishLast.d.ts -publishLast.d.ts.map -publishReplay.d.ts -publishReplay.d.ts.map -race.d.ts -race.d.ts.map -raceWith.d.ts -raceWith.d.ts.map -reduce.d.ts -reduce.d.ts.map -refCount.d.ts -refCount.d.ts.map -repeat.d.ts -repeat.d.ts.map -repeatWhen.d.ts -repeatWhen.d.ts.map -retry.d.ts -retry.d.ts.map -retryWhen.d.ts -retryWhen.d.ts.map -sample.d.ts -sample.d.ts.map -sampleTime.d.ts -sampleTime.d.ts.map -scan.d.ts -scan.d.ts.map -scanInternals.d.ts -scanInternals.d.ts.map -sequenceEqual.d.ts -sequenceEqual.d.ts.map -share.d.ts -share.d.ts.map -shareReplay.d.ts -shareReplay.d.ts.map -single.d.ts -single.d.ts.map -skip.d.ts -skip.d.ts.map -skipLast.d.ts -skipLast.d.ts.map -skipUntil.d.ts -skipUntil.d.ts.map -skipWhile.d.ts -skipWhile.d.ts.map -startWith.d.ts -startWith.d.ts.map -subscribeOn.d.ts -subscribeOn.d.ts.map -switchAll.d.ts -switchAll.d.ts.map -switchMap.d.ts -switchMap.d.ts.map -switchMapTo.d.ts -switchMapTo.d.ts.map -switchScan.d.ts -switchScan.d.ts.map -take.d.ts -take.d.ts.map -takeLast.d.ts -takeLast.d.ts.map -takeUntil.d.ts -takeUntil.d.ts.map -takeWhile.d.ts -takeWhile.d.ts.map -tap.d.ts -tap.d.ts.map -throttle.d.ts -throttle.d.ts.map -throttleTime.d.ts -throttleTime.d.ts.map -throwIfEmpty.d.ts -throwIfEmpty.d.ts.map -timeInterval.d.ts -timeInterval.d.ts.map -timeout.d.ts -timeout.d.ts.map -timeoutWith.d.ts -timeoutWith.d.ts.map -timestamp.d.ts -timestamp.d.ts.map -toArray.d.ts -toArray.d.ts.map -window.d.ts -window.d.ts.map -windowCount.d.ts -windowCount.d.ts.map -windowTime.d.ts -windowTime.d.ts.map -windowToggle.d.ts -windowToggle.d.ts.map -windowWhen.d.ts -windowWhen.d.ts.map -withLatestFrom.d.ts -withLatestFrom.d.ts.map -zip.d.ts -zip.d.ts.map -zipAll.d.ts -zipAll.d.ts.map -zipWith.d.ts -zipWith.d.ts.map - -scheduleArray.d.ts -scheduleArray.d.ts.map -scheduleAsyncIterable.d.ts -scheduleAsyncIterable.d.ts.map -scheduleIterable.d.ts -scheduleIterable.d.ts.map -scheduleObservable.d.ts -scheduleObservable.d.ts.map -schedulePromise.d.ts -schedulePromise.d.ts.map -scheduleReadableStreamLike.d.ts -scheduleReadableStreamLike.d.ts.map -scheduled.d.ts -scheduled.d.ts.map - -Action.d.ts -Action.d.ts.map -AnimationFrameAction.d.ts -AnimationFrameAction.d.ts.map -AnimationFrameScheduler.d.ts -AnimationFrameScheduler.d.ts.map -AsapAction.d.ts -AsapAction.d.ts.map -AsapScheduler.d.ts -AsapScheduler.d.ts.map -AsyncAction.d.ts -AsyncAction.d.ts.map -AsyncScheduler.d.ts -AsyncScheduler.d.ts.map -QueueAction.d.ts -QueueAction.d.ts.map -QueueScheduler.d.ts -QueueScheduler.d.ts.map -VirtualTimeScheduler.d.ts -VirtualTimeScheduler.d.ts.map -animationFrame.d.ts -animationFrame.d.ts.map -animationFrameProvider.d.ts -animationFrameProvider.d.ts.map -asap.d.ts -asap.d.ts.map -async.d.ts -async.d.ts.map -dateTimestampProvider.d.ts -dateTimestampProvider.d.ts.map -immediateProvider.d.ts -immediateProvider.d.ts.map -intervalProvider.d.ts -intervalProvider.d.ts.map -performanceTimestampProvider.d.ts -performanceTimestampProvider.d.ts.map -queue.d.ts -queue.d.ts.map -timeoutProvider.d.ts -timeoutProvider.d.ts.map -timerHandle.d.ts -timerHandle.d.ts.map - -iterator.d.ts -iterator.d.ts.map -observable.d.ts -observable.d.ts.map - -ColdObservable.d.ts -ColdObservable.d.ts.map -HotObservable.d.ts -HotObservable.d.ts.map -SubscriptionLog.d.ts -SubscriptionLog.d.ts.map -SubscriptionLoggable.d.ts -SubscriptionLoggable.d.ts.map -TestMessage.d.ts -TestMessage.d.ts.map -TestScheduler.d.ts -TestScheduler.d.ts.map - -ArgumentOutOfRangeError.d.ts -ArgumentOutOfRangeError.d.ts.map -EmptyError.d.ts -EmptyError.d.ts.map -Immediate.d.ts -Immediate.d.ts.map -NotFoundError.d.ts -NotFoundError.d.ts.map -ObjectUnsubscribedError.d.ts -ObjectUnsubscribedError.d.ts.map -SequenceError.d.ts -SequenceError.d.ts.map -UnsubscriptionError.d.ts -UnsubscriptionError.d.ts.map -applyMixins.d.ts -applyMixins.d.ts.map -args.d.ts -args.d.ts.map -argsArgArrayOrObject.d.ts -argsArgArrayOrObject.d.ts.map -argsOrArgArray.d.ts -argsOrArgArray.d.ts.map -arrRemove.d.ts -arrRemove.d.ts.map -createErrorClass.d.ts -createErrorClass.d.ts.map -createObject.d.ts -createObject.d.ts.map -errorContext.d.ts -errorContext.d.ts.map -executeSchedule.d.ts -executeSchedule.d.ts.map -identity.d.ts -identity.d.ts.map -isArrayLike.d.ts -isArrayLike.d.ts.map -isAsyncIterable.d.ts -isAsyncIterable.d.ts.map -isDate.d.ts -isDate.d.ts.map -isFunction.d.ts -isFunction.d.ts.map -isInteropObservable.d.ts -isInteropObservable.d.ts.map -isIterable.d.ts -isIterable.d.ts.map -isObservable.d.ts -isObservable.d.ts.map -isPromise.d.ts -isPromise.d.ts.map -isReadableStreamLike.d.ts -isReadableStreamLike.d.ts.map -isScheduler.d.ts -isScheduler.d.ts.map -lift.d.ts -lift.d.ts.map -mapOneOrManyArgs.d.ts -mapOneOrManyArgs.d.ts.map -noop.d.ts -noop.d.ts.map -not.d.ts -not.d.ts.map -pipe.d.ts -pipe.d.ts.map -reportUnhandledError.d.ts -reportUnhandledError.d.ts.map -subscribeToArray.d.ts -subscribeToArray.d.ts.map -throwUnobservableError.d.ts -throwUnobservableError.d.ts.map -workarounds.d.ts -workarounds.d.ts.map - -index.d.ts -index.d.ts.map - -index.d.ts -index.d.ts.map - -index.d.ts -index.d.ts.map - -package.json - -package.json - -Rx.global.js -ajax -fetch -index.ts -internal -operators -testing -tsconfig.base.json -tsconfig.cjs.json -tsconfig.cjs.spec.json -tsconfig.esm.json -tsconfig.esm5.json -tsconfig.esm5.rollup.json -tsconfig.types.json -tsconfig.types.spec.json -webSocket - -index.ts - -index.ts - -AnyCatcher.ts -AsyncSubject.ts -BehaviorSubject.ts -Notification.ts -NotificationFactories.ts -Observable.ts -Operator.ts -ReplaySubject.ts -Scheduler.ts -Subject.ts -Subscriber.ts -Subscription.ts -ajax -config.ts -firstValueFrom.ts -lastValueFrom.ts -observable -operators -scheduled -scheduler -symbol -testing -types.ts -umd.ts -util - -AjaxResponse.ts -ajax.ts -errors.ts -getXHRResponse.ts -types.ts - -ConnectableObservable.ts -bindCallback.ts -bindCallbackInternals.ts -bindNodeCallback.ts -combineLatest.ts -concat.ts -connectable.ts -defer.ts -dom -empty.ts -forkJoin.ts -from.ts -fromEvent.ts -fromEventPattern.ts -fromSubscribable.ts -generate.ts -iif.ts -innerFrom.ts -interval.ts -merge.ts -never.ts -of.ts -onErrorResumeNext.ts -pairs.ts -partition.ts -race.ts -range.ts -throwError.ts -timer.ts -using.ts -zip.ts - -WebSocketSubject.ts -animationFrames.ts -fetch.ts -webSocket.ts - -OperatorSubscriber.ts -audit.ts -auditTime.ts -buffer.ts -bufferCount.ts -bufferTime.ts -bufferToggle.ts -bufferWhen.ts -catchError.ts -combineAll.ts -combineLatest.ts -combineLatestAll.ts -combineLatestWith.ts -concat.ts -concatAll.ts -concatMap.ts -concatMapTo.ts -concatWith.ts -connect.ts -count.ts -debounce.ts -debounceTime.ts -defaultIfEmpty.ts -delay.ts -delayWhen.ts -dematerialize.ts -distinct.ts -distinctUntilChanged.ts -distinctUntilKeyChanged.ts -elementAt.ts -endWith.ts -every.ts -exhaust.ts -exhaustAll.ts -exhaustMap.ts -expand.ts -filter.ts -finalize.ts -find.ts -findIndex.ts -first.ts -flatMap.ts -groupBy.ts -ignoreElements.ts -isEmpty.ts -joinAllInternals.ts -last.ts -map.ts -mapTo.ts -materialize.ts -max.ts -merge.ts -mergeAll.ts -mergeInternals.ts -mergeMap.ts -mergeMapTo.ts -mergeScan.ts -mergeWith.ts -min.ts -multicast.ts -observeOn.ts -onErrorResumeNextWith.ts -pairwise.ts -partition.ts -pluck.ts -publish.ts -publishBehavior.ts -publishLast.ts -publishReplay.ts -race.ts -raceWith.ts -reduce.ts -refCount.ts -repeat.ts -repeatWhen.ts -retry.ts -retryWhen.ts -sample.ts -sampleTime.ts -scan.ts -scanInternals.ts -sequenceEqual.ts -share.ts -shareReplay.ts -single.ts -skip.ts -skipLast.ts -skipUntil.ts -skipWhile.ts -startWith.ts -subscribeOn.ts -switchAll.ts -switchMap.ts -switchMapTo.ts -switchScan.ts -take.ts -takeLast.ts -takeUntil.ts -takeWhile.ts -tap.ts -throttle.ts -throttleTime.ts -throwIfEmpty.ts -timeInterval.ts -timeout.ts -timeoutWith.ts -timestamp.ts -toArray.ts -window.ts -windowCount.ts -windowTime.ts -windowToggle.ts -windowWhen.ts -withLatestFrom.ts -zip.ts -zipAll.ts -zipWith.ts - -scheduleArray.ts -scheduleAsyncIterable.ts -scheduleIterable.ts -scheduleObservable.ts -schedulePromise.ts -scheduleReadableStreamLike.ts -scheduled.ts - -Action.ts -AnimationFrameAction.ts -AnimationFrameScheduler.ts -AsapAction.ts -AsapScheduler.ts -AsyncAction.ts -AsyncScheduler.ts -QueueAction.ts -QueueScheduler.ts -VirtualTimeScheduler.ts -animationFrame.ts -animationFrameProvider.ts -asap.ts -async.ts -dateTimestampProvider.ts -immediateProvider.ts -intervalProvider.ts -performanceTimestampProvider.ts -queue.ts -timeoutProvider.ts -timerHandle.ts - -iterator.ts -observable.ts - -ColdObservable.ts -HotObservable.ts -SubscriptionLog.ts -SubscriptionLoggable.ts -TestMessage.ts -TestScheduler.ts - -ArgumentOutOfRangeError.ts -EmptyError.ts -Immediate.ts -NotFoundError.ts -ObjectUnsubscribedError.ts -SequenceError.ts -UnsubscriptionError.ts -applyMixins.ts -args.ts -argsArgArrayOrObject.ts -argsOrArgArray.ts -arrRemove.ts -createErrorClass.ts -createObject.ts -errorContext.ts -executeSchedule.ts -identity.ts -isArrayLike.ts -isAsyncIterable.ts -isDate.ts -isFunction.ts -isInteropObservable.ts -isIterable.ts -isObservable.ts -isPromise.ts -isReadableStreamLike.ts -isScheduler.ts -lift.ts -mapOneOrManyArgs.ts -noop.ts -not.ts -pipe.ts -reportUnhandledError.ts -subscribeToArray.ts -throwUnobservableError.ts -workarounds.ts - -index.ts - -index.ts - -index.ts - -package.json - -package.json - -README.md -dist -package.json - -codecs -index.cjs -index.d.ts -index.js -scale-ts.cjs.development.js -scale-ts.cjs.development.js.map -scale-ts.cjs.production.min.js -scale-ts.cjs.production.min.js.map -scale-ts.js -scale-ts.js.map -scale-ts.mjs -scale-ts.mjs.map -types.d.ts -utils.d.ts - -Bytes.d.ts -Enum.d.ts -Option.d.ts -Result.d.ts -Struct.d.ts -Tuple.d.ts -Vector.d.ts -bool.d.ts -compact.d.ts -fixed-width-ints.d.ts -index.d.ts -str.d.ts -void.d.ts - -LICENSE -README.md -cjs -index.js -package.json -umd -unstable_mock.js -unstable_post_task.js - -scheduler-unstable_mock.development.js -scheduler-unstable_mock.production.min.js -scheduler-unstable_post_task.development.js -scheduler-unstable_post_task.production.min.js -scheduler.development.js -scheduler.production.min.js - -scheduler-unstable_mock.development.js -scheduler-unstable_mock.production.min.js -scheduler.development.js -scheduler.production.min.js -scheduler.profiling.min.js - -LICENSE -README.md -bin -classes -functions -index.js -internal -package.json -preload.js -range.bnf -ranges - -semver.js - -comparator.js -index.js -range.js -semver.js - -clean.js -cmp.js -coerce.js -compare-build.js -compare-loose.js -compare.js -diff.js -eq.js -gt.js -gte.js -inc.js -lt.js -lte.js -major.js -minor.js -neq.js -parse.js -patch.js -prerelease.js -rcompare.js -rsort.js -satisfies.js -sort.js -valid.js - -constants.js -debug.js -identifiers.js -lrucache.js -parse-options.js -re.js - -gtr.js -intersects.js -ltr.js -max-satisfying.js -min-satisfying.js -min-version.js -outside.js -simplify.js -subset.js -to-comparators.js -valid.js - -CHANGELOG.md -LICENSE.txt -README.md -index.js -package.json - -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE.txt -README.md -dist -package.json - -cjs -mjs - -browser.d.ts -browser.d.ts.map -browser.js -browser.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -signals.d.ts -signals.d.ts.map -signals.js -signals.js.map - -browser.d.ts -browser.d.ts.map -browser.js -browser.js.map -index.d.ts -index.d.ts.map -index.js -index.js.map -package.json -signals.d.ts -signals.d.ts.map -signals.js -signals.js.map - -README.md -dist -package.json - -cjs -mjs - -bytecode-browser.d.ts -bytecode-browser.js -bytecode-deno.d.ts -bytecode-deno.js -bytecode-nodejs.d.ts -bytecode-nodejs.js -index-browser.d.ts -index-browser.js -index-deno.d.ts -index-deno.js -index-nodejs.d.ts -index-nodejs.js -internals -no-auto-bytecode-browser.d.ts -no-auto-bytecode-browser.js -no-auto-bytecode-deno.d.ts -no-auto-bytecode-deno.js -no-auto-bytecode-nodejs.d.ts -no-auto-bytecode-nodejs.js -package.json -public-types.d.ts -public-types.js -worker-browser.d.ts -worker-browser.js -worker-deno.d.ts -worker-deno.js -worker-nodejs.d.ts -worker-nodejs.js - -buffer.d.ts -buffer.js -bytecode -client.d.ts -client.js -local-instance.d.ts -local-instance.js -remote-instance.d.ts -remote-instance.js - -wasm.d.ts -wasm.js -wasm0.d.ts -wasm0.js -wasm1.d.ts -wasm1.js -wasm2.d.ts -wasm2.js - -bytecode-browser.d.ts -bytecode-browser.js -bytecode-deno.d.ts -bytecode-deno.js -bytecode-nodejs.d.ts -bytecode-nodejs.js -index-browser.d.ts -index-browser.js -index-deno.d.ts -index-deno.js -index-nodejs.d.ts -index-nodejs.js -internals -no-auto-bytecode-browser.d.ts -no-auto-bytecode-browser.js -no-auto-bytecode-deno.d.ts -no-auto-bytecode-deno.js -no-auto-bytecode-nodejs.d.ts -no-auto-bytecode-nodejs.js -package.json -public-types.d.ts -public-types.js -worker-browser.d.ts -worker-browser.js -worker-deno.d.ts -worker-deno.js -worker-nodejs.d.ts -worker-nodejs.js - -buffer.d.ts -buffer.js -bytecode -client.d.ts -client.js -local-instance.d.ts -local-instance.js -remote-instance.d.ts -remote-instance.js - -wasm.d.ts -wasm.js -wasm0.d.ts -wasm0.js -wasm1.d.ts -wasm1.js -wasm2.d.ts -wasm2.js - -LICENSE.md -README.md -dist -package.json - -index.d.ts -index.js -index.js.map -index.mjs -index.mjs.map -styles.css - -LICENSE -README.md -lib -package.json -source-map.d.ts -source-map.js - -array-set.js -base64-vlq.js -base64.js -binary-search.js -mapping-list.js -quick-sort.js -source-map-consumer.d.ts -source-map-consumer.js -source-map-generator.d.ts -source-map-generator.js -source-node.d.ts -source-node.js -util.js - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -ansi-regex -emoji-regex -strip-ansi - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE-MIT.txt -README.md -es2015 -index.d.ts -index.js -package.json -text.js - -index.js -text.js - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -ansi-regex - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -bin -dist -package.json -register -ts-node-plugin - -sucrase -sucrase-node - -CJSImportProcessor.js -HelperManager.js -NameManager.js -Options-gen-types.js -Options.js -TokenProcessor.js -cli.js -computeSourceMap.js -esm -identifyShadowedGlobals.js -index.js -parser -register.js -transformers -types -util - -CJSImportProcessor.js -HelperManager.js -NameManager.js -Options-gen-types.js -Options.js -TokenProcessor.js -cli.js -computeSourceMap.js -identifyShadowedGlobals.js -index.js -parser -register.js -transformers -util - -index.js -plugins -tokenizer -traverser -util - -flow.js -jsx -types.js -typescript.js - -index.js -xhtml.js - -index.js -keywords.js -readWord.js -readWordTree.js -state.js -types.js - -base.js -expression.js -index.js -lval.js -statement.js -util.js - -charcodes.js -identifier.js -whitespace.js - -CJSImportTransformer.js -ESMImportTransformer.js -FlowTransformer.js -JSXTransformer.js -JestHoistTransformer.js -NumericSeparatorTransformer.js -OptionalCatchBindingTransformer.js -OptionalChainingNullishTransformer.js -ReactDisplayNameTransformer.js -ReactHotLoaderTransformer.js -RootTransformer.js -Transformer.js -TypeScriptTransformer.js - -elideImportEquals.js -formatTokens.js -getClassInfo.js -getDeclarationInfo.js -getIdentifierNames.js -getImportExportSpecifierInfo.js -getJSXPragmaInfo.js -getNonTypeIdentifiers.js -getTSImportedNames.js -isAsyncOperation.js -isExportFrom.js -isIdentifier.js -removeMaybeImportAttributes.js -shouldElideDefaultExport.js - -index.js -plugins -tokenizer -traverser -util - -flow.js -jsx -types.js -typescript.js - -index.js -xhtml.js - -index.js -keywords.js -readWord.js -readWordTree.js -state.js -types.js - -base.js -expression.js -index.js -lval.js -statement.js -util.js - -charcodes.js -identifier.js -whitespace.js - -CJSImportTransformer.js -ESMImportTransformer.js -FlowTransformer.js -JSXTransformer.js -JestHoistTransformer.js -NumericSeparatorTransformer.js -OptionalCatchBindingTransformer.js -OptionalChainingNullishTransformer.js -ReactDisplayNameTransformer.js -ReactHotLoaderTransformer.js -RootTransformer.js -Transformer.js -TypeScriptTransformer.js - -CJSImportProcessor.d.ts -HelperManager.d.ts -NameManager.d.ts -Options-gen-types.d.ts -Options.d.ts -TokenProcessor.d.ts -cli.d.ts -computeSourceMap.d.ts -identifyShadowedGlobals.d.ts -index.d.ts -parser -register.d.ts -transformers -util - -index.d.ts -plugins -tokenizer -traverser -util - -flow.d.ts -jsx -types.d.ts -typescript.d.ts - -index.d.ts -xhtml.d.ts - -index.d.ts -keywords.d.ts -readWord.d.ts -readWordTree.d.ts -state.d.ts -types.d.ts - -base.d.ts -expression.d.ts -index.d.ts -lval.d.ts -statement.d.ts -util.d.ts - -charcodes.d.ts -identifier.d.ts -whitespace.d.ts - -CJSImportTransformer.d.ts -ESMImportTransformer.d.ts -FlowTransformer.d.ts -JSXTransformer.d.ts -JestHoistTransformer.d.ts -NumericSeparatorTransformer.d.ts -OptionalCatchBindingTransformer.d.ts -OptionalChainingNullishTransformer.d.ts -ReactDisplayNameTransformer.d.ts -ReactHotLoaderTransformer.d.ts -RootTransformer.d.ts -Transformer.d.ts -TypeScriptTransformer.d.ts - -elideImportEquals.d.ts -formatTokens.d.ts -getClassInfo.d.ts -getDeclarationInfo.d.ts -getIdentifierNames.d.ts -getImportExportSpecifierInfo.d.ts -getJSXPragmaInfo.d.ts -getNonTypeIdentifiers.d.ts -getTSImportedNames.d.ts -isAsyncOperation.d.ts -isExportFrom.d.ts -isIdentifier.d.ts -removeMaybeImportAttributes.d.ts -shouldElideDefaultExport.d.ts - -elideImportEquals.js -formatTokens.js -getClassInfo.js -getDeclarationInfo.js -getIdentifierNames.js -getImportExportSpecifierInfo.js -getJSXPragmaInfo.js -getNonTypeIdentifiers.js -getTSImportedNames.js -isAsyncOperation.js -isExportFrom.js -isIdentifier.js -removeMaybeImportAttributes.js -shouldElideDefaultExport.js - -index.js -js.js -jsx.js -ts-legacy-module-interop.js -ts.js -tsx-legacy-module-interop.js -tsx.js - -index.js - -browser.js -index.js -license -package.json -readme.md - -CHANGELOG.md -LICENSE -README.md -browser.js -index.js -package.json -test - -index.js - -LICENSE.md -README.md -dist -package.json -src - -bundle-cjs.js -bundle-cjs.js.map -bundle-mjs.mjs -bundle-mjs.mjs.map -es5 -types.d.ts - -bundle-cjs.js -bundle-cjs.js.map -bundle-mjs.mjs -bundle-mjs.mjs.map - -index.ts -lib - -class-group-utils.ts -config-utils.ts -create-tailwind-merge.ts -default-config.ts -extend-tailwind-merge.ts -from-theme.ts -lru-cache.ts -merge-classlist.ts -merge-configs.ts -parse-class-name.ts -tw-join.ts -tw-merge.ts -types.ts -validators.ts - -CHANGELOG.md -LICENSE -README.md -base.css -colors.d.ts -colors.js -components.css -defaultConfig.d.ts -defaultConfig.js -defaultTheme.d.ts -defaultTheme.js -lib -loadConfig.d.ts -loadConfig.js -nesting -package.json -peers -plugin.d.ts -plugin.js -prettier.config.js -resolveConfig.d.ts -resolveConfig.js -screens.css -scripts -src -stubs -tailwind.css -types -utilities.css -variants.css - -cli -cli-peer-dependencies.js -cli.js -corePluginList.js -corePlugins.js -css -featureFlags.js -index.js -lib -plugin.js -postcss-plugins -processTailwindFeatures.js -public -util -value-parser - -build -help -index.js -init - -deps.js -index.js -plugin.js -utils.js -watching.js - -index.js - -index.js - -LICENSE -preflight.css - -cacheInvalidation.js -collapseAdjacentRules.js -collapseDuplicateDeclarations.js -content.js -defaultExtractor.js -evaluateTailwindFunctions.js -expandApplyAtRules.js -expandTailwindAtRules.js -findAtConfigPath.js -generateRules.js -getModuleDependencies.js -load-config.js -normalizeTailwindDirectives.js -offsets.js -partitionApplyAtRules.js -regex.js -remap-bitfield.js -resolveDefaultsAtRules.js -setupContextUtils.js -setupTrackingContext.js -sharedState.js -substituteScreenAtRules.js - -nesting - -README.md -index.js -plugin.js - -colors.js -create-plugin.js -default-config.js -default-theme.js -load-config.js -resolve-config.js - -applyImportantSelector.js -bigSign.js -buildMediaQuery.js -cloneDeep.js -cloneNodes.js -color.js -colorNames.js -configurePlugins.js -createPlugin.js -createUtilityPlugin.js -dataTypes.js -defaults.js -escapeClassName.js -escapeCommas.js -flattenColorPalette.js -formatVariantSelector.js -getAllConfigs.js -hashConfig.js -isKeyframeRule.js -isPlainObject.js -isSyntacticallyValidPropertyValue.js -log.js -nameClass.js -negateValue.js -normalizeConfig.js -normalizeScreens.js -parseAnimationValue.js -parseBoxShadowValue.js -parseDependency.js -parseGlob.js -parseObjectStyles.js -pluginUtils.js -prefixSelector.js -pseudoElements.js -removeAlphaVariables.js -resolveConfig.js -resolveConfigPath.js -responsive.js -splitAtTopLevelOnly.js -tap.js -toColorValue.js -toPath.js -transformThemeValue.js -validateConfig.js -validateFormalSyntax.js -withAlphaVariable.js - -LICENSE -README.md -index.d.js -index.js -parse.js -stringify.js -unit.js -walk.js - -index.d.ts -index.js - -postcss-selector-parser - -API.md -CHANGELOG.md -LICENSE-MIT -README.md -dist -package.json -postcss-selector-parser.d.ts - -index.js -parser.js -processor.js -selectors -sortAscending.js -tokenTypes.js -tokenize.js -util - -attribute.js -className.js -combinator.js -comment.js -constructors.js -container.js -guards.js -id.js -index.js -namespace.js -nesting.js -node.js -pseudo.js -root.js -selector.js -string.js -tag.js -types.js -universal.js - -ensureObject.js -getProp.js -index.js -stripComments.js -unesc.js - -index.js - -create-plugin-list.js -generate-types.js -release-channel.js -release-notes.js -type-utils.js - -cli -cli-peer-dependencies.js -cli.js -corePluginList.js -corePlugins.js -css -featureFlags.js -index.js -lib -plugin.js -postcss-plugins -processTailwindFeatures.js -public -util -value-parser - -build -help -index.js -init - -deps.js -index.js -plugin.js -utils.js -watching.js - -index.js - -index.js - -LICENSE -preflight.css - -cacheInvalidation.js -collapseAdjacentRules.js -collapseDuplicateDeclarations.js -content.js -defaultExtractor.js -evaluateTailwindFunctions.js -expandApplyAtRules.js -expandTailwindAtRules.js -findAtConfigPath.js -generateRules.js -getModuleDependencies.js -load-config.ts -normalizeTailwindDirectives.js -offsets.js -partitionApplyAtRules.js -regex.js -remap-bitfield.js -resolveDefaultsAtRules.js -setupContextUtils.js -setupTrackingContext.js -sharedState.js -substituteScreenAtRules.js - -nesting - -README.md -index.js -plugin.js - -colors.js -create-plugin.js -default-config.js -default-theme.js -load-config.js -resolve-config.js - -applyImportantSelector.js -bigSign.js -buildMediaQuery.js -cloneDeep.js -cloneNodes.js -color.js -colorNames.js -configurePlugins.js -createPlugin.js -createUtilityPlugin.js -dataTypes.js -defaults.js -escapeClassName.js -escapeCommas.js -flattenColorPalette.js -formatVariantSelector.js -getAllConfigs.js -hashConfig.js -isKeyframeRule.js -isPlainObject.js -isSyntacticallyValidPropertyValue.js -log.js -nameClass.js -negateValue.js -normalizeConfig.js -normalizeScreens.js -parseAnimationValue.js -parseBoxShadowValue.js -parseDependency.js -parseGlob.js -parseObjectStyles.js -pluginUtils.js -prefixSelector.js -pseudoElements.js -removeAlphaVariables.js -resolveConfig.js -resolveConfigPath.js -responsive.js -splitAtTopLevelOnly.js -tap.js -toColorValue.js -toPath.js -transformThemeValue.js -validateConfig.js -validateFormalSyntax.js -withAlphaVariable.js - -LICENSE -README.md -index.d.ts -index.js -parse.js -stringify.js -unit.js -walk.js - -config.full.js -config.simple.js -postcss.config.cjs -postcss.config.js -tailwind.config.cjs -tailwind.config.js -tailwind.config.ts - -config.d.ts -generated -index.d.ts - -colors.d.ts -corePluginList.d.ts -default-theme.d.ts - -LICENSE -README.md -index.d.ts -index.js -package.json - -History.md -LICENSE -README.md -index.js -package.json - -History.md -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -dist -package.json -src - -esm -tiny-invariant.cjs.js -tiny-invariant.d.ts -tiny-invariant.esm.js -tiny-invariant.js -tiny-invariant.min.js - -package.json -tiny-invariant.d.ts -tiny-invariant.js - -tiny-invariant.flow.js -tiny-invariant.ts - -LICENSE -README.md -index.js -package.json - -index.js -lib -package.json - -mappingTable.json - -LICENSE.md -README.md -lib -package.json - -index.cjs -index.d.cts -index.d.ts -index.js - -LICENSE -README.md -dist -package.json - -index.d.ts -index.js -types.d.ts -types.js -util.d.ts -util.js - -CopyrightNotice.txt -LICENSE.txt -README.md -SECURITY.md -modules -package.json -tslib.d.ts -tslib.es6.html -tslib.es6.js -tslib.es6.mjs -tslib.html -tslib.js - -index.d.ts -index.js -package.json - -LICENSE -README.md -lib -package.json - -check.js -index.js -parse-type.js - -LICENSE.txt -README.md -SECURITY.md -ThirdPartyNoticeText.txt -bin -lib -package.json - -tsc -tsserver - -_tsc.js -_tsserver.js -_typingsInstaller.js -cs -de -es -fr -it -ja -ko -lib.d.ts -lib.decorators.d.ts -lib.decorators.legacy.d.ts -lib.dom.asynciterable.d.ts -lib.dom.d.ts -lib.dom.iterable.d.ts -lib.es2015.collection.d.ts -lib.es2015.core.d.ts -lib.es2015.d.ts -lib.es2015.generator.d.ts -lib.es2015.iterable.d.ts -lib.es2015.promise.d.ts -lib.es2015.proxy.d.ts -lib.es2015.reflect.d.ts -lib.es2015.symbol.d.ts -lib.es2015.symbol.wellknown.d.ts -lib.es2016.array.include.d.ts -lib.es2016.d.ts -lib.es2016.full.d.ts -lib.es2016.intl.d.ts -lib.es2017.arraybuffer.d.ts -lib.es2017.d.ts -lib.es2017.date.d.ts -lib.es2017.full.d.ts -lib.es2017.intl.d.ts -lib.es2017.object.d.ts -lib.es2017.sharedmemory.d.ts -lib.es2017.string.d.ts -lib.es2017.typedarrays.d.ts -lib.es2018.asyncgenerator.d.ts -lib.es2018.asynciterable.d.ts -lib.es2018.d.ts -lib.es2018.full.d.ts -lib.es2018.intl.d.ts -lib.es2018.promise.d.ts -lib.es2018.regexp.d.ts -lib.es2019.array.d.ts -lib.es2019.d.ts -lib.es2019.full.d.ts -lib.es2019.intl.d.ts -lib.es2019.object.d.ts -lib.es2019.string.d.ts -lib.es2019.symbol.d.ts -lib.es2020.bigint.d.ts -lib.es2020.d.ts -lib.es2020.date.d.ts -lib.es2020.full.d.ts -lib.es2020.intl.d.ts -lib.es2020.number.d.ts -lib.es2020.promise.d.ts -lib.es2020.sharedmemory.d.ts -lib.es2020.string.d.ts -lib.es2020.symbol.wellknown.d.ts -lib.es2021.d.ts -lib.es2021.full.d.ts -lib.es2021.intl.d.ts -lib.es2021.promise.d.ts -lib.es2021.string.d.ts -lib.es2021.weakref.d.ts -lib.es2022.array.d.ts -lib.es2022.d.ts -lib.es2022.error.d.ts -lib.es2022.full.d.ts -lib.es2022.intl.d.ts -lib.es2022.object.d.ts -lib.es2022.regexp.d.ts -lib.es2022.string.d.ts -lib.es2023.array.d.ts -lib.es2023.collection.d.ts -lib.es2023.d.ts -lib.es2023.full.d.ts -lib.es2023.intl.d.ts -lib.es2024.arraybuffer.d.ts -lib.es2024.collection.d.ts -lib.es2024.d.ts -lib.es2024.full.d.ts -lib.es2024.object.d.ts -lib.es2024.promise.d.ts -lib.es2024.regexp.d.ts -lib.es2024.sharedmemory.d.ts -lib.es2024.string.d.ts -lib.es5.d.ts -lib.es6.d.ts -lib.esnext.array.d.ts -lib.esnext.collection.d.ts -lib.esnext.d.ts -lib.esnext.decorators.d.ts -lib.esnext.disposable.d.ts -lib.esnext.error.d.ts -lib.esnext.float16.d.ts -lib.esnext.full.d.ts -lib.esnext.intl.d.ts -lib.esnext.iterator.d.ts -lib.esnext.promise.d.ts -lib.esnext.sharedmemory.d.ts -lib.scripthost.d.ts -lib.webworker.asynciterable.d.ts -lib.webworker.d.ts -lib.webworker.importscripts.d.ts -lib.webworker.iterable.d.ts -pl -pt-br -ru -tr -tsc.js -tsserver.js -tsserverlibrary.d.ts -tsserverlibrary.js -typesMap.json -typescript.d.ts -typescript.js -typingsInstaller.js -watchGuard.js -zh-cn -zh-tw - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -diagnosticMessages.generated.json - -LICENSE -README.md -dist -package.json - -compatibility-types.d.ts -compatibility-types.js -config-helper.d.ts -config-helper.js -getTSConfigRootDirFromStack.d.ts -getTSConfigRootDirFromStack.js -index.d.ts -index.js - -LICENSE -README.md -agent.d.ts -api.d.ts -balanced-pool.d.ts -cache.d.ts -client.d.ts -connector.d.ts -content-type.d.ts -cookies.d.ts -diagnostics-channel.d.ts -dispatcher.d.ts -env-http-proxy-agent.d.ts -errors.d.ts -eventsource.d.ts -fetch.d.ts -file.d.ts -filereader.d.ts -formdata.d.ts -global-dispatcher.d.ts -global-origin.d.ts -handlers.d.ts -header.d.ts -index.d.ts -interceptors.d.ts -mock-agent.d.ts -mock-client.d.ts -mock-errors.d.ts -mock-interceptor.d.ts -mock-pool.d.ts -package.json -patch.d.ts -pool-stats.d.ts -pool.d.ts -proxy-agent.d.ts -readable.d.ts -retry-agent.d.ts -retry-handler.d.ts -util.d.ts -webidl.d.ts -websocket.d.ts - -LICENSE -README.md -check-npm-version.js -cli.js -index.d.ts -index.js -package.json -utils.js - -LICENSE -README.md -dist -package.json -yarn.lock - -es5 -esnext - -uri.all.d.ts -uri.all.js -uri.all.js.map -uri.all.min.d.ts -uri.all.min.js -uri.all.min.js.map - -index.d.ts -index.js -index.js.map -regexps-iri.d.ts -regexps-iri.js -regexps-iri.js.map -regexps-uri.d.ts -regexps-uri.js -regexps-uri.js.map -schemes -uri.d.ts -uri.js -uri.js.map -util.d.ts -util.js -util.js.map - -http.d.ts -http.js -http.js.map -https.d.ts -https.js -https.js.map -mailto.d.ts -mailto.js -mailto.js.map -urn-uuid.d.ts -urn-uuid.js -urn-uuid.js.map -urn.d.ts -urn.js -urn.js.map -ws.d.ts -ws.js -ws.js.map -wss.d.ts -wss.js -wss.js.map - -LICENSE -README.md -dist -package.json - -es2015 -es2019 -es5 - -assignRef.d.ts -assignRef.js -createRef.d.ts -createRef.js -index.d.ts -index.js -mergeRef.d.ts -mergeRef.js -refToCallback.d.ts -refToCallback.js -transformRef.d.ts -transformRef.js -types.d.ts -types.js -useMergeRef.d.ts -useMergeRef.js -useRef.d.ts -useRef.js -useTransformRef.d.ts -useTransformRef.js - -assignRef.d.ts -assignRef.js -createRef.d.ts -createRef.js -index.d.ts -index.js -mergeRef.d.ts -mergeRef.js -refToCallback.d.ts -refToCallback.js -transformRef.d.ts -transformRef.js -types.d.ts -types.js -useMergeRef.d.ts -useMergeRef.js -useRef.d.ts -useRef.js -useTransformRef.d.ts -useTransformRef.js - -assignRef.d.ts -assignRef.js -createRef.d.ts -createRef.js -index.d.ts -index.js -mergeRef.d.ts -mergeRef.js -refToCallback.d.ts -refToCallback.js -transformRef.d.ts -transformRef.js -types.d.ts -types.js -useMergeRef.d.ts -useMergeRef.js -useRef.d.ts -useRef.js -useTransformRef.d.ts -useTransformRef.js - -LICENSE -README.md -dist -package.json - -es2015 -es2019 -es5 - -config.d.ts -config.js -env.d.ts -env.js -exports.d.ts -exports.js -hoc.d.ts -hoc.js -hook.d.ts -hook.js -index.d.ts -index.js -medium.d.ts -medium.js -renderProp.d.ts -renderProp.js -types.d.ts -types.js - -config.d.ts -config.js -env.d.ts -env.js -exports.d.ts -exports.js -hoc.d.ts -hoc.js -hook.d.ts -hook.js -index.d.ts -index.js -medium.d.ts -medium.js -renderProp.d.ts -renderProp.js -types.d.ts -types.js - -config.d.ts -config.js -env.d.ts -env.js -exports.d.ts -exports.js -hoc.d.ts -hoc.js -hook.d.ts -hook.js -index.d.ts -index.js -medium.d.ts -medium.js -renderProp.d.ts -renderProp.js -types.d.ts -types.js - -LICENSE -README.md -cjs -index.js -package.json -shim -with-selector.js - -use-sync-external-store-shim -use-sync-external-store-shim.development.js -use-sync-external-store-shim.native.development.js -use-sync-external-store-shim.native.production.js -use-sync-external-store-shim.production.js -use-sync-external-store-with-selector.development.js -use-sync-external-store-with-selector.production.js -use-sync-external-store.development.js -use-sync-external-store.production.js - -with-selector.development.js -with-selector.production.js - -index.js -index.native.js -with-selector.js - -History.md -LICENSE -README.md -browser.js -node.js -package.json - -LICENSE.md -README.md -dist -package.json - -cjs -cjs-browser -esm -esm-browser - -index.d.ts -index.js -max.d.ts -max.js -md5.d.ts -md5.js -native.d.ts -native.js -nil.d.ts -nil.js -package.json -parse.d.ts -parse.js -regex.d.ts -regex.js -rng.d.ts -rng.js -sha1.d.ts -sha1.js -stringify.d.ts -stringify.js -types.d.ts -types.js -uuid-bin.d.ts -uuid-bin.js -v1.d.ts -v1.js -v1ToV6.d.ts -v1ToV6.js -v3.d.ts -v3.js -v35.d.ts -v35.js -v4.d.ts -v4.js -v5.d.ts -v5.js -v6.d.ts -v6.js -v6ToV1.d.ts -v6ToV1.js -v7.d.ts -v7.js -validate.d.ts -validate.js -version.d.ts -version.js - -index.d.ts -index.js -max.d.ts -max.js -md5.d.ts -md5.js -native.d.ts -native.js -nil.d.ts -nil.js -package.json -parse.d.ts -parse.js -regex.d.ts -regex.js -rng.d.ts -rng.js -sha1.d.ts -sha1.js -stringify.d.ts -stringify.js -types.d.ts -types.js -uuid-bin.d.ts -uuid-bin.js -v1.d.ts -v1.js -v1ToV6.d.ts -v1ToV6.js -v3.d.ts -v3.js -v35.d.ts -v35.js -v4.d.ts -v4.js -v5.d.ts -v5.js -v6.d.ts -v6.js -v6ToV1.d.ts -v6ToV1.js -v7.d.ts -v7.js -validate.d.ts -validate.js -version.d.ts -version.js - -bin -index.d.ts -index.js -max.d.ts -max.js -md5.d.ts -md5.js -native.d.ts -native.js -nil.d.ts -nil.js -parse.d.ts -parse.js -regex.d.ts -regex.js -rng.d.ts -rng.js -sha1.d.ts -sha1.js -stringify.d.ts -stringify.js -types.d.ts -types.js -uuid-bin.d.ts -uuid-bin.js -v1.d.ts -v1.js -v1ToV6.d.ts -v1ToV6.js -v3.d.ts -v3.js -v35.d.ts -v35.js -v4.d.ts -v4.js -v5.d.ts -v5.js -v6.d.ts -v6.js -v6ToV1.d.ts -v6ToV1.js -v7.d.ts -v7.js -validate.d.ts -validate.js -version.d.ts -version.js - -uuid - -index.d.ts -index.js -max.d.ts -max.js -md5.d.ts -md5.js -native.d.ts -native.js -nil.d.ts -nil.js -parse.d.ts -parse.js -regex.d.ts -regex.js -rng.d.ts -rng.js -sha1.d.ts -sha1.js -stringify.d.ts -stringify.js -types.d.ts -types.js -uuid-bin.d.ts -uuid-bin.js -v1.d.ts -v1.js -v1ToV6.d.ts -v1ToV6.js -v3.d.ts -v3.js -v35.d.ts -v35.js -v4.d.ts -v4.js -v5.d.ts -v5.js -v6.d.ts -v6.js -v6ToV1.d.ts -v6ToV1.js -v7.d.ts -v7.js -validate.d.ts -validate.js -version.d.ts -version.js - -LICENSE.md -README.md -dist -package.json -style.css - -index.d.mts -index.d.ts -index.js -index.mjs - -CHANGELOG.md -README.md -d3-array.d.ts -d3-array.js -d3-ease.d.ts -d3-ease.js -d3-interpolate.d.ts -d3-interpolate.js -d3-scale.d.ts -d3-scale.js -d3-shape.d.ts -d3-shape.js -d3-time.d.ts -d3-time.js -d3-timer.d.ts -d3-timer.js -es -lib -lib-vendor -package.json - -d3-array.js -d3-color.js -d3-ease.js -d3-format.js -d3-interpolate.js -d3-path.js -d3-scale.js -d3-shape.js -d3-time-format.js -d3-time.js -d3-timer.js -d3-voronoi.js -internmap.js - -d3-array.js -d3-color.js -d3-ease.js -d3-format.js -d3-interpolate.js -d3-path.js -d3-scale.js -d3-shape.js -d3-time-format.js -d3-time.js -d3-timer.js -d3-voronoi.js -internmap.js - -d3-array -d3-color -d3-ease -d3-format -d3-interpolate -d3-path -d3-scale -d3-shape -d3-time -d3-time-format -d3-timer -d3-voronoi -internmap - -LICENSE -src - -array.js -ascending.js -bin.js -bisect.js -bisector.js -constant.js -count.js -cross.js -cumsum.js -descending.js -deviation.js -difference.js -disjoint.js -every.js -extent.js -filter.js -fsum.js -greatest.js -greatestIndex.js -group.js -groupSort.js -identity.js -index.js -intersection.js -least.js -leastIndex.js -map.js -max.js -maxIndex.js -mean.js -median.js -merge.js -min.js -minIndex.js -mode.js -nice.js -number.js -pairs.js -permute.js -quantile.js -quickselect.js -range.js -rank.js -reduce.js -reverse.js -scan.js -shuffle.js -some.js -sort.js -subset.js -sum.js -superset.js -threshold -ticks.js -transpose.js -union.js -variance.js -zip.js - -freedmanDiaconis.js -scott.js -sturges.js - -LICENSE -src - -color.js -cubehelix.js -define.js -index.js -lab.js -math.js - -LICENSE -src - -back.js -bounce.js -circle.js -cubic.js -elastic.js -exp.js -index.js -linear.js -math.js -poly.js -quad.js -sin.js - -LICENSE -src - -defaultLocale.js -exponent.js -formatDecimal.js -formatGroup.js -formatNumerals.js -formatPrefixAuto.js -formatRounded.js -formatSpecifier.js -formatTrim.js -formatTypes.js -identity.js -index.js -locale.js -precisionFixed.js -precisionPrefix.js -precisionRound.js - -LICENSE -src - -array.js -basis.js -basisClosed.js -color.js -constant.js -cubehelix.js -date.js -discrete.js -hcl.js -hsl.js -hue.js -index.js -lab.js -number.js -numberArray.js -object.js -piecewise.js -quantize.js -rgb.js -round.js -string.js -transform -value.js -zoom.js - -decompose.js -index.js -parse.js - -LICENSE -src - -index.js -path.js - -LICENSE -src - -band.js -colors.js -constant.js -continuous.js -diverging.js -identity.js -index.js -init.js -linear.js -log.js -nice.js -number.js -ordinal.js -pow.js -quantile.js -quantize.js -radial.js -sequential.js -sequentialQuantile.js -symlog.js -threshold.js -tickFormat.js -time.js -utcTime.js - -LICENSE -src - -arc.js -area.js -areaRadial.js -array.js -constant.js -curve -descending.js -identity.js -index.js -line.js -lineRadial.js -link.js -math.js -noop.js -offset -order -pie.js -point.js -pointRadial.js -stack.js -symbol -symbol.js - -basis.js -basisClosed.js -basisOpen.js -bump.js -bundle.js -cardinal.js -cardinalClosed.js -cardinalOpen.js -catmullRom.js -catmullRomClosed.js -catmullRomOpen.js -linear.js -linearClosed.js -monotone.js -natural.js -radial.js -step.js - -diverging.js -expand.js -none.js -silhouette.js -wiggle.js - -appearance.js -ascending.js -descending.js -insideOut.js -none.js -reverse.js - -asterisk.js -circle.js -cross.js -diamond.js -diamond2.js -plus.js -square.js -square2.js -star.js -triangle.js -triangle2.js -wye.js -x.js - -LICENSE -src - -day.js -duration.js -hour.js -index.js -interval.js -millisecond.js -minute.js -month.js -second.js -ticks.js -utcDay.js -utcHour.js -utcMinute.js -utcMonth.js -utcWeek.js -utcYear.js -week.js -year.js - -LICENSE -src - -defaultLocale.js -index.js -isoFormat.js -isoParse.js -locale.js - -LICENSE -src - -index.js -interval.js -timeout.js -timer.js - -LICENSE -src - -Beach.js -Cell.js -Circle.js -Diagram.js -Edge.js -RedBlackTree.js -constant.js -index.js -point.js -voronoi.js - -LICENSE -src - -index.js - -LICENSE.md -README.md -bin -client.d.ts -dist -index.cjs -index.d.cts -package.json -types - -openChrome.applescript -vite.js - -client -node -node-cjs - -client.mjs -env.mjs - -chunks -cli.js -constants.js -index.d.ts -index.js -runtime.d.ts -runtime.js -types.d-aGj9QkWt.d.ts - -dep-BB45zftN.js -dep-BK3b2jBa.js -dep-D-7KCb9p.js -dep-Dnp7gl8U.js -dep-IQS-Za7F.js - -publicUtils.cjs - -customEvent.d.ts -hmrPayload.d.ts -hot.d.ts -import-meta.d.ts -importGlob.d.ts -importMeta.d.ts -metadata.d.ts -package.json - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -dist -es2018 -es6 -package.json -ponyfill - -polyfill.es2018.js -polyfill.es2018.js.map -polyfill.es2018.min.js -polyfill.es2018.min.js.map -polyfill.es2018.mjs -polyfill.es2018.mjs.map -polyfill.es6.js -polyfill.es6.js.map -polyfill.es6.min.js -polyfill.es6.min.js.map -polyfill.es6.mjs -polyfill.es6.mjs.map -polyfill.js -polyfill.js.map -polyfill.min.js -polyfill.min.js.map -polyfill.mjs -polyfill.mjs.map -ponyfill.es2018.js -ponyfill.es2018.js.map -ponyfill.es2018.mjs -ponyfill.es2018.mjs.map -ponyfill.es6.js -ponyfill.es6.js.map -ponyfill.es6.mjs -ponyfill.es6.mjs.map -ponyfill.js -ponyfill.js.map -ponyfill.mjs -ponyfill.mjs.map -types - -polyfill.d.ts -ponyfill.d.ts -ts3.6 -tsdoc-metadata.json - -polyfill.d.ts -ponyfill.d.ts - -package.json - -package.json - -es2018 -es6 -package.json - -package.json - -package.json - -LICENSE.md -README.md -lib -package.json - -index.js - -LICENSE.txt -README.md -lib -package.json - -URL-impl.js -URL.js -public-api.js -url-state-machine.js -utils.js - -CHANGELOG.md -LICENSE -README.md -bin -package.json -which.js - -node-which - -LICENSE -README.md -index.js -package.json - -LICENSE -README.md -index.d.ts -index.js -package.json - -index.d.ts -index.js -license -package.json -readme.md - -ansi-styles - -index.d.ts -index.js -license -package.json -readme.md - -index.js -license -package.json -readme.md - -ansi-regex -emoji-regex -string-width -strip-ansi - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE-MIT.txt -README.md -es2015 -index.d.ts -index.js -package.json -text.js - -index.js -text.js - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -browser.js -index.js -lib -package.json -wrapper.mjs - -buffer-util.js -constants.js -event-target.js -extension.js -limiter.js -permessage-deflate.js -receiver.js -sender.js -stream.js -subprotocol.js -validation.js -websocket-server.js -websocket.js - -CHANGELOG.md -LICENSE -README.md -index.js -package.json - -CHANGELOG.md -LICENSE -README.md -build -index.js -locales -package.json -yargs.js - -lib - -apply-extends.d.ts -apply-extends.js -argsert.d.ts -argsert.js -command.d.ts -command.js -common-types.d.ts -common-types.js -completion-templates.d.ts -completion-templates.js -completion.d.ts -completion.js -is-promise.d.ts -is-promise.js -levenshtein.d.ts -levenshtein.js -middleware.d.ts -middleware.js -obj-filter.d.ts -obj-filter.js -parse-command.d.ts -parse-command.js -process-argv.d.ts -process-argv.js -usage.d.ts -usage.js -validation.d.ts -validation.js -yargs.d.ts -yargs.js -yerror.d.ts -yerror.js - -be.json -de.json -en.json -es.json -fi.json -fr.json -hi.json -hu.json -id.json -it.json -ja.json -ko.json -nb.json -nl.json -nn.json -pirate.json -pl.json -pt.json -pt_BR.json -ru.json -th.json -tr.json -zh_CN.json -zh_TW.json - -ansi-regex -emoji-regex -find-up -locate-path -p-limit -p-locate -string-width -strip-ansi - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE-MIT.txt -README.md -es2015 -index.d.ts -index.js -package.json -text.js - -index.js -text.js - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -index.d.ts -index.js -license -package.json -readme.md - -CHANGELOG.md -LICENSE.txt -README.md -index.js -lib -package.json - -tokenize-arg-string.js - -index.d.ts -index.js -license -package.json -readme.md - -LICENSE -README.md -index.cjs -index.d.cts -index.d.ts -index.js -package.json -src -v3 -v4 -v4-mini - -index.ts -v3 -v4 -v4-mini - -ZodError.ts -benchmarks -errors.ts -external.ts -helpers -index.ts -locales -standard-schema.ts -tests -types.ts - -datetime.ts -discriminatedUnion.ts -index.ts -ipv4.ts -object.ts -primitives.ts -realworld.ts -string.ts -union.ts - -enumUtil.ts -errorUtil.ts -parseUtil.ts -partialUtil.ts -typeAliases.ts -util.ts - -en.ts - -Mocker.ts -all-errors.test.ts -anyunknown.test.ts -array.test.ts -async-parsing.test.ts -async-refinements.test.ts -base.test.ts -bigint.test.ts -branded.test.ts -catch.test.ts -coerce.test.ts -complex.test.ts -custom.test.ts -date.test.ts -deepmasking.test.ts -default.test.ts -description.test.ts -discriminated-unions.test.ts -enum.test.ts -error.test.ts -firstparty.test.ts -firstpartyschematypes.test.ts -function.test.ts -generics.test.ts -instanceof.test.ts -intersection.test.ts -language-server.source.ts -language-server.test.ts -literal.test.ts -map.test.ts -masking.test.ts -mocker.test.ts -nan.test.ts -nativeEnum.test.ts -nullable.test.ts -number.test.ts -object-augmentation.test.ts -object-in-es5-env.test.ts -object.test.ts -optional.test.ts -parseUtil.test.ts -parser.test.ts -partials.test.ts -pickomit.test.ts -pipeline.test.ts -preprocess.test.ts -primitive.test.ts -promise.test.ts -readonly.test.ts -record.test.ts -recursive.test.ts -refine.test.ts -safeparse.test.ts -set.test.ts -standard-schema.test.ts -string.test.ts -transformer.test.ts -tuple.test.ts -unions.test.ts -validations.test.ts -void.test.ts - -classic -core -index.ts -locales -mini - -checks.ts -coerce.ts -compat.ts -errors.ts -external.ts -index.ts -iso.ts -parse.ts -schemas.ts -tests - -anyunknown.test.ts -array.test.ts -assignability.test.ts -async-parsing.test.ts -async-refinements.test.ts -base.test.ts -bigint.test.ts -brand.test.ts -catch.test.ts -coalesce.test.ts -coerce.test.ts -continuability.test.ts -custom.test.ts -date.test.ts -datetime.test.ts -default.test.ts -description.test.ts -discriminated-unions.test.ts -enum.test.ts -error-utils.test.ts -error.test.ts -file.test.ts -firstparty.test.ts -function.test.ts -generics.test.ts -index.test.ts -instanceof.test.ts -intersection.test.ts -json.test.ts -lazy.test.ts -literal.test.ts -map.test.ts -nan.test.ts -nested-refine.test.ts -nonoptional.test.ts -nullable.test.ts -number.test.ts -object.test.ts -optional.test.ts -partial.test.ts -pickomit.test.ts -pipe.test.ts -prefault.test.ts -preprocess.test.ts -primitive.test.ts -promise.test.ts -prototypes.test.ts -readonly.test.ts -record.test.ts -recursive-types.test.ts -refine.test.ts -registries.test.ts -set.test.ts -standard-schema.test.ts -string-formats.test.ts -string.test.ts -stringbool.test.ts -template-literal.test.ts -to-json-schema.test.ts -transform.test.ts -tuple.test.ts -union.test.ts -validations.test.ts -void.test.ts - -api.ts -checks.ts -config.ts -core.ts -doc.ts -errors.ts -function.ts -index.ts -json-schema.ts -parse.ts -regexes.ts -registries.ts -schemas.ts -standard-schema.ts -tests -to-json-schema.ts -util.ts -versions.ts -zsf.ts - -index.test.ts -locales - -be.test.ts -en.test.ts -ru.test.ts -tr.test.ts - -ar.ts -az.ts -be.ts -ca.ts -cs.ts -de.ts -en.ts -eo.ts -es.ts -fa.ts -fi.ts -fr-CA.ts -fr.ts -he.ts -hu.ts -id.ts -index.ts -it.ts -ja.ts -kh.ts -ko.ts -mk.ts -ms.ts -nl.ts -no.ts -ota.ts -pl.ts -ps.ts -pt.ts -ru.ts -sl.ts -sv.ts -ta.ts -th.ts -tr.ts -ua.ts -ur.ts -vi.ts -zh-CN.ts -zh-TW.ts - -checks.ts -coerce.ts -external.ts -index.ts -iso.ts -parse.ts -schemas.ts -tests - -assignability.test.ts -brand.test.ts -checks.test.ts -computed.test.ts -error.test.ts -functions.test.ts -index.test.ts -number.test.ts -object.test.ts -prototypes.test.ts -recursive-types.test.ts -string.test.ts - -index.ts - -ZodError.cjs -ZodError.d.cts -ZodError.d.ts -ZodError.js -errors.cjs -errors.d.cts -errors.d.ts -errors.js -external.cjs -external.d.cts -external.d.ts -external.js -helpers -index.cjs -index.d.cts -index.d.ts -index.js -locales -standard-schema.cjs -standard-schema.d.cts -standard-schema.d.ts -standard-schema.js -types.cjs -types.d.cts -types.d.ts -types.js - -enumUtil.cjs -enumUtil.d.cts -enumUtil.d.ts -enumUtil.js -errorUtil.cjs -errorUtil.d.cts -errorUtil.d.ts -errorUtil.js -parseUtil.cjs -parseUtil.d.cts -parseUtil.d.ts -parseUtil.js -partialUtil.cjs -partialUtil.d.cts -partialUtil.d.ts -partialUtil.js -typeAliases.cjs -typeAliases.d.cts -typeAliases.d.ts -typeAliases.js -util.cjs -util.d.cts -util.d.ts -util.js - -en.cjs -en.d.cts -en.d.ts -en.js - -classic -core -index.cjs -index.d.cts -index.d.ts -index.js -locales -mini - -checks.cjs -checks.d.cts -checks.d.ts -checks.js -coerce.cjs -coerce.d.cts -coerce.d.ts -coerce.js -compat.cjs -compat.d.cts -compat.d.ts -compat.js -errors.cjs -errors.d.cts -errors.d.ts -errors.js -external.cjs -external.d.cts -external.d.ts -external.js -index.cjs -index.d.cts -index.d.ts -index.js -iso.cjs -iso.d.cts -iso.d.ts -iso.js -parse.cjs -parse.d.cts -parse.d.ts -parse.js -schemas.cjs -schemas.d.cts -schemas.d.ts -schemas.js - -api.cjs -api.d.cts -api.d.ts -api.js -checks.cjs -checks.d.cts -checks.d.ts -checks.js -core.cjs -core.d.cts -core.d.ts -core.js -doc.cjs -doc.d.cts -doc.d.ts -doc.js -errors.cjs -errors.d.cts -errors.d.ts -errors.js -function.cjs -function.d.cts -function.d.ts -function.js -index.cjs -index.d.cts -index.d.ts -index.js -json-schema.cjs -json-schema.d.cts -json-schema.d.ts -json-schema.js -parse.cjs -parse.d.cts -parse.d.ts -parse.js -regexes.cjs -regexes.d.cts -regexes.d.ts -regexes.js -registries.cjs -registries.d.cts -registries.d.ts -registries.js -schemas.cjs -schemas.d.cts -schemas.d.ts -schemas.js -standard-schema.cjs -standard-schema.d.cts -standard-schema.d.ts -standard-schema.js -to-json-schema.cjs -to-json-schema.d.cts -to-json-schema.d.ts -to-json-schema.js -util.cjs -util.d.cts -util.d.ts -util.js -versions.cjs -versions.d.cts -versions.d.ts -versions.js - -ar.cjs -ar.d.cts -ar.d.ts -ar.js -az.cjs -az.d.cts -az.d.ts -az.js -be.cjs -be.d.cts -be.d.ts -be.js -ca.cjs -ca.d.cts -ca.d.ts -ca.js -cs.cjs -cs.d.cts -cs.d.ts -cs.js -de.cjs -de.d.cts -de.d.ts -de.js -en.cjs -en.d.cts -en.d.ts -en.js -eo.cjs -eo.d.cts -eo.d.ts -eo.js -es.cjs -es.d.cts -es.d.ts -es.js -fa.cjs -fa.d.cts -fa.d.ts -fa.js -fi.cjs -fi.d.cts -fi.d.ts -fi.js -fr-CA.cjs -fr-CA.d.cts -fr-CA.d.ts -fr-CA.js -fr.cjs -fr.d.cts -fr.d.ts -fr.js -he.cjs -he.d.cts -he.d.ts -he.js -hu.cjs -hu.d.cts -hu.d.ts -hu.js -id.cjs -id.d.cts -id.d.ts -id.js -index.cjs -index.d.cts -index.d.ts -index.js -it.cjs -it.d.cts -it.d.ts -it.js -ja.cjs -ja.d.cts -ja.d.ts -ja.js -kh.cjs -kh.d.cts -kh.d.ts -kh.js -ko.cjs -ko.d.cts -ko.d.ts -ko.js -mk.cjs -mk.d.cts -mk.d.ts -mk.js -ms.cjs -ms.d.cts -ms.d.ts -ms.js -nl.cjs -nl.d.cts -nl.d.ts -nl.js -no.cjs -no.d.cts -no.d.ts -no.js -ota.cjs -ota.d.cts -ota.d.ts -ota.js -pl.cjs -pl.d.cts -pl.d.ts -pl.js -ps.cjs -ps.d.cts -ps.d.ts -ps.js -pt.cjs -pt.d.cts -pt.d.ts -pt.js -ru.cjs -ru.d.cts -ru.d.ts -ru.js -sl.cjs -sl.d.cts -sl.d.ts -sl.js -sv.cjs -sv.d.cts -sv.d.ts -sv.js -ta.cjs -ta.d.cts -ta.d.ts -ta.js -th.cjs -th.d.cts -th.d.ts -th.js -tr.cjs -tr.d.cts -tr.d.ts -tr.js -ua.cjs -ua.d.cts -ua.d.ts -ua.js -ur.cjs -ur.d.cts -ur.d.ts -ur.js -vi.cjs -vi.d.cts -vi.d.ts -vi.js -zh-CN.cjs -zh-CN.d.cts -zh-CN.d.ts -zh-CN.js -zh-TW.cjs -zh-TW.d.cts -zh-TW.d.ts -zh-TW.js - -checks.cjs -checks.d.cts -checks.d.ts -checks.js -coerce.cjs -coerce.d.cts -coerce.d.ts -coerce.js -external.cjs -external.d.cts -external.d.ts -external.js -index.cjs -index.d.cts -index.d.ts -index.js -iso.cjs -iso.d.cts -iso.d.ts -iso.js -parse.cjs -parse.d.cts -parse.d.ts -parse.js -schemas.cjs -schemas.d.cts -schemas.d.ts -schemas.js - -index.cjs -index.d.cts -index.d.ts -index.js - -./public: -DKstate.png -Whitepaper.pdf -pezkuwichain_logo.png -placeholder.svg -robots.txt - -./src: -App.css -App.tsx -components -contexts -hooks -i18n -index.css -lib -main.tsx -pages - -./src/components: -AccountBalance.tsx -AddLiquidityModal.tsx -AddTokenModal.tsx -AppLayout.tsx -ChainSpecs.tsx -GovernanceInterface.tsx -HeroSection.tsx -KurdistanSun.tsx -LanguageSwitcher.tsx -MultisigMembers.tsx -NetworkStats.tsx -NftList.tsx -PalletsGrid.tsx -PolkadotWalletButton.tsx -PoolDashboard.tsx -ProtectedRoute.tsx -ReceiveModal.tsx -RemoveLiquidityModal.tsx -ReservesDashboard.tsx -RewardDistribution.tsx -TeamSection.tsx -TokenSwap.tsx -TokenomicsSection.tsx -TransactionHistory.tsx -TransferModal.tsx -TrustScoreCalculator.tsx -USDTBridge.tsx -auth -citizenship -delegation -forum -governance -notifications -p2p -proposals -security -staking -theme-provider.tsx -trading -treasury -ui -wallet - -./src/components/auth: -TwoFactorSetup.tsx -TwoFactorVerify.tsx - -./src/components/citizenship: -CitizenshipModal.tsx -ExistingCitizenAuth.tsx -NewCitizenApplication.tsx - -./src/components/delegation: -DelegateProfile.tsx -DelegationManager.tsx - -./src/components/forum: -DiscussionThread.tsx -ForumOverview.tsx -ModerationPanel.tsx - -./src/components/governance: -ElectionsInterface.tsx -GovernanceOverview.tsx -ProposalsList.tsx - -./src/components/notifications: -NotificationBell.tsx -NotificationCenter.tsx - -./src/components/p2p: -P2PMarket.tsx - -./src/components/proposals: -ProposalWizard.tsx - -./src/components/security: -PermissionEditor.tsx -SecurityAudit.tsx -SessionMonitor.tsx - -./src/components/staking: -StakingDashboard.tsx - -./src/components/trading: -LimitOrders.tsx -PriceChart.tsx - -./src/components/treasury: -FundingProposal.tsx -MultiSigApproval.tsx -SpendingHistory.tsx -TreasuryOverview.tsx - -./src/components/ui: -accordion.tsx -alert-dialog.tsx -alert.tsx -aspect-ratio.tsx -avatar.tsx -badge.tsx -breadcrumb.tsx -button.tsx -calendar.tsx -card.tsx -carousel.tsx -chart.tsx -checkbox.tsx -collapsible.tsx -command.tsx -context-menu.tsx -dialog.tsx -drawer.tsx -dropdown-menu.tsx -form.tsx -hover-card.tsx -input-otp.tsx -input.tsx -label.tsx -menubar.tsx -navigation-menu.tsx -pagination.tsx -popover.tsx -progress.tsx -radio-group.tsx -resizable.tsx -scroll-area.tsx -select.tsx -separator.tsx -sheet.tsx -sidebar.tsx -skeleton.tsx -slider.tsx -sonner.tsx -switch.tsx -table.tsx -tabs.tsx -textarea.tsx -toast.tsx -toaster.tsx -toggle-group.tsx -toggle.tsx -tooltip.tsx -use-toast.ts - -./src/components/wallet: -MultiSigWallet.tsx -TransactionModal.tsx -WalletButton.tsx -WalletModal.tsx - -./src/contexts: -AppContext.tsx -AuthContext.tsx -IdentityContext.tsx -PolkadotContext.tsx -WalletContext.tsx -WebSocketContext.tsx - -./src/hooks: -use-mobile.tsx -use-toast.ts - -./src/i18n: -config.ts -json.d.ts -locales -translations.ts - -./src/i18n/locales: -ar.json -ar.ts -ckb.json -ckb.ts -en.json -en.ts -fa.json -fa.ts -kmr.json -kmr.ts -tr.json -tr.ts - -./src/lib: -citizenship-crypto.ts -citizenship-workflow.ts -identity.ts -multisig.ts -scores.ts -staking.ts -supabase.ts -tiki.ts -usdt.ts -utils.ts -wallet.ts - -./src/pages: -AdminPanel.tsx -BeCitizen.tsx -Dashboard.tsx -EmailVerification.tsx -Index.tsx -Login.tsx -NotFound.tsx -PasswordReset.tsx -PoolDashboard.tsx -ProfileSettings.tsx -ReservesDashboardPage.tsx -WalletDashboard.tsx - -./supabase: -README.md -migrations - -./supabase/migrations: -001_initial_schema.sql -002_add_profile_columns.sql -003_fix_profile_creation.sql -004_create_upsert_function.sql diff --git a/web/package-lock.json b/web/package-lock.json index 72ab23f1..7073b55b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -58,7 +58,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.0", "date-fns": "^3.6.0", - "dompurify": "^3.3.1", + "dompurify": "^3.4.12", "embla-carousel-react": "^8.3.0", "highlight.js": "^11.9.0", "i18next": "^23.7.6", @@ -103,7 +103,7 @@ "globals": "^15.15.0", "husky": "^9.1.7", "jsdom": "^27.2.0", - "postcss": "^8.4.47", + "postcss": "^8.5.23", "tailwindcss": "^3.4.11", "typescript": "^5.5.3", "typescript-eslint": "^8.0.1", @@ -7651,9 +7651,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.10.tgz", - "integrity": "sha512-0xzNv0e7oYC6yyuOGZIABPM4qtg3QxLFniDNPP4ZP90wR8Yq3zgwpRbrNiT4N3IKqDbbYFEJLV+JWEs19aZ//w==", + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.12.tgz", + "integrity": "sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -10054,9 +10054,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "funding": [ { "type": "github", @@ -10800,9 +10800,9 @@ } }, "node_modules/postcss": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.13.tgz", - "integrity": "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==", + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "funding": [ { "type": "opencollective", @@ -10819,7 +10819,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, diff --git a/web/package.json b/web/package.json index 17307b1c..b247cadd 100644 --- a/web/package.json +++ b/web/package.json @@ -8,6 +8,7 @@ "dev": "cp .env.development .env && vite", "prebuild": "node generate-docs-structure.cjs", "build": "vite build", + "typecheck": "tsc --noEmit -p tsconfig.app.json", "build:telegram": "vite build --config vite.config.telegram.ts", "build:dev": "cp .env.development .env && vite build", "build:alfa": "cp .env.alfa .env && vite build", @@ -70,7 +71,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.0", "date-fns": "^3.6.0", - "dompurify": "^3.3.1", + "dompurify": "^3.4.12", "embla-carousel-react": "^8.3.0", "highlight.js": "^11.9.0", "i18next": "^23.7.6", @@ -142,7 +143,7 @@ "globals": "^15.15.0", "husky": "^9.1.7", "jsdom": "^27.2.0", - "postcss": "^8.4.47", + "postcss": "^8.5.23", "tailwindcss": "^3.4.11", "typescript": "^5.5.3", "typescript-eslint": "^8.0.1", diff --git a/web/src/components/AppLayout.tsx b/web/src/components/AppLayout.tsx index 2b1f48fc..6d1c7439 100644 --- a/web/src/components/AppLayout.tsx +++ b/web/src/components/AppLayout.tsx @@ -659,9 +659,9 @@ const AppLayout: React.FC = () => { @@ -670,7 +670,7 @@ const AppLayout: React.FC = () => { @@ -689,7 +689,7 @@ const AppLayout: React.FC = () => {
  • {t('landing.footer.forum')}
  • {t('landing.footer.discord')}
  • {t('landing.footer.telegram')}
  • -
  • {t('landing.footer.twitter')}
  • +
  • {t('landing.footer.twitter')}
  • diff --git a/web/src/components/ProtectedRoute.tsx b/web/src/components/ProtectedRoute.tsx index 47a09d7e..5c89f7ca 100644 --- a/web/src/components/ProtectedRoute.tsx +++ b/web/src/components/ProtectedRoute.tsx @@ -151,6 +151,12 @@ export const ProtectedRoute: React.FC = ({ return ; } + // NOTE: `isAdmin` here is a COSMETIC UX gate only (derived from a localStorage + // wallet and forgeable in DevTools). It prevents casual access to the admin UI + // but is NOT a security boundary. All privileged operations behind this route + // (e.g. dispute resolution) independently verify admin authority server-side + // via a wallet signature (resolve-dispute edge function). Never rely on this + // check alone to protect funds or state. if (requireAdmin && !isAdmin) { return (
    diff --git a/web/src/components/TransferModal.tsx b/web/src/components/TransferModal.tsx index fc91dae2..c5319b89 100644 --- a/web/src/components/TransferModal.tsx +++ b/web/src/components/TransferModal.tsx @@ -20,6 +20,8 @@ import { } from '@/components/ui/select'; import { ArrowRight, Loader2, CheckCircle, XCircle } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; +import { MINTABLE_ASSETS } from './dex/mintableAssets'; +import { parseTokenInput } from '@pezkuwi/utils/dex'; interface TokenBalance { assetId: number; @@ -36,7 +38,7 @@ interface TransferModalProps { selectedAsset?: TokenBalance | null; } -type TokenType = 'HEZ' | 'PEZ' | 'USDT' | 'BTC' | 'ETH' | 'DOT'; +type TokenType = 'HEZ' | 'PEZ' | 'wUSDT' | 'wDOT' | 'wETH' | 'wBTC'; interface Token { symbol: TokenType; @@ -51,19 +53,26 @@ const TOKEN_LOGOS: Record = { HEZ: '/tokens/HEZ.png', PEZ: '/tokens/PEZ.png', USDT: '/tokens/USDT.png', + wUSDT: '/tokens/USDT.png', + wDOT: '/tokens/DOT.png', + wETH: '/tokens/ETH.png', + wBTC: '/tokens/BTC.png', BTC: '/tokens/BTC.png', ETH: '/tokens/ETH.png', DOT: '/tokens/DOT.png', BNB: '/tokens/BNB.png', }; +// Wrapped assets (id + decimals) are sourced from the single source of truth +// (MINTABLE_ASSETS in dex/mintableAssets.ts): wUSDT=1000, wDOT=1001, wETH=1002, wBTC=1003. +// All of these live on Asset Hub (assets pallet). Only native HEZ is on the relay chain. const TOKENS: Token[] = [ { symbol: 'HEZ', name: 'Hez Token', decimals: 12, color: 'from-green-600 to-yellow-400' }, { symbol: 'PEZ', name: 'Pez Token', assetId: 1, decimals: 12, color: 'from-blue-600 to-purple-400' }, - { symbol: 'USDT', name: 'Tether USD', assetId: 1000, decimals: 6, color: 'from-green-500 to-green-600' }, - { symbol: 'BTC', name: 'Bitcoin', assetId: 3, decimals: 8, color: 'from-orange-500 to-yellow-500' }, - { symbol: 'ETH', name: 'Ethereum', assetId: 4, decimals: 18, color: 'from-purple-500 to-blue-500' }, - { symbol: 'DOT', name: 'Polkadot', assetId: 5, decimals: 10, color: 'from-pink-500 to-red-500' }, + { symbol: 'wUSDT', name: MINTABLE_ASSETS.wUSDT.name, assetId: MINTABLE_ASSETS.wUSDT.id, decimals: MINTABLE_ASSETS.wUSDT.decimals, color: 'from-green-500 to-green-600' }, + { symbol: 'wDOT', name: MINTABLE_ASSETS.wDOT.name, assetId: MINTABLE_ASSETS.wDOT.id, decimals: MINTABLE_ASSETS.wDOT.decimals, color: 'from-pink-500 to-red-500' }, + { symbol: 'wETH', name: MINTABLE_ASSETS.wETH.name, assetId: MINTABLE_ASSETS.wETH.id, decimals: MINTABLE_ASSETS.wETH.decimals, color: 'from-purple-500 to-blue-500' }, + { symbol: 'wBTC', name: MINTABLE_ASSETS.wBTC.name, assetId: MINTABLE_ASSETS.wBTC.id, decimals: MINTABLE_ASSETS.wBTC.decimals, color: 'from-orange-500 to-yellow-500' }, ]; export const TransferModal: React.FC = ({ isOpen, onClose, selectedAsset }) => { @@ -99,14 +108,11 @@ export const TransferModal: React.FC = ({ isOpen, onClose, s return; } - // Check if Asset Hub transfer (PEZ, wUSDT, wHEZ are on Asset Hub) - const isAssetHubTransfer = currentToken.symbol === 'PEZ' || - currentToken.symbol === 'USDT' || - currentToken.symbol === 'wUSDT' || - currentToken.symbol === 'wHEZ' || - currentToken.assetId === 1 || // PEZ - currentToken.assetId === 2 || // wHEZ - currentToken.assetId === 1000; // wUSDT + // Native HEZ (no assetId, or assetId 0) transfers on the relay chain. + // Every other token is an Asset Hub assets-pallet asset (PEZ, wHEZ, wUSDT, + // wDOT, wETH, wBTC and any custom token), so it must route through Asset Hub. + const isNativeHez = currentToken.assetId === undefined || currentToken.assetId === 0; + const isAssetHubTransfer = !isNativeHez; if (isAssetHubTransfer && (!assetHubApi || !isAssetHubReady)) { toast({ title: t('transfer.error'), @@ -133,25 +139,24 @@ export const TransferModal: React.FC = ({ isOpen, onClose, s const { getSigner } = await import('@/lib/get-signer'); const injector = await getSigner(selectedAccount.address, walletSource, isAssetHubTransfer ? assetHubApi : api); - // Convert amount to smallest unit - const amountInSmallestUnit = BigInt(parseFloat(amount) * Math.pow(10, currentToken.decimals)); + // Convert amount to smallest unit using string-based BigInt parsing. + // (BigInt(parseFloat(amount) * 10**decimals) throws a RangeError on + // fractional amounts because the intermediate double is non-integer.) + const amountInSmallestUnit = parseTokenInput(amount, currentToken.decimals); let transfer; let targetApi = api; // Default to main chain API - // Create appropriate transfer transaction based on token type - // HEZ uses native token transfer (balances pallet on main chain) - // PEZ, wHEZ, wUSDT use assets pallet on Asset Hub - if (currentToken.assetId === undefined || (selectedToken === 'HEZ' && !selectedAsset)) { - // Native HEZ token transfer on main chain - transfer = api.tx.balances.transferKeepAlive(recipient, amountInSmallestUnit.toString()); - } else if (isAssetHubTransfer) { - // Asset Hub transfer (PEZ, wHEZ, wUSDT) - targetApi = assetHubApi!; - transfer = assetHubApi!.tx.assets.transfer(currentToken.assetId, recipient, amountInSmallestUnit.toString()); + // Create appropriate transfer transaction based on token type. + // HEZ uses native token transfer (balances pallet on the relay chain). + // Every asset (PEZ, wHEZ, wUSDT, wDOT, wETH, wBTC, custom) is on Asset Hub. + if (isNativeHez) { + // Native HEZ token transfer on the relay chain + transfer = api.tx.balances.transferKeepAlive(recipient, amountInSmallestUnit); } else { - // Other asset token transfers on main chain - transfer = api.tx.assets.transfer(currentToken.assetId, recipient, amountInSmallestUnit.toString()); + // Asset Hub transfer (assets pallet) + targetApi = assetHubApi!; + transfer = assetHubApi!.tx.assets.transfer(currentToken.assetId, recipient, amountInSmallestUnit); } setTxStatus('pending'); diff --git a/web/src/components/admin/DisputeResolutionPanel.tsx b/web/src/components/admin/DisputeResolutionPanel.tsx index 72009969..851e9203 100644 --- a/web/src/components/admin/DisputeResolutionPanel.tsx +++ b/web/src/components/admin/DisputeResolutionPanel.tsx @@ -1,6 +1,8 @@ import { useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { supabase } from '@/lib/supabase'; +import { usePezkuwi } from '@/contexts/PezkuwiContext'; +import { useWallet } from '@/contexts/WalletContext'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; @@ -111,8 +113,35 @@ const CATEGORY_KEYS: Record = { other: 'dispute.categoryOther' }; +/** + * Canonical admin-action challenge. MUST be byte-identical to the server + * buildAdminChallenge (web/supabase/functions/_shared/identity-auth.ts). + */ +function buildAdminChallenge(p: { + action: string; + disputeId: string; + tradeId: string; + decision: string; + adminAddress: string; + timestamp: number; + nonce: string; +}): string { + return [ + 'Pezkuwi P2P Admin Action', + `action:${p.action}`, + `dispute:${p.disputeId}`, + `trade:${p.tradeId}`, + `decision:${p.decision}`, + `admin:${p.adminAddress}`, + `timestamp:${p.timestamp}`, + `nonce:${p.nonce}`, + ].join('\n'); +} + export function DisputeResolutionPanel() { const { t } = useTranslation(); + const { selectedAccount } = usePezkuwi(); + const { signMessage } = useWallet(); const [disputes, setDisputes] = useState([]); const [loading, setLoading] = useState(true); const [selectedDispute, setSelectedDispute] = useState(null); @@ -202,28 +231,46 @@ export function DisputeResolutionPanel() { return true; }); - // Claim dispute for review - const claimDispute = async (disputeId: string) => { + // Sign an admin-action challenge with the connected wallet. The server + // (resolve-dispute edge function) verifies the signature AND that the wallet + // is in the admin set — this is the real authorization, not the client flag. + const signAdminAction = async ( + action: 'claim' | 'resolve', + disputeId: string, + tradeId: string, + decision: string + ) => { + if (!selectedAccount?.address) throw new Error('Connect an admin wallet'); + const timestamp = Date.now(); + const nonce = `adm-${timestamp}-${Math.random().toString(36).slice(2)}-${Math.random().toString(36).slice(2)}`; + const challenge = buildAdminChallenge({ + action, + disputeId, + tradeId, + decision, + adminAddress: selectedAccount.address, + timestamp, + nonce, + }); + const signature = await signMessage(challenge); + return { adminAddress: selectedAccount.address, signature, timestamp, nonce }; + }; + + // Claim dispute for review (server-verified admin action) + const claimDispute = async (disputeId: string, tradeId: string) => { try { - const { data: { user } } = await supabase.auth.getUser(); - if (!user) throw new Error('Not authenticated'); - - const { error } = await supabase - .from('p2p_fiat_disputes') - .update({ - status: 'under_review', - assigned_moderator_id: user.id, - assigned_at: new Date().toISOString() - }) - .eq('id', disputeId); - - if (error) throw error; + toast.info(t('dispute.claimSignPrompt', 'Sign to claim this dispute...')); + const auth = await signAdminAction('claim', disputeId, tradeId, ''); + const { data, error } = await supabase.functions.invoke('resolve-dispute', { + body: { action: 'claim', disputeId, tradeId, ...auth }, + }); + if (error || !data?.success) throw new Error(data?.error || error?.message || 'Claim failed'); toast.success(t('dispute.claimedToast')); fetchDisputes(); } catch (error) { console.error('Error claiming dispute:', error); - toast.error(t('dispute.claimFailed')); + toast.error(error instanceof Error ? error.message : t('dispute.claimFailed')); } }; @@ -236,52 +283,26 @@ export function DisputeResolutionPanel() { setSubmitting(true); try { - const { data: { user } } = await supabase.auth.getUser(); - if (!user) throw new Error('Not authenticated'); + // Server-verified admin action. The edge function verifies the admin + // signature, then atomically MOVES ESCROW (release/refund/split) and + // updates trade + dispute status in one transaction. The client no longer + // relabels rows directly (which previously moved no funds). + toast.info(t('dispute.resolveSignPrompt', 'Sign to authorize the resolution...')); + const auth = await signAdminAction('resolve', selectedDispute.id, selectedDispute.trade_id, decision); - // Update dispute - const { error: disputeError } = await supabase - .from('p2p_fiat_disputes') - .update({ - status: decision === 'escalate' ? 'escalated' : 'resolved', + const { data, error } = await supabase.functions.invoke('resolve-dispute', { + body: { + action: 'resolve', + disputeId: selectedDispute.id, + tradeId: selectedDispute.trade_id, decision, - decision_reasoning: reasoning, - resolved_at: new Date().toISOString() - }) - .eq('id', selectedDispute.id); + reasoning, + ...auth, + }, + }); - if (disputeError) throw disputeError; - - // Update trade status based on decision - if (decision !== 'escalate' && selectedDispute.trade) { - const tradeStatus = decision === 'release_to_buyer' ? 'completed' : 'refunded'; - await supabase - .from('p2p_fiat_trades') - .update({ status: tradeStatus }) - .eq('id', selectedDispute.trade_id); - } - - // Create notifications for both parties - if (selectedDispute.trade) { - const notificationPromises = [ - supabase.rpc('create_p2p_notification', { - p_user_id: selectedDispute.trade.seller_id, - p_type: 'dispute_resolved', - p_title: 'Dispute Resolved', - p_message: `The dispute has been resolved: ${t(DECISION_OPTION_KEYS.find(o => o.value === decision)?.labelKey || '')}`, - p_reference_type: 'dispute', - p_reference_id: selectedDispute.id - }), - supabase.rpc('create_p2p_notification', { - p_user_id: selectedDispute.trade.buyer_id, - p_type: 'dispute_resolved', - p_title: 'Dispute Resolved', - p_message: `The dispute has been resolved: ${t(DECISION_OPTION_KEYS.find(o => o.value === decision)?.labelKey || '')}`, - p_reference_type: 'dispute', - p_reference_id: selectedDispute.id - }) - ]; - await Promise.all(notificationPromises); + if (error || !data?.success) { + throw new Error(data?.error || error?.message || 'Resolution failed'); } toast.success(t('dispute.resolvedToast')); @@ -292,7 +313,7 @@ export function DisputeResolutionPanel() { fetchDisputes(); } catch (error) { console.error('Error resolving dispute:', error); - toast.error(t('dispute.resolveFailed')); + toast.error(error instanceof Error ? error.message : t('dispute.resolveFailed')); } finally { setSubmitting(false); } @@ -475,7 +496,7 @@ export function DisputeResolutionPanel() { {dispute.status === 'open' && ( diff --git a/web/src/components/dex/InitializeHezPoolModal.tsx b/web/src/components/dex/InitializeHezPoolModal.tsx index 19d9bea2..1be67801 100644 --- a/web/src/components/dex/InitializeHezPoolModal.tsx +++ b/web/src/components/dex/InitializeHezPoolModal.tsx @@ -10,6 +10,7 @@ import { Alert, AlertDescription } from '@/components/ui/alert'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { useToast } from '@/hooks/use-toast'; import { useTranslation } from 'react-i18next'; +import { parseTokenInput } from '@pezkuwi/utils/dex'; interface InitializeHezPoolModalProps { isOpen: boolean; @@ -131,7 +132,7 @@ export const InitializeHezPoolModal: React.FC = ({ return; } - const amountRaw = BigInt(parseFloat(amount) * 10 ** 12); + const amountRaw = BigInt(parseTokenInput(amount, 12)); if (amountRaw <= BigInt(0)) { setErrorMessage(t('common.amountGtZero')); diff --git a/web/src/components/dex/InitializeUsdtModal.tsx b/web/src/components/dex/InitializeUsdtModal.tsx index ebcd0e25..1f275f0c 100644 --- a/web/src/components/dex/InitializeUsdtModal.tsx +++ b/web/src/components/dex/InitializeUsdtModal.tsx @@ -9,6 +9,7 @@ import { Input } from '@/components/ui/input'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { useToast } from '@/hooks/use-toast'; import { useTranslation } from 'react-i18next'; +import { parseTokenInput } from '@pezkuwi/utils/dex'; interface InitializeUsdtModalProps { isOpen: boolean; @@ -86,7 +87,7 @@ export const InitializeUsdtModal: React.FC = ({ return; } - const usdtAmountRaw = BigInt(parseFloat(usdtAmount) * 10 ** USDT_DECIMALS); + const usdtAmountRaw = BigInt(parseTokenInput(usdtAmount, USDT_DECIMALS)); if (usdtAmountRaw <= BigInt(0)) { setErrorMessage(t('common.amountGtZero')); diff --git a/web/src/components/dex/XCMBridgeSetupModal.tsx b/web/src/components/dex/XCMBridgeSetupModal.tsx index 908590dc..da130a69 100644 --- a/web/src/components/dex/XCMBridgeSetupModal.tsx +++ b/web/src/components/dex/XCMBridgeSetupModal.tsx @@ -9,6 +9,7 @@ import { Button } from '@/components/ui/button'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { useToast } from '@/hooks/use-toast'; import { useTranslation } from 'react-i18next'; +import { parseTokenInput } from '@pezkuwi/utils/dex'; import { checkBridgeStatus, fetchAssetHubUsdtInfo, @@ -160,8 +161,8 @@ export const XCMBridgeSetupModal: React.FC = ({ try { // Convert amounts to raw values (6 decimals for wUSDT, 12 for HEZ) - const wusdtRaw = BigInt(parseFloat(wusdtAmount) * 10 ** 6).toString(); - const hezRaw = BigInt(parseFloat(hezAmount) * 10 ** 12).toString(); + const wusdtRaw = parseTokenInput(wusdtAmount, 6); + const hezRaw = parseTokenInput(hezAmount, 12); await createWUsdtHezPool( assetHubApi, diff --git a/web/src/components/forum/DiscussionThread.tsx b/web/src/components/forum/DiscussionThread.tsx index e5bcbc81..c39483da 100644 --- a/web/src/components/forum/DiscussionThread.tsx +++ b/web/src/components/forum/DiscussionThread.tsx @@ -9,6 +9,7 @@ import { useTranslation } from 'react-i18next'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; import { useWebSocket } from '@/contexts/WebSocketContext'; import { useToast } from '@/hooks/use-toast'; +import DOMPurify from 'dompurify'; interface Comment { id: string; @@ -329,8 +330,18 @@ export function DiscussionThread({ proposalId }: { proposalId: string }) {
    ); + // SECURITY: user-supplied comment content. Escape all HTML FIRST so raw markup + // (e.g. ) becomes inert text, THEN apply the markdown + // transforms, THEN run the result through DOMPurify restricted to a safe tag/attr + // allow-list with http(s)-only hrefs. This blocks stored XSS (script/onerror/ + // javascript: URLs) while keeping basic markdown rendering. const parseMarkdown = (text: string): string => { - return text + const escaped = (text || '') + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"'); + const html = escaped .replace(/^### (.*$)/gim, '

    $1

    ') .replace(/^## (.*$)/gim, '

    $1

    ') .replace(/^# (.*$)/gim, '

    $1

    ') @@ -339,6 +350,11 @@ export function DiscussionThread({ proposalId }: { proposalId: string }) { .replace(/\[([^\]]+)\]\(([^)]+)\)/gim, '$1') .replace(/^> (.*$)/gim, '
    $1
    ') .replace(/\n/gim, '
    '); + return DOMPurify.sanitize(html, { + ALLOWED_TAGS: ['h1', 'h2', 'h3', 'strong', 'em', 'a', 'blockquote', 'br', 'p'], + ALLOWED_ATTR: ['href', 'class'], + ALLOWED_URI_REGEXP: /^https?:\/\//i, + }); }; return ( diff --git a/web/src/components/landing/LandingPageDesktop.tsx b/web/src/components/landing/LandingPageDesktop.tsx index 56a4b9a0..7c7d18d9 100644 --- a/web/src/components/landing/LandingPageDesktop.tsx +++ b/web/src/components/landing/LandingPageDesktop.tsx @@ -1148,9 +1148,9 @@ const LandingPageDesktop: React.FC = () => { @@ -1159,7 +1159,7 @@ const LandingPageDesktop: React.FC = () => { @@ -1178,7 +1178,7 @@ const LandingPageDesktop: React.FC = () => {
  • {t('landing.footer.forum')}
  • {t('landing.footer.discord')}
  • {t('landing.footer.telegram')}
  • -
  • {t('landing.footer.twitter')}
  • +
  • {t('landing.footer.twitter')}
  • diff --git a/web/src/components/notifications/NotificationBell.tsx b/web/src/components/notifications/NotificationBell.tsx index 1dae87de..daed1af2 100644 --- a/web/src/components/notifications/NotificationBell.tsx +++ b/web/src/components/notifications/NotificationBell.tsx @@ -29,11 +29,14 @@ export default function NotificationBell() { const [open, setOpen] = useState(false); useEffect(() => { - if (user) { - loadNotifications(); + if (!user) return; - subscribeToNotifications(); - } + loadNotifications(); + // Return the unsubscribe callback so the realtime channel is torn down + // on unmount / when the user changes — otherwise channels leak and + // setState fires after unmount. + const unsubscribe = subscribeToNotifications(); + return unsubscribe; // eslint-disable-next-line react-hooks/exhaustive-deps }, [user]); @@ -55,7 +58,7 @@ export default function NotificationBell() { const subscribeToNotifications = () => { const channel = supabase - .channel('notifications') + .channel(`notifications-${user?.id}`) .on( 'postgres_changes', { diff --git a/web/src/components/p2p/CreateAd.tsx b/web/src/components/p2p/CreateAd.tsx index 738f15e5..0dfa972c 100644 --- a/web/src/components/p2p/CreateAd.tsx +++ b/web/src/components/p2p/CreateAd.tsx @@ -1,6 +1,7 @@ import React, { useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { usePezkuwi } from '@/contexts/PezkuwiContext'; +import { useWallet } from '@/contexts/WalletContext'; import { useP2PIdentity } from '@/contexts/P2PIdentityContext'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; @@ -25,7 +26,8 @@ interface CreateAdProps { export function CreateAd({ onAdCreated }: CreateAdProps) { const { t } = useTranslation(); const { selectedAccount } = usePezkuwi(); - const { userId } = useP2PIdentity(); + const { signMessage } = useWallet(); + const { userId, identityId } = useP2PIdentity(); const [paymentMethods, setPaymentMethods] = useState([]); const [selectedPaymentMethod, setSelectedPaymentMethod] = useState(null); @@ -77,7 +79,7 @@ export function CreateAd({ onAdCreated }: CreateAdProps) { }; const handleCreateAd = async () => { - if (!selectedAccount || !userId) { + if (!selectedAccount || !userId || !identityId) { toast.error(t('p2p.connectWalletAndLogin')); return; } @@ -128,6 +130,8 @@ export function CreateAd({ onAdCreated }: CreateAdProps) { try { await createFiatOffer({ userId, + identityId: identityId!, + signMessage, sellerWallet: selectedAccount.address, token, amountCrypto: cryptoAmt, diff --git a/web/src/components/p2p/WithdrawModal.tsx b/web/src/components/p2p/WithdrawModal.tsx index 5ad0c0a5..9f8b533e 100644 --- a/web/src/components/p2p/WithdrawModal.tsx +++ b/web/src/components/p2p/WithdrawModal.tsx @@ -30,6 +30,7 @@ import { Info } from 'lucide-react'; import { usePezkuwi } from '@/contexts/PezkuwiContext'; +import { useWallet } from '@/contexts/WalletContext'; import { useP2PIdentity } from '@/contexts/P2PIdentityContext'; import { toast } from 'sonner'; import { @@ -52,7 +53,8 @@ type WithdrawStep = 'form' | 'confirm' | 'success'; export function WithdrawModal({ isOpen, onClose, onSuccess }: WithdrawModalProps) { const { t } = useTranslation(); const { selectedAccount } = usePezkuwi(); - const { userId } = useP2PIdentity(); + const { signMessage } = useWallet(); + const { userId, identityId } = useP2PIdentity(); const [step, setStep] = useState('form'); const [token, setToken] = useState('HEZ'); @@ -177,8 +179,18 @@ export function WithdrawModal({ isOpen, onClose, onSuccess }: WithdrawModalProps try { const withdrawAmount = parseFloat(amount); - if (!userId) throw new Error('Identity required'); - const id = await requestWithdraw(userId, token, withdrawAmount, walletAddress); + if (!identityId) throw new Error('Identity required'); + if (!selectedAccount?.address) throw new Error('Connect a wallet to withdraw'); + // Authorization: sign a challenge with the wallet that owns the identity. + // The edge function derives user_id from identityId after verifying this. + const id = await requestWithdraw( + identityId, + token, + withdrawAmount, + walletAddress, + selectedAccount.address, + signMessage + ); setRequestId(id); setStep('success'); onSuccess?.(); diff --git a/web/src/contexts/AuthContext.tsx b/web/src/contexts/AuthContext.tsx index 955393b9..09d9ec3e 100644 --- a/web/src/contexts/AuthContext.tsx +++ b/web/src/contexts/AuthContext.tsx @@ -115,6 +115,17 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children const checkAdminStatus = useCallback(async () => { + // ============================================================ + // COSMETIC ONLY — NOT an authorization boundary. + // ------------------------------------------------------------ + // This flag is derived from a localStorage wallet value and can be trivially + // forged in DevTools. It ONLY controls whether admin UI is shown. Every + // privileged operation MUST be verified server-side: + // - Dispute claim/resolve -> `resolve-dispute` edge function verifies a + // wallet SIGNATURE against the server-side admin wallet set before doing + // anything (see supabase/functions/resolve-dispute + _shared/identity-auth). + // Do NOT add fund-moving or state-changing logic gated solely on isAdmin. + // ============================================================ // Admin wallet whitelist (blockchain-based auth) const ADMIN_WALLETS = [ '5CyuFfbF95rzBxru7c9yEsX4XmQXUxpLUcbj9RLg9K1cGiiF', // Founder diff --git a/web/src/main.tsx b/web/src/main.tsx index 9825ce79..6899153e 100644 --- a/web/src/main.tsx +++ b/web/src/main.tsx @@ -26,6 +26,10 @@ if (typeof window !== 'undefined' && import.meta.env.PROD) { }; } +// Augment @pezkuwi/api types so api.query/tx/rpc return typed values +// instead of the generic `Codec`. Must be imported before any api usage. +import '@pezkuwi/api-augment'; + import { createRoot } from 'react-dom/client' import App from './App.tsx' import './index.css' diff --git a/web/src/pages/Explorer.tsx b/web/src/pages/Explorer.tsx index a828ad93..6659d23f 100644 --- a/web/src/pages/Explorer.tsx +++ b/web/src/pages/Explorer.tsx @@ -860,7 +860,7 @@ const Explorer: React.FC = () => { {t('explorer.telemetry')} diff --git a/web/src/pages/Forum.tsx b/web/src/pages/Forum.tsx index 56f15992..c6465e5d 100644 --- a/web/src/pages/Forum.tsx +++ b/web/src/pages/Forum.tsx @@ -429,7 +429,7 @@ const Forum: React.FC = () => { - + → {t('forum.govDashboard')} diff --git a/web/src/pages/P2PTrade.tsx b/web/src/pages/P2PTrade.tsx index 50dcedf0..6bb23715 100644 --- a/web/src/pages/P2PTrade.tsx +++ b/web/src/pages/P2PTrade.tsx @@ -34,6 +34,7 @@ import { Star, } from 'lucide-react'; import { useP2PIdentity } from '@/contexts/P2PIdentityContext'; +import { useWallet } from '@/contexts/WalletContext'; import { toast } from 'sonner'; import { supabase } from '@/lib/supabase'; import { @@ -74,7 +75,8 @@ export default function P2PTrade() { const { tradeId } = useParams<{ tradeId: string }>(); const navigate = useNavigate(); const { t } = useTranslation(); - const { userId } = useP2PIdentity(); + const { userId, identityId, walletAddress } = useP2PIdentity(); + const { signMessage } = useWallet(); const [trade, setTrade] = useState(null); const [loading, setLoading] = useState(true); @@ -295,14 +297,14 @@ export default function P2PTrade() { // Handle release crypto const handleReleaseCrypto = async () => { - if (!trade || !userId) { + if (!trade || !userId || !identityId || !walletAddress) { toast.error(t('p2p.connectWalletAndLogin')); return; } setActionLoading(true); try { - await confirmPaymentReceived(trade.id, userId); + await confirmPaymentReceived(trade.id, identityId, walletAddress, signMessage); toast.success(t('p2pTrade.cryptoReleasedToast')); fetchTrade(); } catch (error) { diff --git a/web/src/pages/Presale.tsx b/web/src/pages/Presale.tsx index c245e79a..75a68435 100644 --- a/web/src/pages/Presale.tsx +++ b/web/src/pages/Presale.tsx @@ -14,7 +14,7 @@ import { toast } from 'sonner'; export default function Presale() { const { t } = useTranslation(); const navigate = useNavigate(); - const { api, selectedAccount, isApiReady } = usePezkuwi(); + const { api, selectedAccount, isApiReady, walletSource } = usePezkuwi(); const { balances } = useWallet(); const [wusdtAmount, setWusdtAmount] = useState(''); @@ -107,9 +107,13 @@ export default function Presale() { try { const amountWithDecimals = Math.floor(amount * 1_000_000); // 6 decimals + // Get signer (extension or WalletConnect) — no global api.setSigner exists + const { getSigner } = await import('@/lib/get-signer'); + const injector = await getSigner(selectedAccount.address, walletSource, api); + const tx = api.tx.presale.contribute(amountWithDecimals); - await tx.signAndSend(selectedAccount.address, ({ status, events }) => { + await tx.signAndSend(selectedAccount.address, { signer: injector.signer }, ({ status, events }) => { if (status.isInBlock) { if (import.meta.env.DEV) { console.log(`Transaction included in block: ${status.asInBlock}`); diff --git a/web/src/pages/ProfileSettings.tsx b/web/src/pages/ProfileSettings.tsx index 09a4be93..9faa07fe 100644 --- a/web/src/pages/ProfileSettings.tsx +++ b/web/src/pages/ProfileSettings.tsx @@ -398,8 +398,8 @@ export default function ProfileSettings() { English Türkçe العربية - Kurdî - کوردی + Kurdî (Kurmancî) + کوردی (سۆرانی) فارسی diff --git a/web/supabase/DEPLOY_RUNBOOK.md b/web/supabase/DEPLOY_RUNBOOK.md new file mode 100644 index 00000000..52919194 --- /dev/null +++ b/web/supabase/DEPLOY_RUNBOOK.md @@ -0,0 +1,69 @@ +# Security Fixes — Deploy Runbook (2026-07-25) + +Deploys are gated and applied by the owner. This runbook lists exactly what must +ship for the P2P custodial-fund security fixes. **Apply migrations first, then +edge functions, then set secrets, then ship the frontend.** All escrow/withdraw +paths fail closed, so partial deploys can block legitimate withdrawals/trades. + +## 1. Migrations (apply in this order) + +Round 1 (BOLA / RLS / dispute escrow): +1. `20260725000000_withdraw_authz_hardening.sql` — `p2p_challenge_nonces` table; locks `request_withdraw` to service role. +2. `20260725010000_harden_financial_rls.sql` — removes world-open reads on balances/ledger/deposit-withdraw/payment-PII; scoped read RPCs; locks `p2p_fiat_disputes` UPDATE to service role. +3. `20260725020000_admin_dispute_resolution.sql` — `admin_resolve_dispute` (atomic release/refund/split, service role only). + +Round 2 (escrow-RPC drain): +4. `20260725030000_lock_escrow_internal_rpcs.sql` — REVOKE PUBLIC/anon/authenticated EXECUTE on `lock_/release_/refund_escrow_internal`; GRANT to `service_role`. + +> Migration 4 MUST be accompanied by the round-2 edge functions (below) and the +> updated frontend, or offer-creation and payment-release will break (the client +> can no longer call the escrow RPCs directly). + +## 2. Edge functions to deploy + +Round 1: +- `process-withdraw` (rewritten — signed-challenge authz, derives user_id server-side) +- `process-withdrawal` (batch — now requires the service-role key) +- `verify-deposit` (adds identity-ownership binding) +- `resolve-dispute` (new — admin-signature-gated dispute claim/resolve) + +Round 2: +- `confirm-payment` (new — seller-signed escrow release) +- `lock-escrow` (new — owner-signed escrow lock) + +Shared code: `functions/_shared/identity-auth.ts` (imported by the above; not a +deployable function itself — ensure it deploys alongside). + +## 3. Secrets (supabase functions secrets) + +- `PEOPLE_RPC_ENDPOINT` — People Chain WS (default `wss://people-rpc.pezkuwichain.io`). + Required by `process-withdraw`, `verify-deposit`, `confirm-payment`, `lock-escrow` + for citizen-NFT ownership verification. +- `ADMIN_WALLETS` — optional, comma-separated SS58 admin set for `resolve-dispute` + (defaults to the 3 historical admin wallets baked into the function). +- Existing: `PLATFORM_PRIVATE_KEY`, `SUPABASE_SERVICE_ROLE_KEY`, `SUPABASE_URL`, RPC endpoints. + +## 4. Frontend + +Ship the updated client (new signing flows in withdraw/offer-create/payment-release +and the admin dispute panel). Users now sign an authorization challenge in their +wallet for: withdrawals, offer creation (lock), payment release, and admin dispute +actions. + +## 5. Post-deploy smoke checks + +- Withdraw a small amount (signs, succeeds; a replayed nonce is rejected). +- Create a sell offer (signs the lock; balance moves available→locked). +- Complete a trade release (seller signs; buyer credited). +- Resolve a test dispute as admin (escrow actually moves). +- Confirm anon `rpc('release_escrow_internal', …)` now returns permission denied. + +## Known residual (NOT closed — tracked) + +- Scoped read RPCs (`get_user_balance_transactions`, `get_user_deposit_withdraw_requests`) + are keyed by a non-secret `user_id` (UUID from citizen/visa number). They stop + full-table dumps but are not yet bound to a signed session. Deferred to avoid a + sign-prompt on every passive read; reads leak history only (no fund movement). +- `p2p_fiat_offers` / `p2p_fiat_trades` / `p2p_messages` retain `USING(true)` for + direct client read/write (no server session to bind to). Marking a trade status + moves no funds; all fund movement now flows through service-role edge functions. diff --git a/web/supabase/deploy/apply-migrations.sh b/web/supabase/deploy/apply-migrations.sh new file mode 100755 index 00000000..4eabcb28 --- /dev/null +++ b/web/supabase/deploy/apply-migrations.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# +# apply-migrations.sh — idempotent, tracked migration applier for the self-hosted +# Supabase Postgres. Runs ON the Supabase host (invoked by the deploy-supabase CI +# job over SSH). Applies every versioned migration in $MIGRATIONS_DIR that is not +# yet recorded in supabase_migrations.schema_migrations, in ascending version +# order, each inside a single transaction together with its own tracking-row +# insert — so a failed migration rolls back cleanly and is never half-recorded. +# +# Safe to re-run: already-recorded versions are skipped. Non-versioned files +# (e.g. COMBINED_*.sql consolidated snapshots) are ignored. +# +# Usage: apply-migrations.sh [db_container] +set -euo pipefail + +MIGRATIONS_DIR="${1:?migrations dir required}" +DB_CONTAINER="${2:-supabase-db}" +PSQL=(docker exec -i "$DB_CONTAINER" psql -U postgres -v ON_ERROR_STOP=1 --single-transaction -q) +PSQL_Q=(docker exec -i "$DB_CONTAINER" psql -U postgres -tAq) + +echo "▶ apply-migrations: dir=$MIGRATIONS_DIR container=$DB_CONTAINER" + +# Ensure the tracking schema/table exists (matches the Supabase CLI layout). +"${PSQL[@]}" >/dev/null <<'SQL' +CREATE SCHEMA IF NOT EXISTS supabase_migrations; +CREATE TABLE IF NOT EXISTS supabase_migrations.schema_migrations ( + version text PRIMARY KEY, + statements text[], + name text +); +SQL + +# Snapshot the already-applied versions once. +applied="$("${PSQL_Q[@]}" -c "SELECT version FROM supabase_migrations.schema_migrations;")" +is_applied() { grep -qxF "$1" <<<"$applied"; } + +pending=0 done=0 +# Sort by filename so version order == chronological order (14-digit timestamps +# and zero-padded legacy 0NN prefixes both sort correctly). +for f in $(ls "$MIGRATIONS_DIR"/*.sql 2>/dev/null | sort); do + base="$(basename "$f")" + # Versioned migrations only: _.sql. Skips COMBINED_*, README, etc. + if [[ ! "$base" =~ ^([0-9]+)_(.+)\.sql$ ]]; then + echo " ↷ skip (not a versioned migration): $base" + continue + fi + version="${BASH_REMATCH[1]}" + name="${BASH_REMATCH[2]}" + + if is_applied "$version"; then + continue + fi + + pending=$((pending+1)) + if [[ "${DRY_RUN:-}" == "1" ]]; then + echo " → [dry-run] WOULD apply $version ($name)" + continue + fi + echo " → applying $version ($name)" + # Migration body + its tracking insert in ONE transaction (--single-transaction): + # if the body errors, ON_ERROR_STOP aborts and the whole tx (including the insert) + # rolls back, so the version is never recorded for a failed apply. + # version is always digits and name always [a-z0-9_] (captured from the filename + # regex above), so direct single-quoting is safe — no injection surface. + { + cat "$f" + printf "\nINSERT INTO supabase_migrations.schema_migrations(version,name) VALUES ('%s','%s');\n" \ + "$version" "$name" + } | "${PSQL[@]}" + echo " ✓ applied and recorded $version" + done=$((done+1)) +done + +if [[ $pending -eq 0 ]]; then + echo "✔ up to date — no pending migrations" +else + echo "✔ applied $done migration(s)" +fi diff --git a/web/supabase/functions/__tests__/authorization-flow.test.ts b/web/supabase/functions/__tests__/authorization-flow.test.ts new file mode 100644 index 00000000..919a3941 --- /dev/null +++ b/web/supabase/functions/__tests__/authorization-flow.test.ts @@ -0,0 +1,275 @@ +// Handler-flow authorization tests. +// +// Run: deno test -A web/supabase/functions/__tests__/authorization-flow.test.ts +// +// The edge-function index.ts files call serve() at import time (binding a port +// and constructing a live Supabase client from env), so they cannot be imported +// directly in a unit test. These tests instead re-run each handler's EXACT guard +// sequence against the REAL _shared gate functions + a stateful in-memory Supabase +// mock, proving the composed money-move gates hold: bad signature rejected, a +// verified signer acting on ANOTHER user's id rejected, replayed nonce rejected, +// wrong trade state rejected, the fund DESTINATION is read from the server-side +// trade row, and the confirm-payment compare-and-swap prevents double-release. + +import { assertEquals, assert } from 'https://deno.land/std@0.224.0/assert/mod.ts' +import { Keyring } from 'npm:@pezkuwi/keyring@14.0.25' +import { cryptoWaitReady } from 'npm:@pezkuwi/util-crypto@14.0.25' +import { stringToU8a, u8aToHex, u8aWrapBytes } from 'npm:@pezkuwi/util@14.0.25' + +import { + identityToUUID, + verifyWalletSignature, + buildWithdrawChallenge, + buildConfirmPaymentChallenge, + assertIdentityOwnedByWallet, + consumeNonce, + isFreshTimestamp, +} from '../_shared/identity-auth.ts' + +await cryptoWaitReady() +const kr = new Keyring({ type: 'sr25519' }) +const seller = kr.addFromUri('//Seller') +const attacker = kr.addFromUri('//Attacker') + +// --------------------------------------------------------------------------- +// Stateful in-memory Supabase mock (trades + offers + visa + nonces + rpc) +// --------------------------------------------------------------------------- +interface Trade { + id: string; seller_id: string; buyer_id: string; offer_id: string + crypto_amount: number; status: string +} +interface Offer { id: string; token: string } + +function makeDb(init: { trades?: Trade[]; offers?: Offer[]; visa?: { visa_number: string; wallet_address: string; status: string }[] }) { + const trades = new Map((init.trades ?? []).map(t => [t.id, { ...t }])) + const offers = new Map((init.offers ?? []).map(o => [o.id, o])) + const visa = init.visa ?? [] + const nonces = new Set() + const releaseCalls: any[] = [] + + const client: any = { + releaseCalls, + tradesState: trades, + from(table: string) { + if (table === 'p2p_visa') { + const f: Record = {} + const b: any = { + select() { return b }, eq(c: string, v: string) { f[c] = v; return b }, + async maybeSingle() { + const row = visa.find(r => r.visa_number === f['visa_number'] && r.wallet_address === f['wallet_address'] && r.status === f['status']) + return { data: row ?? null, error: null } + }, + } + return b + } + if (table === 'p2p_challenge_nonces') { + return { async insert(row: { nonce: string }) { if (nonces.has(row.nonce)) return { error: { code: '23505' } }; nonces.add(row.nonce); return { error: null } } } + } + if (table === 'p2p_fiat_trades') { + const f: Record = {} + let updateVals: Record | null = null + const b: any = { + select() { return b }, + update(vals: Record) { updateVals = vals; return b }, + eq(c: string, v: string) { f[c] = v; return b }, + async single() { const t = trades.get(f['id']); return { data: t ?? null, error: t ? null : { message: 'not found' } } }, + // Terminal for the CAS update: .update().eq('id').eq('status').select('id') + then(resolve: (r: any) => void) { + // Only reached for the update+select CAS chain. + const t = trades.get(f['id']) + if (!t || !updateVals) { resolve({ data: [], error: null }); return } + // compare-and-swap: status filter must still match current row. + if (f['status'] !== undefined && t.status !== f['status']) { resolve({ data: [], error: null }); return } + Object.assign(t, updateVals) + resolve({ data: [{ id: t.id }], error: null }) + }, + } + return b + } + if (table === 'p2p_fiat_offers') { + const f: Record = {} + const b: any = { select() { return b }, eq(c: string, v: string) { f[c] = v; return b }, async single() { const o = offers.get(f['id']); return { data: o ?? null, error: o ? null : { message: 'nf' } } } } + return b + } + throw new Error('unexpected table ' + table) + }, + async rpc(fn: string, args: any) { + if (fn === 'release_escrow_internal') { + releaseCalls.push(args) + return { data: { success: true }, error: null } + } + throw new Error('unexpected rpc ' + fn) + }, + } + return client +} + +const getPeopleApiStub = async () => ({ query: { tiki: { citizenNft: async () => ({ isEmpty: true }) } } }) as any + +// --------------------------------------------------------------------------- +// Faithful re-implementation of confirm-payment/index.ts guard sequence +// (kept in lockstep with the edge function, including the CAS fix). +// --------------------------------------------------------------------------- +async function runConfirmPayment(db: any, body: any): Promise<{ status: number; body: any }> { + const J = (status: number, obj: any) => ({ status, body: obj }) + const { tradeId, sellerIdentity, signerAddress, signature, timestamp, nonce } = body + if (!tradeId || !sellerIdentity || !signerAddress || !signature || !nonce || typeof timestamp !== 'number') + return J(401, { success: false, error: 'Missing authorization fields' }) + if (!isFreshTimestamp(timestamp)) return J(401, { success: false, error: 'expired' }) + const challenge = buildConfirmPaymentChallenge({ tradeId, sellerIdentity, signerAddress, timestamp, nonce }) + if (!(await verifyWalletSignature(challenge, signature, signerAddress))) return J(401, { success: false, error: 'Invalid signature' }) + const ownership = await assertIdentityOwnedByWallet(db, sellerIdentity, signerAddress, getPeopleApiStub) + if (!ownership.ok) return J(403, { success: false, error: ownership.error }) + const sellerUserId = await identityToUUID(sellerIdentity) + const { data: trade, error: tradeErr } = await db.from('p2p_fiat_trades').select('*').eq('id', tradeId).single() + if (tradeErr || !trade) return J(404, { success: false, error: 'Trade not found' }) + if (trade.seller_id !== sellerUserId) return J(403, { success: false, error: 'Only the trade seller can release this escrow' }) + if (trade.status !== 'payment_sent') return J(400, { success: false, error: 'not awaiting confirmation' }) + const { data: offer } = await db.from('p2p_fiat_offers').select('token').eq('id', trade.offer_id).single() + if (!offer?.token) return J(400, { success: false, error: 'Offer/token not found' }) + if (!(await consumeNonce(db, nonce, 'confirm_payment'))) return J(401, { success: false, error: 'replay' }) + const nowIso = new Date().toISOString() + const { data: claimed } = await db.from('p2p_fiat_trades') + .update({ status: 'completed', seller_confirmed_at: nowIso, escrow_released_at: nowIso, completed_at: nowIso }) + .eq('id', tradeId).eq('status', 'payment_sent').select('id') + if (!claimed || claimed.length === 0) return J(409, { success: false, error: 'already released' }) + const { data: releaseRes } = await db.rpc('release_escrow_internal', { + p_from_user_id: trade.seller_id, p_to_user_id: trade.buyer_id, p_token: offer.token, + p_amount: trade.crypto_amount, p_reference_type: 'trade', p_reference_id: tradeId, + }) + if (!releaseRes?.success) return J(400, { success: false, error: 'Release failed' }) + return J(200, { success: true, sellerId: trade.seller_id, buyerId: trade.buyer_id, amount: trade.crypto_amount }) +} + +async function setupTrade() { + const sellerId = await identityToUUID('V-100001') + const buyerId = await identityToUUID('V-200002') + const db = makeDb({ + trades: [{ id: 'T1', seller_id: sellerId, buyer_id: buyerId, offer_id: 'O1', crypto_amount: 50, status: 'payment_sent' }], + offers: [{ id: 'O1', token: 'HEZ' }], + visa: [{ visa_number: 'V-100001', wallet_address: seller.address, status: 'active' }], + }) + return { db, sellerId, buyerId } +} + +function sign(pair: any, msg: string) { return u8aToHex(pair.sign(u8aWrapBytes(msg))) } + +// --------------------------------------------------------------------------- +// confirm-payment (escrow RELEASE) tests +// --------------------------------------------------------------------------- +Deno.test('confirm-payment: missing signature -> 401', async () => { + const { db } = await setupTrade() + const r = await runConfirmPayment(db, { tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, timestamp: Date.now(), nonce: 'cp-11112222' }) + assertEquals(r.status, 401) +}) + +Deno.test('confirm-payment: invalid signature -> 401 (no release)', async () => { + const { db } = await setupTrade() + const r = await runConfirmPayment(db, { tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, signature: '0xdeadbeef', timestamp: Date.now(), nonce: 'cp-11112222' }) + assertEquals(r.status, 401) + assertEquals(db.releaseCalls.length, 0) +}) + +Deno.test('confirm-payment: valid signer who does NOT own the seller identity -> 403 (no release)', async () => { + const { db } = await setupTrade() + const ts = Date.now(), nonce = 'cp-attacker1' + // Attacker signs a well-formed challenge for the seller identity, with a valid + // signature over it — but the attacker wallet does not own visa V-100001. + const challenge = buildConfirmPaymentChallenge({ tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: attacker.address, timestamp: ts, nonce }) + const r = await runConfirmPayment(db, { tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: attacker.address, signature: sign(attacker, challenge), timestamp: ts, nonce }) + assertEquals(r.status, 403) + assertEquals(db.releaseCalls.length, 0) +}) + +Deno.test('confirm-payment: verified seller BUT trade not in payment_sent -> 400 (no release)', async () => { + const { db } = await setupTrade() + db.tradesState.get('T1').status = 'pending' + const ts = Date.now(), nonce = 'cp-state001' + const challenge = buildConfirmPaymentChallenge({ tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, timestamp: ts, nonce }) + const r = await runConfirmPayment(db, { tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, signature: sign(seller, challenge), timestamp: ts, nonce }) + assertEquals(r.status, 400) + assertEquals(db.releaseCalls.length, 0) +}) + +Deno.test('confirm-payment: happy path releases to the trade-row buyer_id (destination from server row)', async () => { + const { db, sellerId, buyerId } = await setupTrade() + const ts = Date.now(), nonce = 'cp-happy001' + const challenge = buildConfirmPaymentChallenge({ tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, timestamp: ts, nonce }) + const r = await runConfirmPayment(db, { tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, signature: sign(seller, challenge), timestamp: ts, nonce }) + assertEquals(r.status, 200) + assertEquals(db.releaseCalls.length, 1) + assertEquals(db.releaseCalls[0].p_from_user_id, sellerId) + assertEquals(db.releaseCalls[0].p_to_user_id, buyerId) // funds go to the row's buyer_id + assertEquals(db.releaseCalls[0].p_amount, 50) +}) + +Deno.test('confirm-payment: replayed nonce after success -> 401 (no second release)', async () => { + const { db } = await setupTrade() + const ts = Date.now(), nonce = 'cp-replay01' + const challenge = buildConfirmPaymentChallenge({ tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, timestamp: ts, nonce }) + const body = { tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, signature: sign(seller, challenge), timestamp: ts, nonce } + const r1 = await runConfirmPayment(db, body) + assertEquals(r1.status, 200) + // Reset status so ONLY the nonce guard can stop the replay (proving replay defense). + db.tradesState.get('T1').status = 'payment_sent' + const r2 = await runConfirmPayment(db, body) + assertEquals(r2.status, 401) + assertEquals(db.releaseCalls.length, 1) +}) + +Deno.test('confirm-payment: concurrent double-release (two nonces) -> only ONE release via CAS', async () => { + const { db } = await setupTrade() + const ts = Date.now() + const mk = (nonce: string) => { + const c = buildConfirmPaymentChallenge({ tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, timestamp: ts, nonce }) + return { tradeId: 'T1', sellerIdentity: 'V-100001', signerAddress: seller.address, signature: sign(seller, c), timestamp: ts, nonce } + } + const [a, b] = await Promise.all([runConfirmPayment(db, mk('cp-conc0001')), runConfirmPayment(db, mk('cp-conc0002'))]) + const oks = [a, b].filter(x => x.status === 200) + assertEquals(oks.length, 1) // exactly one succeeds + assertEquals(db.releaseCalls.length, 1) // escrow moved exactly once +}) + +// --------------------------------------------------------------------------- +// process-withdraw auth-gate mirror (server derives user_id; client value ignored) +// --------------------------------------------------------------------------- +async function runWithdrawAuth(db: any, body: any): Promise<{ status: number; userId?: string }> { + const { identityId, signerAddress, signature, timestamp, nonce, token, amount, walletAddress } = body + if (!identityId || !signerAddress || !signature || !nonce || typeof timestamp !== 'number') return { status: 401 } + if (!isFreshTimestamp(timestamp)) return { status: 401 } + const challenge = buildWithdrawChallenge({ identityId, token: String(token ?? ''), amount: Number(amount ?? 0), destination: String(walletAddress ?? ''), signerAddress, timestamp, nonce }) + if (!(await verifyWalletSignature(challenge, signature, signerAddress))) return { status: 401 } + const ownership = await assertIdentityOwnedByWallet(db, identityId, signerAddress, getPeopleApiStub) + if (!ownership.ok) return { status: 403 } + if (!(await consumeNonce(db, nonce, 'withdraw'))) return { status: 401 } + const userId = await identityToUUID(identityId) // server-derived; body.user_id ignored + return { status: 200, userId } +} + +Deno.test('process-withdraw: signer acting on ANOTHER identity is rejected (ownership) ', async () => { + const db = makeDb({ visa: [{ visa_number: 'V-100001', wallet_address: seller.address, status: 'active' }] }) + const ts = Date.now(), nonce = 'wd-otheruser' + // Attacker owns nothing; claims victim identity V-100001. + const challenge = buildWithdrawChallenge({ identityId: 'V-100001', token: 'HEZ', amount: 5, destination: '5EVIL', signerAddress: attacker.address, timestamp: ts, nonce }) + const r = await runWithdrawAuth(db, { identityId: 'V-100001', token: 'HEZ', amount: 5, walletAddress: '5EVIL', signerAddress: attacker.address, signature: u8aToHex(attacker.sign(u8aWrapBytes(challenge))), timestamp: ts, nonce }) + assertEquals(r.status, 403) +}) + +Deno.test('process-withdraw: valid owner passes and user_id is derived from identity (client user_id irrelevant)', async () => { + const db = makeDb({ visa: [{ visa_number: 'V-100001', wallet_address: seller.address, status: 'active' }] }) + const ts = Date.now(), nonce = 'wd-gooduser' + const challenge = buildWithdrawChallenge({ identityId: 'V-100001', token: 'HEZ', amount: 5, destination: '5DEST', signerAddress: seller.address, timestamp: ts, nonce }) + const r = await runWithdrawAuth(db, { identityId: 'V-100001', token: 'HEZ', amount: 5, walletAddress: '5DEST', signerAddress: seller.address, signature: u8aToHex(seller.sign(u8aWrapBytes(challenge))), timestamp: ts, nonce, user_id: 'client-supplied-garbage' }) + assertEquals(r.status, 200) + assertEquals(r.userId, await identityToUUID('V-100001')) +}) + +Deno.test('process-withdraw: signature bound to amount+destination — tampering either invalidates it', async () => { + const db = makeDb({ visa: [{ visa_number: 'V-100001', wallet_address: seller.address, status: 'active' }] }) + const ts = Date.now() + const signed = buildWithdrawChallenge({ identityId: 'V-100001', token: 'HEZ', amount: 5, destination: '5DEST', signerAddress: seller.address, timestamp: ts, nonce: 'wd-tamper01' }) + const sig = u8aToHex(seller.sign(u8aWrapBytes(signed))) + // Attacker keeps the signature but bumps amount + redirects destination. + const r = await runWithdrawAuth(db, { identityId: 'V-100001', token: 'HEZ', amount: 999999, walletAddress: '5EVIL', signerAddress: seller.address, signature: sig, timestamp: ts, nonce: 'wd-tamper01' }) + assertEquals(r.status, 401) +}) diff --git a/web/supabase/functions/_shared/__tests__/identity-auth.test.ts b/web/supabase/functions/_shared/__tests__/identity-auth.test.ts new file mode 100644 index 00000000..ffab3d97 --- /dev/null +++ b/web/supabase/functions/_shared/__tests__/identity-auth.test.ts @@ -0,0 +1,298 @@ +// Unit tests for the fund-custody authorization boundary (_shared/identity-auth.ts). +// +// Run: deno test -A web/supabase/functions/_shared/__tests__/identity-auth.test.ts +// +// These exercise the REAL module (real sr25519 sign/verify via @pezkuwi/*), with +// the Supabase client and People-Chain API mocked. They prove the gates that the +// edge functions compose: signature verification, canonical money-bound +// challenges, identity-ownership, single-use nonces and timestamp freshness. + +import { + assertEquals, + assert, + assertNotEquals, +} from 'https://deno.land/std@0.224.0/assert/mod.ts' +import { Keyring } from 'npm:@pezkuwi/keyring@14.0.25' +import { cryptoWaitReady, encodeAddress } from 'npm:@pezkuwi/util-crypto@14.0.25' +import { stringToU8a, u8aToHex, u8aWrapBytes } from 'npm:@pezkuwi/util@14.0.25' + +import { + verifyWalletSignature, + buildWithdrawChallenge, + buildConfirmPaymentChallenge, + buildLockEscrowChallenge, + buildDepositChallenge, + buildAdminChallenge, + assertIdentityOwnedByWallet, + consumeNonce, + isFreshTimestamp, + generateCitizenNumber, + identityToUUID, + CHALLENGE_MAX_AGE_MS, +} from '../identity-auth.ts' + +// --------------------------------------------------------------------------- +// Test key material +// --------------------------------------------------------------------------- +await cryptoWaitReady() +const kr = new Keyring({ type: 'sr25519' }) +const alice = kr.addFromUri('//Alice') +const bob = kr.addFromUri('//Bob') + +// --------------------------------------------------------------------------- +// verifyWalletSignature +// --------------------------------------------------------------------------- +Deno.test('verifyWalletSignature: valid raw signature passes', async () => { + const msg = 'Pezkuwi P2P Withdrawal\ntoken:HEZ' + const sig = u8aToHex(alice.sign(stringToU8a(msg))) + assert(await verifyWalletSignature(msg, sig, alice.address)) +}) + +Deno.test('verifyWalletSignature: -wrapped signature passes (extension signRaw form)', async () => { + const msg = 'Pezkuwi P2P Confirm Payment\ntrade:abc' + const sig = u8aToHex(alice.sign(u8aWrapBytes(msg))) + assert(await verifyWalletSignature(msg, sig, alice.address)) +}) + +Deno.test('verifyWalletSignature: wrong signer is rejected', async () => { + const msg = 'authorize me' + const sig = u8aToHex(alice.sign(stringToU8a(msg))) // signed by Alice + assertEquals(await verifyWalletSignature(msg, sig, bob.address), false) +}) + +Deno.test('verifyWalletSignature: signature over a DIFFERENT message is rejected (no malleability/reuse)', async () => { + const sig = u8aToHex(alice.sign(stringToU8a('message-A'))) + assertEquals(await verifyWalletSignature('message-B', sig, alice.address), false) +}) + +Deno.test('verifyWalletSignature: empty / malformed signatures return false (no throw)', async () => { + assertEquals(await verifyWalletSignature('m', '', alice.address), false) + assertEquals(await verifyWalletSignature('m', '0x', alice.address), false) + assertEquals(await verifyWalletSignature('m', 'not-hex', alice.address), false) + assertEquals(await verifyWalletSignature('m', '0xdeadbeef', alice.address), false) +}) + +// --------------------------------------------------------------------------- +// Canonical challenge builders — money-param binding +// --------------------------------------------------------------------------- +Deno.test('buildWithdrawChallenge: canonical shape + binds token/amount/destination/nonce', () => { + const base = { identityId: 'V-100001', token: 'HEZ', amount: 5, destination: '5DEST', signerAddress: '5SIGN', timestamp: 111, nonce: 'n-1234abcd' } + const c = buildWithdrawChallenge(base) + assertEquals(c.split('\n')[0], 'Pezkuwi P2P Withdrawal') + assert(c.includes('token:HEZ')) + assert(c.includes('amount:5')) + assert(c.includes('destination:5DEST')) + // Any change to a money field changes the signed bytes: + assertNotEquals(c, buildWithdrawChallenge({ ...base, token: 'PEZ' })) + assertNotEquals(c, buildWithdrawChallenge({ ...base, amount: 6 })) + assertNotEquals(c, buildWithdrawChallenge({ ...base, destination: '5EVIL' })) + assertNotEquals(c, buildWithdrawChallenge({ ...base, nonce: 'n-otherabcd' })) +}) + +Deno.test('buildConfirmPaymentChallenge: binds tradeId + seller identity', () => { + const base = { tradeId: 'T1', sellerIdentity: 'V-1', signerAddress: '5S', timestamp: 1, nonce: 'nnnnnnnn' } + const c = buildConfirmPaymentChallenge(base) + assertEquals(c.split('\n')[0], 'Pezkuwi P2P Confirm Payment') + assertNotEquals(c, buildConfirmPaymentChallenge({ ...base, tradeId: 'T2' })) + assertNotEquals(c, buildConfirmPaymentChallenge({ ...base, sellerIdentity: 'V-2' })) +}) + +Deno.test('buildLockEscrowChallenge: binds token + amount', () => { + const base = { identityId: 'V-1', token: 'HEZ', amount: 10, signerAddress: '5S', timestamp: 1, nonce: 'nnnnnnnn' } + const c = buildLockEscrowChallenge(base) + assertEquals(c.split('\n')[0], 'Pezkuwi P2P Lock Escrow') + assertNotEquals(c, buildLockEscrowChallenge({ ...base, amount: 11 })) + assertNotEquals(c, buildLockEscrowChallenge({ ...base, token: 'PEZ' })) +}) + +Deno.test('challenge prefixes are distinct — a signature for one action cannot satisfy another', () => { + const t = 1, n = 'nnnnnnnn', s = '5S' + const prefixes = new Set([ + buildWithdrawChallenge({ identityId: 'i', token: 'HEZ', amount: 1, destination: 'd', signerAddress: s, timestamp: t, nonce: n }).split('\n')[0], + buildConfirmPaymentChallenge({ tradeId: 'x', sellerIdentity: 'i', signerAddress: s, timestamp: t, nonce: n }).split('\n')[0], + buildLockEscrowChallenge({ identityId: 'i', token: 'HEZ', amount: 1, signerAddress: s, timestamp: t, nonce: n }).split('\n')[0], + buildDepositChallenge({ identityId: 'i', token: 'HEZ', txHash: '0x', signerAddress: s, timestamp: t, nonce: n }).split('\n')[0], + buildAdminChallenge({ action: 'resolve', disputeId: 'd', tradeId: 'x', decision: 'split', adminAddress: s, timestamp: t, nonce: n }).split('\n')[0], + ]) + assertEquals(prefixes.size, 5) // all unique +}) + +Deno.test('end-to-end: a withdraw signature does NOT verify against a tampered amount challenge', async () => { + const p = { identityId: 'V-1', token: 'HEZ', amount: 5, destination: '5DEST', signerAddress: alice.address, timestamp: Date.now(), nonce: 'wd-abcdefgh' } + const sig = u8aToHex(alice.sign(u8aWrapBytes(buildWithdrawChallenge(p)))) + // Attacker replays the signature but bumps the amount -> server rebuilds a + // different challenge -> verification fails. + const tampered = buildWithdrawChallenge({ ...p, amount: 5000 }) + assertEquals(await verifyWalletSignature(tampered, sig, alice.address), false) + // sanity: the untampered challenge does verify + assert(await verifyWalletSignature(buildWithdrawChallenge(p), sig, alice.address)) +}) + +// --------------------------------------------------------------------------- +// identityToUUID / generateCitizenNumber +// --------------------------------------------------------------------------- +Deno.test('identityToUUID: deterministic + distinct per identity', async () => { + const a = await identityToUUID('V-100001') + const b = await identityToUUID('V-100001') + const c = await identityToUUID('V-100002') + assertEquals(a, b) + assertNotEquals(a, c) + assert(/^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(a), 'valid v5 uuid shape') +}) + +Deno.test('generateCitizenNumber: deterministic 6-digit tied to (address, collection, item)', () => { + const n = generateCitizenNumber(alice.address, 42, 7) + assertEquals(n, generateCitizenNumber(alice.address, 42, 7)) + assertEquals(n.length, 6) + // Different owner or item generally yields a different number. + assertNotEquals(generateCitizenNumber(alice.address, 42, 7), generateCitizenNumber(bob.address, 42, 7)) +}) + +// --------------------------------------------------------------------------- +// Mock Supabase client +// --------------------------------------------------------------------------- +type VisaRow = { visa_number: string; wallet_address: string; status: string } + +function makeSupabaseMock(opts: { visaRows?: VisaRow[]; nonceStore?: Set } = {}) { + const visaRows = opts.visaRows ?? [] + const nonceStore = opts.nonceStore ?? new Set() + return { + nonceStore, + from(table: string) { + if (table === 'p2p_visa') { + const filters: Record = {} + const builder: any = { + select() { return builder }, + eq(col: string, val: string) { filters[col] = val; return builder }, + async maybeSingle() { + const row = visaRows.find(r => + r.visa_number === filters['visa_number'] && + r.wallet_address === filters['wallet_address'] && + r.status === filters['status']) + return { data: row ?? null, error: null } + }, + } + return builder + } + if (table === 'p2p_challenge_nonces') { + return { + async insert(row: { nonce: string; purpose: string }) { + if (nonceStore.has(row.nonce)) { + return { error: { code: '23505', message: 'duplicate key value violates unique constraint' } } + } + nonceStore.add(row.nonce) + return { error: null } + }, + } + } + throw new Error(`unexpected table ${table}`) + }, + } as any +} + +// People-chain API mock. `ownedItem === null` => wallet owns no citizen NFT. +function makePeopleApi(ownedItem: number | null) { + const res = ownedItem === null + ? { isEmpty: true } + : { isEmpty: false, isSome: true, unwrap: () => ({ toNumber: () => ownedItem }) } + return async () => ({ query: { tiki: { citizenNft: async (_addr: string) => res } } }) as any +} + +// --------------------------------------------------------------------------- +// assertIdentityOwnedByWallet — visa +// --------------------------------------------------------------------------- +Deno.test('ownership(visa): active visa bound to signer -> ok', async () => { + const sb = makeSupabaseMock({ visaRows: [{ visa_number: 'V-100001', wallet_address: alice.address, status: 'active' }] }) + const r = await assertIdentityOwnedByWallet(sb, 'V-100001', alice.address, makePeopleApi(null)) + assertEquals(r.ok, true) + assertEquals(r.kind, 'visa') +}) + +Deno.test('ownership(visa): signer B cannot act on identity A (visa bound to A) -> rejected', async () => { + const sb = makeSupabaseMock({ visaRows: [{ visa_number: 'V-100001', wallet_address: alice.address, status: 'active' }] }) + const r = await assertIdentityOwnedByWallet(sb, 'V-100001', bob.address, makePeopleApi(null)) + assertEquals(r.ok, false) +}) + +Deno.test('ownership(visa): inactive visa -> rejected', async () => { + const sb = makeSupabaseMock({ visaRows: [{ visa_number: 'V-100001', wallet_address: alice.address, status: 'revoked' }] }) + const r = await assertIdentityOwnedByWallet(sb, 'V-100001', alice.address, makePeopleApi(null)) + assertEquals(r.ok, false) +}) + +// --------------------------------------------------------------------------- +// assertIdentityOwnedByWallet — citizen +// --------------------------------------------------------------------------- +Deno.test('ownership(citizen): chain owns item + derivation matches -> ok', async () => { + const item = 7 + const six = generateCitizenNumber(alice.address, 42, item) + const sb = makeSupabaseMock() + const r = await assertIdentityOwnedByWallet(sb, `#42-${item}-${six}`, alice.address, makePeopleApi(item)) + assertEquals(r.ok, true) + assertEquals(r.kind, 'citizen') +}) + +Deno.test('ownership(citizen): claimed item != chain-owned item -> rejected (no NFT theft)', async () => { + const claimedItem = 7 + const six = generateCitizenNumber(alice.address, 42, claimedItem) + const sb = makeSupabaseMock() + // Chain says alice actually owns item 9, not the claimed 7. + const r = await assertIdentityOwnedByWallet(sb, `#42-${claimedItem}-${six}`, alice.address, makePeopleApi(9)) + assertEquals(r.ok, false) +}) + +Deno.test('ownership(citizen): correct item but forged 6-digit -> rejected', async () => { + const item = 7 + const sb = makeSupabaseMock() + const r = await assertIdentityOwnedByWallet(sb, `#42-${item}-000000`, alice.address, makePeopleApi(item)) + assertEquals(r.ok, false) +}) + +Deno.test('ownership(citizen): wallet owns no NFT -> rejected', async () => { + const item = 7 + const six = generateCitizenNumber(alice.address, 42, item) + const sb = makeSupabaseMock() + const r = await assertIdentityOwnedByWallet(sb, `#42-${item}-${six}`, alice.address, makePeopleApi(null)) + assertEquals(r.ok, false) +}) + +Deno.test('ownership: malformed identity / wrong collection -> rejected', async () => { + const sb = makeSupabaseMock() + assertEquals((await assertIdentityOwnedByWallet(sb, 'garbage', alice.address, makePeopleApi(1))).ok, false) + assertEquals((await assertIdentityOwnedByWallet(sb, '#1-2-345678', alice.address, makePeopleApi(2))).ok, false) // collection != 42 + assertEquals((await assertIdentityOwnedByWallet(sb, '', alice.address, makePeopleApi(1))).ok, false) +}) + +// --------------------------------------------------------------------------- +// consumeNonce — single use / replay +// --------------------------------------------------------------------------- +Deno.test('consumeNonce: first use ok, second use (replay) rejected', async () => { + const sb = makeSupabaseMock() + assertEquals(await consumeNonce(sb, 'wd-11112222', 'withdraw'), true) + assertEquals(await consumeNonce(sb, 'wd-11112222', 'withdraw'), false) // replay +}) + +Deno.test('consumeNonce: concurrent double-spend of one nonce yields exactly one success', async () => { + const sb = makeSupabaseMock() + const [a, b] = await Promise.all([ + consumeNonce(sb, 'wd-race0001', 'withdraw'), + consumeNonce(sb, 'wd-race0001', 'withdraw'), + ]) + assertEquals([a, b].filter(Boolean).length, 1) +}) + +Deno.test('consumeNonce: too-short nonce rejected', async () => { + const sb = makeSupabaseMock() + assertEquals(await consumeNonce(sb, 'short', 'withdraw'), false) +}) + +// --------------------------------------------------------------------------- +// isFreshTimestamp +// --------------------------------------------------------------------------- +Deno.test('isFreshTimestamp: now is fresh; expired and non-finite rejected', () => { + assert(isFreshTimestamp(Date.now())) + assertEquals(isFreshTimestamp(Date.now() - CHALLENGE_MAX_AGE_MS - 5000), false) + assertEquals(isFreshTimestamp(Date.now() + 120_000), false) // beyond 60s skew + assertEquals(isFreshTimestamp(NaN), false) + assertEquals(isFreshTimestamp(Infinity), false) +}) diff --git a/web/supabase/functions/_shared/identity-auth.ts b/web/supabase/functions/_shared/identity-auth.ts new file mode 100644 index 00000000..a58cc1cc --- /dev/null +++ b/web/supabase/functions/_shared/identity-auth.ts @@ -0,0 +1,327 @@ +// _shared/identity-auth.ts +// +// Server-side identity + wallet-signature authorization for fund-moving edge +// functions (withdrawals, deposits). This is the security boundary that binds +// an incoming request to a real, cryptographically-proven principal: +// +// 1. The caller signs a canonical challenge with their Substrate wallet. +// 2. We verify that signature server-side (sr25519/ed25519) -> proves control +// of `signerAddress`. +// 3. We prove `signerAddress` OWNS the claimed identity (citizen number / visa): +// - citizen -> People Chain `tiki.citizenNft(signerAddress)` + the +// deterministic 6-digit derivation must match the claimed number. +// - visa -> `p2p_visa` row (wallet_address == signerAddress, active). +// 4. Only then do we derive `userId = identityToUUID(identityId)` SERVER-SIDE. +// +// The client-supplied `userId` is NEVER trusted for authorization. Every +// caller can only ever act on the balance of the identity their wallet owns. + +import { signatureVerify, cryptoWaitReady } from 'npm:@pezkuwi/util-crypto@14.0.25' +import { stringToU8a, u8aWrapBytes } from 'npm:@pezkuwi/util@14.0.25' +import type { ApiPromise } from 'npm:@pezkuwi/api@16.5.36' +import type { SupabaseClient } from 'npm:@supabase/supabase-js@2' + +// Max age of a signed challenge (replay window). Nonce dedup (see caller) +// provides exact-once semantics; this bounds how long a captured signature +// could even be presented. +export const CHALLENGE_MAX_AGE_MS = 5 * 60 * 1000 // 5 minutes + +// UUID v5 namespace (RFC 4122 DNS namespace) — MUST match shared/lib/identity.ts +const UUID_V5_NAMESPACE = '6ba7b810-9dad-11d1-80b4-00c04fd430c8' + +/** + * Deterministic UUID v5 from a citizen/visa number. Identical algorithm to + * shared/lib/identity.ts (client) and verify-deposit — the value MUST match so + * balances resolve to the same row everywhere. + */ +export async function identityToUUID(identityId: string): Promise { + const namespaceHex = UUID_V5_NAMESPACE.replace(/-/g, '') + const namespaceBytes = new Uint8Array(16) + for (let i = 0; i < 16; i++) { + namespaceBytes[i] = parseInt(namespaceHex.substr(i * 2, 2), 16) + } + const nameBytes = new TextEncoder().encode(identityId) + const combined = new Uint8Array(namespaceBytes.length + nameBytes.length) + combined.set(namespaceBytes) + combined.set(nameBytes, namespaceBytes.length) + + const hashBuffer = await crypto.subtle.digest('SHA-1', combined) + const h = new Uint8Array(hashBuffer) + h[6] = (h[6] & 0x0f) | 0x50 + h[8] = (h[8] & 0x3f) | 0x80 + const hex = Array.from(h.slice(0, 16)).map(b => b.toString(16).padStart(2, '0')).join('') + return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}` +} + +/** + * Deterministic 6-digit citizen number derivation. Identical algorithm to + * shared/lib/tiki.ts generateCitizenNumber — used to bind a citizen number to + * the wallet that owns the NFT. + */ +export function generateCitizenNumber(ownerAddress: string, collectionId: number, itemId: number): string { + let hash = 0 + for (let i = 0; i < ownerAddress.length; i++) { + hash = ((hash << 5) - hash) + ownerAddress.charCodeAt(i) + hash = hash & hash + } + hash += collectionId * 1000 + itemId + hash = Math.abs(hash) + return (hash % 1000000).toString().padStart(6, '0') +} + +/** + * Verify a wallet signature over `message`. Handles both the raw-bytes form and + * the `...` wrapped form that Polkadot-style extensions apply to + * signRaw payloads, so extension, WalletConnect and native signers all verify. + */ +export async function verifyWalletSignature( + message: string, + signature: string, + signerAddress: string +): Promise { + try { + await cryptoWaitReady() + const raw = stringToU8a(message) + const wrapped = u8aWrapBytes(message) + for (const candidate of [raw, wrapped]) { + const res = signatureVerify(candidate, signature, signerAddress) + if (res.isValid) return true + } + return false + } catch (_e) { + return false + } +} + +/** + * Canonical challenge string for a withdrawal. MUST be byte-identical to what + * the client builds and signs (see shared/lib/p2p-fiat.ts buildWithdrawChallenge). + */ +export function buildWithdrawChallenge(p: { + identityId: string + token: string + amount: number + destination: string + signerAddress: string + timestamp: number + nonce: string +}): string { + return [ + 'Pezkuwi P2P Withdrawal', + `identity:${p.identityId}`, + `token:${p.token}`, + `amount:${p.amount}`, + `destination:${p.destination}`, + `signer:${p.signerAddress}`, + `timestamp:${p.timestamp}`, + `nonce:${p.nonce}`, + ].join('\n') +} + +/** + * Canonical challenge string for a deposit-credit. Binds the on-chain tx and the + * identity being credited to the wallet that signs. + */ +export function buildDepositChallenge(p: { + identityId: string + token: string + txHash: string + signerAddress: string + timestamp: number + nonce: string +}): string { + return [ + 'Pezkuwi P2P Deposit', + `identity:${p.identityId}`, + `token:${p.token}`, + `tx:${p.txHash}`, + `signer:${p.signerAddress}`, + `timestamp:${p.timestamp}`, + `nonce:${p.nonce}`, + ].join('\n') +} + +/** + * Canonical challenge for a seller confirming payment / releasing escrow. + * MUST be byte-identical to the client (shared/lib/p2p-fiat.ts). + */ +export function buildConfirmPaymentChallenge(p: { + tradeId: string + sellerIdentity: string + signerAddress: string + timestamp: number + nonce: string +}): string { + return [ + 'Pezkuwi P2P Confirm Payment', + `trade:${p.tradeId}`, + `identity:${p.sellerIdentity}`, + `signer:${p.signerAddress}`, + `timestamp:${p.timestamp}`, + `nonce:${p.nonce}`, + ].join('\n') +} + +/** + * Canonical challenge for locking one's OWN balance into escrow (offer create). + * MUST be byte-identical to the client (shared/lib/p2p-fiat.ts). + */ +export function buildLockEscrowChallenge(p: { + identityId: string + token: string + amount: number + signerAddress: string + timestamp: number + nonce: string +}): string { + return [ + 'Pezkuwi P2P Lock Escrow', + `identity:${p.identityId}`, + `token:${p.token}`, + `amount:${p.amount}`, + `signer:${p.signerAddress}`, + `timestamp:${p.timestamp}`, + `nonce:${p.nonce}`, + ].join('\n') +} + +/** + * Canonical challenge string for a privileged admin action (dispute claim / + * resolve). MUST be byte-identical to the client (DisputeResolutionPanel). + */ +export function buildAdminChallenge(p: { + action: string + disputeId: string + tradeId: string + decision: string + adminAddress: string + timestamp: number + nonce: string +}): string { + return [ + 'Pezkuwi P2P Admin Action', + `action:${p.action}`, + `dispute:${p.disputeId}`, + `trade:${p.tradeId}`, + `decision:${p.decision}`, + `admin:${p.adminAddress}`, + `timestamp:${p.timestamp}`, + `nonce:${p.nonce}`, + ].join('\n') +} + +export interface OwnershipResult { + ok: boolean + error?: string + /** 'citizen' | 'visa' */ + kind?: 'citizen' | 'visa' +} + +/** + * Prove that `signerAddress` owns `identityId`. + * + * - Visa numbers ("V-XXXXXX"): must have an active p2p_visa row bound to the + * signer's wallet_address. + * - Citizen numbers ("#42--<6digit>"): the People Chain must report that + * signerAddress owns the citizen NFT with that item id, and the deterministic + * 6-digit derivation for (signerAddress, 42, itemId) must equal the claimed + * 6-digit — i.e. the number is cryptographically tied to the wallet. + * + * `peopleApi` may be lazily created by the caller; it is only required for + * citizen identities. + */ +export async function assertIdentityOwnedByWallet( + serviceClient: SupabaseClient, + identityId: string, + signerAddress: string, + getPeopleApi: () => Promise +): Promise { + if (!identityId || !signerAddress) { + return { ok: false, error: 'Missing identity or signer' } + } + + // ---- Visa identity ---- + if (identityId.startsWith('V-')) { + const { data: visa, error } = await serviceClient + .from('p2p_visa') + .select('visa_number, wallet_address, status') + .eq('visa_number', identityId) + .eq('wallet_address', signerAddress) + .eq('status', 'active') + .maybeSingle() + + if (error) return { ok: false, error: 'Visa lookup failed' } + if (!visa) return { ok: false, error: 'Signing wallet does not own this visa identity' } + return { ok: true, kind: 'visa' } + } + + // ---- Citizen identity: "#--<6digit>" ---- + const clean = identityId.trim().replace('#', '') + const parts = clean.split('-') + if (parts.length !== 3) { + return { ok: false, error: 'Invalid citizen identity format' } + } + const collectionId = parseInt(parts[0], 10) + const itemId = parseInt(parts[1], 10) + const providedSixDigit = parts[2] + if (isNaN(collectionId) || isNaN(itemId) || providedSixDigit.length !== 6) { + return { ok: false, error: 'Invalid citizen identity format' } + } + if (collectionId !== 42) { + return { ok: false, error: 'Invalid citizen collection' } + } + + let peopleApi: ApiPromise + try { + peopleApi = await getPeopleApi() + } catch (_e) { + return { ok: false, error: 'People Chain unavailable for identity verification' } + } + + try { + if (!peopleApi.query?.tiki?.citizenNft) { + return { ok: false, error: 'Citizen NFT pallet unavailable' } + } + const res: any = await peopleApi.query.tiki.citizenNft(signerAddress) + if (res.isEmpty || (res.isSome === false && typeof res.isSome === 'boolean')) { + return { ok: false, error: 'Signing wallet owns no citizen NFT' } + } + const actualItemId = res.isSome ? res.unwrap().toNumber() : (typeof res.toNumber === 'function' ? res.toNumber() : null) + if (actualItemId === null || actualItemId !== itemId) { + return { ok: false, error: 'Citizen NFT does not match signing wallet' } + } + const expected = generateCitizenNumber(signerAddress, collectionId, itemId) + if (expected !== providedSixDigit) { + return { ok: false, error: 'Citizen number does not match signing wallet' } + } + return { ok: true, kind: 'citizen' } + } catch (_e) { + return { ok: false, error: 'Citizen identity verification failed' } + } +} + +/** + * Atomically record a used challenge nonce for replay protection. Returns false + * if the nonce was already used (replay) — caller MUST reject in that case. + * Requires table public.p2p_challenge_nonces(nonce text primary key, ...). + */ +export async function consumeNonce( + serviceClient: SupabaseClient, + nonce: string, + purpose: string +): Promise { + if (!nonce || nonce.length < 8) return false + const { error } = await serviceClient + .from('p2p_challenge_nonces') + .insert({ nonce, purpose }) + // Unique violation => already used => replay. + if (error) return false + return true +} + +/** Basic timestamp freshness check for a signed challenge. */ +export function isFreshTimestamp(timestamp: number): boolean { + if (!Number.isFinite(timestamp)) return false + const age = Date.now() - timestamp + return age >= -60_000 && age <= CHALLENGE_MAX_AGE_MS // allow 60s clock skew +} diff --git a/web/supabase/functions/confirm-payment/index.ts b/web/supabase/functions/confirm-payment/index.ts new file mode 100644 index 00000000..edc7c3e6 --- /dev/null +++ b/web/supabase/functions/confirm-payment/index.ts @@ -0,0 +1,176 @@ +// confirm-payment Edge Function +// +// Seller-authorized escrow RELEASE (the money-OUT path that was previously +// callable by anyone holding the public anon key via rpc('release_escrow_internal')). +// +// Authorization chain: +// 1. Seller signs a canonical challenge with their wallet. +// 2. verifyWalletSignature (raw + ) proves control of `signerAddress`. +// 3. assertIdentityOwnedByWallet proves the wallet owns the claimed seller +// identity (citizen NFT / active visa). +// 4. The derived seller user_id MUST equal the trade's seller_id, and the +// trade MUST be in 'payment_sent'. +// 5. Single-use nonce (replay protection). +// 6. Only then release_escrow_internal(seller -> buyer) runs with the service +// role, atomically with the trade status update. + +import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' +import { createClient } from 'npm:@supabase/supabase-js@2' +import { ApiPromise, WsProvider } from 'npm:@pezkuwi/api@16.5.36' +import { + identityToUUID, + verifyWalletSignature, + buildConfirmPaymentChallenge, + assertIdentityOwnedByWallet, + consumeNonce, + isFreshTimestamp, +} from '../_shared/identity-auth.ts' + +const ALLOWED_ORIGINS = [ + 'https://app.pezkuwichain.io', + 'https://www.pezkuwichain.io', + 'https://pezkuwichain.io', +] + +function getCorsHeaders(origin: string | null) { + const allowedOrigin = origin && ALLOWED_ORIGINS.includes(origin) ? origin : ALLOWED_ORIGINS[0] + return { + 'Access-Control-Allow-Origin': allowedOrigin, + 'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type', + 'Access-Control-Allow-Credentials': 'true', + } +} + +const PEOPLE_RPC_ENDPOINT = Deno.env.get('PEOPLE_RPC_ENDPOINT') || 'wss://people-rpc.pezkuwichain.io' +let peopleApiInstance: ApiPromise | null = null +async function getPeopleApi(): Promise { + if (peopleApiInstance && peopleApiInstance.isConnected) return peopleApiInstance + peopleApiInstance = await ApiPromise.create({ provider: new WsProvider(PEOPLE_RPC_ENDPOINT) }) + return peopleApiInstance +} + +interface Body { + tradeId?: string + sellerIdentity?: string + signerAddress?: string + signature?: string + timestamp?: number + nonce?: string +} + +serve(async (req) => { + const corsHeaders = getCorsHeaders(req.headers.get('Origin')) + const json = (status: number, obj: unknown) => + new Response(JSON.stringify(obj), { status, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }) + + if (req.method === 'OPTIONS') return new Response(null, { headers: corsHeaders }) + + try { + const serviceClient = createClient(Deno.env.get('SUPABASE_URL')!, Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!) + const { tradeId, sellerIdentity, signerAddress, signature, timestamp, nonce }: Body = await req.json() + + if (!tradeId || !sellerIdentity || !signerAddress || !signature || !nonce || typeof timestamp !== 'number') { + return json(401, { success: false, error: 'Missing authorization fields' }) + } + if (!isFreshTimestamp(timestamp)) { + return json(401, { success: false, error: 'Authorization challenge expired. Please retry.' }) + } + + // 1) Verify signature + const challenge = buildConfirmPaymentChallenge({ tradeId, sellerIdentity, signerAddress, timestamp, nonce }) + if (!(await verifyWalletSignature(challenge, signature, signerAddress))) { + return json(401, { success: false, error: 'Invalid signature' }) + } + + // 2) Prove the signer owns the claimed seller identity + const ownership = await assertIdentityOwnedByWallet(serviceClient, sellerIdentity, signerAddress, getPeopleApi) + if (!ownership.ok) { + return json(403, { success: false, error: ownership.error || 'Identity ownership verification failed' }) + } + const sellerUserId = await identityToUUID(sellerIdentity) + + // 3) Load trade and enforce it belongs to this seller and is releasable + const { data: trade, error: tradeErr } = await serviceClient + .from('p2p_fiat_trades') + .select('id, seller_id, buyer_id, offer_id, crypto_amount, status') + .eq('id', tradeId) + .single() + if (tradeErr || !trade) return json(404, { success: false, error: 'Trade not found' }) + if (trade.seller_id !== sellerUserId) { + return json(403, { success: false, error: 'Only the trade seller can release this escrow' }) + } + if (trade.status !== 'payment_sent') { + return json(400, { success: false, error: `Trade is not awaiting confirmation (status: ${trade.status})` }) + } + + // 4) Resolve token from offer + const { data: offer } = await serviceClient + .from('p2p_fiat_offers') + .select('token') + .eq('id', trade.offer_id) + .single() + if (!offer?.token) return json(400, { success: false, error: 'Offer/token not found' }) + + // 5) Consume nonce (single use) + if (!(await consumeNonce(serviceClient, nonce, 'confirm_payment'))) { + return json(401, { success: false, error: 'Authorization already used (replay detected)' }) + } + + // 6) Atomically CLAIM the payment_sent -> completed transition BEFORE moving + // any funds. This is the concurrency lock: only one caller can flip the + // row out of 'payment_sent', so two concurrent (differently-nonced) release + // requests for the same trade cannot both reach release_escrow_internal and + // double-spend escrow that was locked for other trades on the same offer. + const nowIso = new Date().toISOString() + const { data: claimed, error: claimErr } = await serviceClient + .from('p2p_fiat_trades') + .update({ + seller_confirmed_at: nowIso, + escrow_released_at: nowIso, + status: 'completed', + completed_at: nowIso, + }) + .eq('id', tradeId) + .eq('status', 'payment_sent') // compare-and-swap guard + .select('id') + if (claimErr) return json(500, { success: false, error: 'Failed to claim trade for release' }) + if (!claimed || claimed.length === 0) { + // Someone (or a concurrent request) already moved it out of payment_sent. + return json(409, { success: false, error: 'Trade is no longer awaiting confirmation (already released?)' }) + } + + // 7) Release escrow (service role). If it fails, revert the claim so the trade + // can be retried / disputed rather than being stuck "completed" with no move. + const { data: releaseRes, error: releaseErr } = await serviceClient.rpc('release_escrow_internal', { + p_from_user_id: trade.seller_id, + p_to_user_id: trade.buyer_id, + p_token: offer.token, + p_amount: trade.crypto_amount, + p_reference_type: 'trade', + p_reference_id: tradeId, + }) + const parsed = typeof releaseRes === 'string' ? JSON.parse(releaseRes) : releaseRes + if (releaseErr || !parsed?.success) { + await serviceClient + .from('p2p_fiat_trades') + .update({ status: 'payment_sent', seller_confirmed_at: null, escrow_released_at: null, completed_at: null }) + .eq('id', tradeId) + return json(releaseErr ? 500 : 400, { + success: false, + error: releaseErr?.message || parsed?.error || 'Release failed', + }) + } + + return json(200, { + success: true, + tradeId, + sellerId: trade.seller_id, + buyerId: trade.buyer_id, + token: offer.token, + amount: trade.crypto_amount, + }) + } catch (error) { + console.error('confirm-payment error:', error) + return json(500, { success: false, error: 'Internal server error' }) + } +}) diff --git a/web/supabase/functions/lock-escrow/index.ts b/web/supabase/functions/lock-escrow/index.ts new file mode 100644 index 00000000..115ed7d0 --- /dev/null +++ b/web/supabase/functions/lock-escrow/index.ts @@ -0,0 +1,115 @@ +// lock-escrow Edge Function +// +// Locks a caller's OWN available balance into escrow (used by offer creation). +// lock_escrow_internal only ever moves the caller's own funds available->locked, +// so it is not a theft vector — but an anon caller could previously lock a +// VICTIM's balance (griefing/DoS on their funds). This gates it so a caller can +// only ever lock the balance of the identity their wallet owns. +// +// Authorization: wallet signature -> identity ownership -> derived user_id -> +// lock_escrow_internal with the service role. + +import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' +import { createClient } from 'npm:@supabase/supabase-js@2' +import { ApiPromise, WsProvider } from 'npm:@pezkuwi/api@16.5.36' +import { + identityToUUID, + verifyWalletSignature, + buildLockEscrowChallenge, + assertIdentityOwnedByWallet, + consumeNonce, + isFreshTimestamp, +} from '../_shared/identity-auth.ts' + +const ALLOWED_ORIGINS = [ + 'https://app.pezkuwichain.io', + 'https://www.pezkuwichain.io', + 'https://pezkuwichain.io', +] + +function getCorsHeaders(origin: string | null) { + const allowedOrigin = origin && ALLOWED_ORIGINS.includes(origin) ? origin : ALLOWED_ORIGINS[0] + return { + 'Access-Control-Allow-Origin': allowedOrigin, + 'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type', + 'Access-Control-Allow-Credentials': 'true', + } +} + +const PEOPLE_RPC_ENDPOINT = Deno.env.get('PEOPLE_RPC_ENDPOINT') || 'wss://people-rpc.pezkuwichain.io' +let peopleApiInstance: ApiPromise | null = null +async function getPeopleApi(): Promise { + if (peopleApiInstance && peopleApiInstance.isConnected) return peopleApiInstance + peopleApiInstance = await ApiPromise.create({ provider: new WsProvider(PEOPLE_RPC_ENDPOINT) }) + return peopleApiInstance +} + +interface Body { + identityId?: string + token?: 'HEZ' | 'PEZ' + amount?: number + signerAddress?: string + signature?: string + timestamp?: number + nonce?: string +} + +serve(async (req) => { + const corsHeaders = getCorsHeaders(req.headers.get('Origin')) + const json = (status: number, obj: unknown) => + new Response(JSON.stringify(obj), { status, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }) + + if (req.method === 'OPTIONS') return new Response(null, { headers: corsHeaders }) + + try { + const serviceClient = createClient(Deno.env.get('SUPABASE_URL')!, Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!) + const { identityId, token, amount, signerAddress, signature, timestamp, nonce }: Body = await req.json() + + if (!identityId || !token || !signerAddress || !signature || !nonce || typeof timestamp !== 'number') { + return json(401, { success: false, error: 'Missing authorization fields' }) + } + if (!['HEZ', 'PEZ'].includes(token)) { + return json(400, { success: false, error: 'Invalid token' }) + } + const amt = Number(amount) + if (!Number.isFinite(amt) || amt <= 0) { + return json(400, { success: false, error: 'Amount must be greater than 0' }) + } + if (!isFreshTimestamp(timestamp)) { + return json(401, { success: false, error: 'Authorization challenge expired. Please retry.' }) + } + + // 1) Verify signature over the exact lock intent + const challenge = buildLockEscrowChallenge({ identityId, token, amount: amt, signerAddress, timestamp, nonce }) + if (!(await verifyWalletSignature(challenge, signature, signerAddress))) { + return json(401, { success: false, error: 'Invalid signature' }) + } + + // 2) Prove the signer owns the identity whose balance is being locked + const ownership = await assertIdentityOwnedByWallet(serviceClient, identityId, signerAddress, getPeopleApi) + if (!ownership.ok) { + return json(403, { success: false, error: ownership.error || 'Identity ownership verification failed' }) + } + const userId = await identityToUUID(identityId) + + // 3) Replay protection + if (!(await consumeNonce(serviceClient, nonce, 'lock_escrow'))) { + return json(401, { success: false, error: 'Authorization already used (replay detected)' }) + } + + // 4) Lock the caller's OWN balance (service role) + const { data: lockRes, error: lockErr } = await serviceClient.rpc('lock_escrow_internal', { + p_user_id: userId, + p_token: token, + p_amount: amt, + }) + if (lockErr) return json(500, { success: false, error: lockErr.message || 'Lock failed' }) + const parsed = typeof lockRes === 'string' ? JSON.parse(lockRes) : lockRes + if (!parsed?.success) return json(400, { success: false, error: parsed?.error || 'Lock failed' }) + + return json(200, { success: true, userId, token, amount: amt, ...parsed }) + } catch (error) { + console.error('lock-escrow error:', error) + return json(500, { success: false, error: 'Internal server error' }) + } +}) diff --git a/web/supabase/functions/process-withdraw/index.ts b/web/supabase/functions/process-withdraw/index.ts index 0cf7dc3c..0b8c322f 100644 --- a/web/supabase/functions/process-withdraw/index.ts +++ b/web/supabase/functions/process-withdraw/index.ts @@ -6,6 +6,14 @@ import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' import { createClient } from 'npm:@supabase/supabase-js@2' import { ApiPromise, WsProvider, Keyring } from 'npm:@pezkuwi/api@16.5.36' import { cryptoWaitReady } from 'npm:@pezkuwi/util-crypto@14.0.25' +import { + identityToUUID, + verifyWalletSignature, + buildWithdrawChallenge, + assertIdentityOwnedByWallet, + consumeNonce, + isFreshTimestamp, +} from '../_shared/identity-auth.ts' // Allowed origins for CORS const ALLOWED_ORIGINS = [ @@ -35,6 +43,9 @@ const DECIMALS = 12 // PEZ asset ID const PEZ_ASSET_ID = 1 +// People Chain endpoint — required to verify citizen NFT ownership server-side +const PEOPLE_RPC_ENDPOINT = Deno.env.get('PEOPLE_RPC_ENDPOINT') || 'wss://people-rpc.pezkuwichain.io' + // Minimum withdrawal amounts const MIN_WITHDRAW = { HEZ: 1, @@ -49,10 +60,19 @@ const WITHDRAW_FEE = { interface WithdrawRequest { requestId?: string // If processing specific request - userId: string // Identity-based UUID (from citizen/visa number) + + // ---- Authorization (all required) ---- + // The caller proves control of a wallet that OWNS `identityId`. The user_id + // is derived server-side from identityId; a client-supplied user_id is IGNORED. + identityId?: string // Citizen number (#42--<6d>) or visa (V-XXXXXX) + signerAddress?: string // Wallet that signed the challenge + signature?: string // Signature over the canonical withdraw challenge + timestamp?: number // ms epoch, must be fresh + nonce?: string // single-use, replay-protected + token?: 'HEZ' | 'PEZ' amount?: number - walletAddress?: string + walletAddress?: string // Withdrawal destination (bound into the signature) } // Cache API connection @@ -68,6 +88,18 @@ async function getApi(): Promise { return apiInstance } +// Cache People Chain connection (citizen NFT ownership verification) +let peopleApiInstance: ApiPromise | null = null + +async function getPeopleApi(): Promise { + if (peopleApiInstance && peopleApiInstance.isConnected) { + return peopleApiInstance + } + const provider = new WsProvider(PEOPLE_RPC_ENDPOINT) + peopleApiInstance = await ApiPromise.create({ provider }) + return peopleApiInstance +} + // Send tokens from hot wallet async function sendTokens( api: ApiPromise, @@ -190,7 +222,8 @@ serve(async (req) => { } try { - // Get authorization header + // Get authorization header (transport-level only — NOT the authz boundary). + // Real authorization is the wallet signature + identity-ownership proof below. const authHeader = req.headers.get('Authorization') if (!authHeader) { return new Response( @@ -218,16 +251,74 @@ serve(async (req) => { // Parse request body const body: WithdrawRequest = await req.json() - const { userId } = body + const { identityId, signerAddress, signature, timestamp, nonce } = body let { requestId, token, amount, walletAddress } = body - if (!userId) { + // ===================================================== + // OBJECT-LEVEL AUTHORIZATION (the security boundary) + // ===================================================== + // 1) Require a complete signed challenge. + if (!identityId || !signerAddress || !signature || !nonce || typeof timestamp !== 'number') { return new Response( - JSON.stringify({ success: false, error: 'Missing required field: userId' }), - { status: 400, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } + JSON.stringify({ success: false, error: 'Missing authorization (identityId, signerAddress, signature, timestamp, nonce required)' }), + { status: 401, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } ) } + // 2) The signature covers the full withdrawal intent, incl. destination and + // amount. Determine the values that will be bound into the challenge. + // - Mode 1 (requestId): destination/amount/token come from the stored + // request; the client still signs them (fetched before submit). + // - Mode 2: destination/amount/token come from the (signed) body. + if (!isFreshTimestamp(timestamp)) { + return new Response( + JSON.stringify({ success: false, error: 'Authorization challenge expired. Please retry.' }), + { status: 401, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } + ) + } + + // 3) Verify the wallet signature over the canonical challenge. For Mode 1 the + // signed destination/amount/token are supplied alongside requestId and are + // re-checked against the stored request after lookup. + const challenge = buildWithdrawChallenge({ + identityId, + token: String(token ?? ''), + amount: Number(amount ?? 0), + destination: String(walletAddress ?? ''), + signerAddress, + timestamp, + nonce, + }) + const sigOk = await verifyWalletSignature(challenge, signature, signerAddress) + if (!sigOk) { + return new Response( + JSON.stringify({ success: false, error: 'Invalid signature' }), + { status: 401, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } + ) + } + + // 4) Prove the signing wallet OWNS the claimed identity (citizen NFT / visa). + const ownership = await assertIdentityOwnedByWallet(serviceClient, identityId, signerAddress, getPeopleApi) + if (!ownership.ok) { + return new Response( + JSON.stringify({ success: false, error: ownership.error || 'Identity ownership verification failed' }), + { status: 403, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } + ) + } + + // 5) Consume the nonce (single-use) to block replay of a captured signature. + const nonceOk = await consumeNonce(serviceClient, nonce, 'withdraw') + if (!nonceOk) { + return new Response( + JSON.stringify({ success: false, error: 'Authorization already used (replay detected)' }), + { status: 401, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } + ) + } + + // 6) Derive user_id SERVER-SIDE from the verified identity. Any client-supplied + // user_id is intentionally ignored. + const userId = await identityToUUID(identityId) + // Mode 1: Process existing request by ID if (requestId) { const { data: request, error: reqError } = await serviceClient @@ -246,8 +337,23 @@ serve(async (req) => { ) } + // The signed challenge (built from body values) must match the stored + // request, so the signature authorizes exactly this withdrawal. + const storedAmount = parseFloat(request.amount) + const bodyAmount = Number(amount ?? 0) + if ( + String(token ?? '') !== String(request.token) || + String(walletAddress ?? '') !== String(request.wallet_address) || + Math.abs(bodyAmount - storedAmount) > 1e-9 + ) { + return new Response( + JSON.stringify({ success: false, error: 'Signed withdrawal does not match the stored request' }), + { status: 401, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } + ) + } + token = request.token as 'HEZ' | 'PEZ' - amount = parseFloat(request.amount) + amount = storedAmount walletAddress = request.wallet_address } // Mode 2: Create new withdrawal request diff --git a/web/supabase/functions/process-withdrawal/index.ts b/web/supabase/functions/process-withdrawal/index.ts index 1176c15f..7a67a843 100644 --- a/web/supabase/functions/process-withdrawal/index.ts +++ b/web/supabase/functions/process-withdrawal/index.ts @@ -199,11 +199,16 @@ serve(async (req: Request) => { } try { - // Verify authorization (should be called with service role key or admin JWT) + // Authorization: this batch processor drains ALL pending withdrawal requests + // to their destination wallets, so it MUST be restricted to the backend + // service role (cron / admin tooling). Merely having *any* bearer token + // (e.g. the public anon key) is NOT sufficient — previously that let anyone + // trigger mass processing. const authHeader = req.headers.get("Authorization"); - if (!authHeader) { + const bearer = authHeader?.replace(/^Bearer\s+/i, "").trim(); + if (!bearer || bearer !== SUPABASE_SERVICE_ROLE_KEY) { return new Response( - JSON.stringify({ error: "Unauthorized" }), + JSON.stringify({ error: "Unauthorized: service role required" }), { status: 401, headers } ); } diff --git a/web/supabase/functions/resolve-dispute/index.ts b/web/supabase/functions/resolve-dispute/index.ts new file mode 100644 index 00000000..891ef1e0 --- /dev/null +++ b/web/supabase/functions/resolve-dispute/index.ts @@ -0,0 +1,151 @@ +// resolve-dispute Edge Function +// +// Server-side authorization for privileged P2P dispute actions (claim / resolve). +// The admin authorization is NOT the client isAdmin flag (which is cosmetic and +// bypassable). Here we: +// 1. Verify a wallet signature over a canonical admin-action challenge. +// 2. Check the signing wallet is in the server-side admin wallet set. +// 3. Enforce freshness + single-use nonce (replay protection). +// 4. For 'resolve', invoke admin_resolve_dispute() with the service role so the +// escrow movement + status changes happen atomically server-side. + +import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' +import { createClient } from 'npm:@supabase/supabase-js@2' +import { + verifyWalletSignature, + buildAdminChallenge, + consumeNonce, + isFreshTimestamp, +} from '../_shared/identity-auth.ts' + +const ALLOWED_ORIGINS = [ + 'https://app.pezkuwichain.io', + 'https://www.pezkuwichain.io', + 'https://pezkuwichain.io', +] + +function getCorsHeaders(origin: string | null) { + const allowedOrigin = origin && ALLOWED_ORIGINS.includes(origin) ? origin : ALLOWED_ORIGINS[0] + return { + 'Access-Control-Allow-Origin': allowedOrigin, + 'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type', + 'Access-Control-Allow-Credentials': 'true', + } +} + +// Authoritative admin wallet set (server-side). Overridable via ADMIN_WALLETS +// (comma-separated SS58). Defaults mirror the historical client whitelist. +function getAdminWallets(): string[] { + const env = Deno.env.get('ADMIN_WALLETS') + if (env) return env.split(',').map(s => s.trim()).filter(Boolean) + return [ + '5CyuFfbF95rzBxru7c9yEsX4XmQXUxpLUcbj9RLg9K1cGiiF', // Founder + '5EhCpn82QtdU53MF6PoNFrKHgSrsfcAxFTMwrn3JYf9dioQw', // Treasury admin + '5ELgySrX5ZyK7EWXjj6bAedyTCcTNWDANbiiipsT5gnpoCEp', // Admin + ] +} + +interface Body { + action?: 'claim' | 'resolve' + disputeId?: string + tradeId?: string + decision?: string + reasoning?: string + adminAddress?: string + signature?: string + timestamp?: number + nonce?: string +} + +serve(async (req) => { + const corsHeaders = getCorsHeaders(req.headers.get('Origin')) + const json = (status: number, obj: unknown) => + new Response(JSON.stringify(obj), { status, headers: { ...corsHeaders, 'Content-Type': 'application/json' } }) + + if (req.method === 'OPTIONS') { + return new Response(null, { headers: corsHeaders }) + } + + try { + const supabaseUrl = Deno.env.get('SUPABASE_URL')! + const supabaseServiceKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')! + const serviceClient = createClient(supabaseUrl, supabaseServiceKey) + + const body: Body = await req.json() + const { action, disputeId, tradeId, decision, reasoning, adminAddress, signature, timestamp, nonce } = body + + if (!action || !['claim', 'resolve'].includes(action)) { + return json(400, { success: false, error: 'Invalid action' }) + } + if (!disputeId || !tradeId || !adminAddress || !signature || !nonce || typeof timestamp !== 'number') { + return json(401, { success: false, error: 'Missing authorization fields' }) + } + if (action === 'resolve' && (!decision || !reasoning)) { + return json(400, { success: false, error: 'Decision and reasoning are required' }) + } + + // 1) Freshness + if (!isFreshTimestamp(timestamp)) { + return json(401, { success: false, error: 'Authorization challenge expired. Please retry.' }) + } + + // 2) Verify signature over the canonical admin challenge + const challenge = buildAdminChallenge({ + action, + disputeId, + tradeId, + decision: String(decision ?? ''), + adminAddress, + timestamp, + nonce, + }) + const sigOk = await verifyWalletSignature(challenge, signature, adminAddress) + if (!sigOk) { + return json(401, { success: false, error: 'Invalid signature' }) + } + + // 3) Server-side admin authorization + if (!getAdminWallets().includes(adminAddress)) { + return json(403, { success: false, error: 'Wallet is not authorized for admin actions' }) + } + + // 4) Replay protection + const nonceOk = await consumeNonce(serviceClient, nonce, `admin_${action}`) + if (!nonceOk) { + return json(401, { success: false, error: 'Authorization already used (replay detected)' }) + } + + // ---- CLAIM ---- + if (action === 'claim') { + const { error } = await serviceClient + .from('p2p_fiat_disputes') + .update({ status: 'under_review', assigned_at: new Date().toISOString() }) + .eq('id', disputeId) + if (error) return json(500, { success: false, error: 'Failed to claim dispute' }) + return json(200, { success: true, action: 'claim' }) + } + + // ---- RESOLVE (atomic escrow movement + status) ---- + const { data, error } = await serviceClient.rpc('admin_resolve_dispute', { + p_dispute_id: disputeId, + p_trade_id: tradeId, + p_decision: decision, + p_reasoning: reasoning, + p_admin_ref: adminAddress, + }) + + if (error) { + console.error('admin_resolve_dispute error:', error) + return json(500, { success: false, error: error.message || 'Resolution failed' }) + } + const result = typeof data === 'string' ? JSON.parse(data) : data + if (!result?.success) { + return json(400, { success: false, error: result?.error || 'Resolution failed' }) + } + + return json(200, { success: true, ...result }) + } catch (error) { + console.error('resolve-dispute error:', error) + return json(500, { success: false, error: 'Internal server error' }) + } +}) diff --git a/web/supabase/functions/verify-deposit/index.ts b/web/supabase/functions/verify-deposit/index.ts index d17fac9b..1fe7f35e 100644 --- a/web/supabase/functions/verify-deposit/index.ts +++ b/web/supabase/functions/verify-deposit/index.ts @@ -8,6 +8,7 @@ import { createClient } from 'npm:@supabase/supabase-js@2' import { ApiPromise, WsProvider } from 'npm:@pezkuwi/api@16.5.36' import { blake2b } from 'npm:@noble/hashes@1.7.1/blake2b' import { base58 } from 'npm:@scure/base@1.2.4' +import { assertIdentityOwnedByWallet } from '../_shared/identity-auth.ts' // Allowed origins for CORS const ALLOWED_ORIGINS = [ @@ -61,6 +62,17 @@ async function identityToUUID(identityId: string): Promise { // PEZ asset ID const PEZ_ASSET_ID = 1 +// People Chain endpoint — required to verify citizen NFT ownership server-side +const PEOPLE_RPC_ENDPOINT = Deno.env.get('PEOPLE_RPC_ENDPOINT') || 'wss://people-rpc.pezkuwichain.io' + +let peopleApiInstance: ApiPromise | null = null +async function getPeopleApi(): Promise { + if (peopleApiInstance && peopleApiInstance.isConnected) return peopleApiInstance + const provider = new WsProvider(PEOPLE_RPC_ENDPOINT) + peopleApiInstance = await ApiPromise.create({ provider }) + return peopleApiInstance +} + interface DepositRequest { txHash: string token: 'HEZ' | 'PEZ' @@ -501,6 +513,30 @@ serve(async (req) => { ) } + // Bind the crediting identity to the depositing wallet. The on-chain sender + // has just been proven to equal `walletAddress`; requiring that wallet to + // OWN `identityId` prevents crediting a balance the depositor does not own + // (citizen NFT / active visa binding). + const depositOwnership = await assertIdentityOwnedByWallet(serviceClient, identityId, walletAddress, getPeopleApi) + if (!depositOwnership.ok) { + await serviceClient + .from('p2p_deposit_withdraw_requests') + .update({ + status: 'failed', + error_message: `Identity ownership check failed: ${depositOwnership.error}`, + processed_at: new Date().toISOString() + }) + .eq('id', depositRequest.id) + + return new Response( + JSON.stringify({ + success: false, + error: depositOwnership.error || 'Depositing wallet does not own this identity' + }), + { status: 403, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } + ) + } + // Process deposit const { data: processResult, error: processError } = await serviceClient .rpc('process_deposit', { diff --git a/web/fix-supabase-rls-policy.sql b/web/supabase/migrations/20260225000000_fix_admin_roles_rls_policy.sql similarity index 100% rename from web/fix-supabase-rls-policy.sql rename to web/supabase/migrations/20260225000000_fix_admin_roles_rls_policy.sql diff --git a/web/supabase/migrations/20260725000000_withdraw_authz_hardening.sql b/web/supabase/migrations/20260725000000_withdraw_authz_hardening.sql new file mode 100644 index 00000000..8e549e33 --- /dev/null +++ b/web/supabase/migrations/20260725000000_withdraw_authz_hardening.sql @@ -0,0 +1,118 @@ +-- ===================================================== +-- Migration: Withdrawal authorization hardening +-- Date: 2026-07-25 +-- ===================================================== +-- +-- Part of the fix for the CRITICAL broken-object-level-auth finding on the +-- withdrawal path. Two defenses: +-- +-- 1. Replay protection for the signed withdrawal challenge (nonce store). +-- 2. Defense-in-depth: request_withdraw() may ONLY be executed by the backend +-- service role. Previously it was executable by anon/authenticated, so an +-- attacker with the public anon key could call it directly with a victim's +-- user_id to create a pending withdrawal to an attacker-controlled wallet, +-- which the batch processor would then pay out. +-- + +-- ===================================================== +-- 1. CHALLENGE NONCE STORE (single-use signed challenges) +-- ===================================================== +CREATE TABLE IF NOT EXISTS public.p2p_challenge_nonces ( + nonce TEXT PRIMARY KEY, + purpose TEXT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +CREATE INDEX IF NOT EXISTS idx_p2p_challenge_nonces_created + ON public.p2p_challenge_nonces(created_at); + +ALTER TABLE public.p2p_challenge_nonces ENABLE ROW LEVEL SECURITY; + +-- Only the service role (edge functions) may read/write nonces. +DROP POLICY IF EXISTS "challenge_nonces_service_only" ON public.p2p_challenge_nonces; +CREATE POLICY "challenge_nonces_service_only" ON public.p2p_challenge_nonces + FOR ALL USING (auth.role() = 'service_role') WITH CHECK (auth.role() = 'service_role'); + +REVOKE ALL ON public.p2p_challenge_nonces FROM anon, authenticated, PUBLIC; + +-- ===================================================== +-- 2. LOCK request_withdraw() TO SERVICE ROLE +-- ===================================================== +-- Recreate with an explicit service-role guard (mirrors process_deposit()). +CREATE OR REPLACE FUNCTION request_withdraw( + p_user_id UUID, + p_token TEXT, + p_amount DECIMAL(20, 12), + p_wallet_address TEXT +) RETURNS JSON AS $$ +DECLARE + v_balance RECORD; + v_request_id UUID; +BEGIN + -- SECURITY: backend service role only. Object-level authorization (proving the + -- caller owns p_user_id) is enforced by the process-withdraw edge function via + -- a verified wallet signature before this is ever invoked. + IF current_setting('role', true) <> 'service_role' + AND current_setting('request.jwt.claim.role', true) <> 'service_role' THEN + RETURN json_build_object( + 'success', false, + 'error', 'UNAUTHORIZED: withdrawals must go through the backend service' + ); + END IF; + + -- Lock user's balance + SELECT * INTO v_balance + FROM user_internal_balances + WHERE user_id = p_user_id AND token = p_token + FOR UPDATE; + + -- Check sufficient available balance + IF v_balance IS NULL OR v_balance.available_balance < p_amount THEN + RETURN json_build_object( + 'success', false, + 'error', 'Insufficient available balance. Available: ' || COALESCE(v_balance.available_balance, 0) + ); + END IF; + + -- Lock the amount (move to locked_balance) + UPDATE user_internal_balances + SET + available_balance = available_balance - p_amount, + locked_balance = locked_balance + p_amount, + updated_at = NOW() + WHERE user_id = p_user_id AND token = p_token; + + -- Create withdrawal request + INSERT INTO p2p_deposit_withdraw_requests ( + user_id, request_type, token, amount, wallet_address, status + ) VALUES ( + p_user_id, 'withdraw', p_token, p_amount, p_wallet_address, 'pending' + ) RETURNING id INTO v_request_id; + + -- Log the transaction + INSERT INTO p2p_balance_transactions ( + user_id, token, transaction_type, amount, + balance_before, balance_after, reference_type, reference_id, + description + ) VALUES ( + p_user_id, p_token, 'withdraw', -p_amount, + v_balance.available_balance, v_balance.available_balance - p_amount, 'withdraw_request', v_request_id, + 'Withdrawal request to ' || p_wallet_address + ); + + RETURN json_build_object( + 'success', true, + 'request_id', v_request_id, + 'amount', p_amount, + 'wallet_address', p_wallet_address, + 'status', 'pending' + ); +END; +$$ LANGUAGE plpgsql SECURITY DEFINER; + +REVOKE EXECUTE ON FUNCTION request_withdraw(UUID, TEXT, DECIMAL, TEXT) FROM PUBLIC, anon, authenticated; + +COMMENT ON FUNCTION request_withdraw IS +'Create withdrawal request and lock balance. SERVICE ROLE ONLY — called by the +process-withdraw edge function after it verifies the caller owns the identity via +a wallet signature. Never call directly from the client.'; diff --git a/web/supabase/migrations/20260725010000_harden_financial_rls.sql b/web/supabase/migrations/20260725010000_harden_financial_rls.sql new file mode 100644 index 00000000..f7d2c7da --- /dev/null +++ b/web/supabase/migrations/20260725010000_harden_financial_rls.sql @@ -0,0 +1,122 @@ +-- ===================================================== +-- Migration: Harden RLS on financial + PII tables +-- Date: 2026-07-25 +-- ===================================================== +-- +-- Forward migration (does NOT rewrite history) that removes the blanket +-- `USING (true)` read policies added in 20260223160000_fix_rls_for_wallet_auth +-- on the crown-jewel financial/PII tables, so the public anon key can no longer +-- enumerate every user's balances, ledger history, deposit/withdraw requests, or +-- payment-method PII. +-- +-- Reads the app legitimately needs are moved behind SECURITY DEFINER RPCs that +-- return only the requested user's rows (instead of the whole table). Writes to +-- these tables already go through service_role edge functions / SECURITY DEFINER +-- RPCs, so no client write path is affected. +-- +-- NOTE (residual, tracked): user_id is a UUID v5 derived from a citizen/visa +-- number, which is not a secret. These RPCs remove full-table exfiltration but do +-- not yet cryptographically bind the reader to the row owner. Fully closing that +-- requires a signed-session read path (same mechanism as withdrawals) applied to +-- these reads — see the security report. The high-severity leak (dump ALL rows) +-- is closed here. + +-- ===================================================== +-- 1. user_internal_balances — no direct client reads (uses +-- get_user_internal_balance RPC which is SECURITY DEFINER and bypasses RLS) +-- ===================================================== +DROP POLICY IF EXISTS "balances_anon_select" ON public.user_internal_balances; +-- No anon policy remains -> anon/authenticated cannot read the table directly. +-- SECURITY DEFINER RPCs (get_user_internal_balance) continue to work. + +-- ===================================================== +-- 2. p2p_balance_transactions — replace open SELECT with a scoped RPC +-- ===================================================== +DROP POLICY IF EXISTS "balance_tx_anon_select" ON public.p2p_balance_transactions; + +CREATE OR REPLACE FUNCTION public.get_user_balance_transactions( + p_user_id UUID, + p_limit INT DEFAULT 50 +) RETURNS SETOF public.p2p_balance_transactions AS $$ + SELECT * + FROM public.p2p_balance_transactions + WHERE user_id = p_user_id + ORDER BY created_at DESC + LIMIT LEAST(GREATEST(COALESCE(p_limit, 50), 1), 200); +$$ LANGUAGE sql STABLE SECURITY DEFINER; + +GRANT EXECUTE ON FUNCTION public.get_user_balance_transactions(UUID, INT) TO anon, authenticated; + +COMMENT ON FUNCTION public.get_user_balance_transactions IS +'Returns balance-transaction history for a single user_id only (no full-table +dump). Replaces the removed USING(true) SELECT policy.'; + +-- ===================================================== +-- 3. p2p_deposit_withdraw_requests — replace open SELECT with a scoped RPC +-- (service_role write policy from 20260223160000 is retained) +-- ===================================================== +DROP POLICY IF EXISTS "deposit_requests_anon_select" ON public.p2p_deposit_withdraw_requests; + +CREATE OR REPLACE FUNCTION public.get_user_deposit_withdraw_requests( + p_user_id UUID, + p_limit INT DEFAULT 50 +) RETURNS SETOF public.p2p_deposit_withdraw_requests AS $$ + SELECT * + FROM public.p2p_deposit_withdraw_requests + WHERE user_id = p_user_id + ORDER BY created_at DESC + LIMIT LEAST(GREATEST(COALESCE(p_limit, 50), 1), 200); +$$ LANGUAGE sql STABLE SECURITY DEFINER; + +GRANT EXECUTE ON FUNCTION public.get_user_deposit_withdraw_requests(UUID, INT) TO anon, authenticated; + +COMMENT ON FUNCTION public.get_user_deposit_withdraw_requests IS +'Returns deposit/withdraw requests for a single user_id only. Replaces the +removed USING(true) SELECT policy.'; + +-- ===================================================== +-- 4. p2p_user_payment_methods (IBAN / payment PII) — lock to service role +-- (no direct client access exists; offers embed encrypted payment details). +-- ===================================================== +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM information_schema.tables + WHERE table_schema = 'public' AND table_name = 'p2p_user_payment_methods') THEN + EXECUTE 'ALTER TABLE public.p2p_user_payment_methods ENABLE ROW LEVEL SECURITY'; + EXECUTE 'DROP POLICY IF EXISTS "user_pm_anon_select" ON public.p2p_user_payment_methods'; + EXECUTE 'DROP POLICY IF EXISTS "user_pm_anon_insert" ON public.p2p_user_payment_methods'; + EXECUTE 'DROP POLICY IF EXISTS "user_pm_anon_update" ON public.p2p_user_payment_methods'; + EXECUTE 'DROP POLICY IF EXISTS "user_pm_service_only" ON public.p2p_user_payment_methods'; + EXECUTE 'CREATE POLICY "user_pm_service_only" ON public.p2p_user_payment_methods + FOR ALL USING (auth.role() = ''service_role'') WITH CHECK (auth.role() = ''service_role'')'; + EXECUTE 'REVOKE ALL ON public.p2p_user_payment_methods FROM anon, authenticated, PUBLIC'; + END IF; +END $$; + +-- ===================================================== +-- 5. p2p_fiat_disputes — remove world-open UPDATE. +-- Dispute state transitions (claim/resolve) now go through the service-role +-- `resolve-dispute` edge function (which verifies the admin wallet signature). +-- Regular users still INSERT disputes (disputes_anon_insert retained). +-- ===================================================== +DROP POLICY IF EXISTS "disputes_anon_update" ON public.p2p_fiat_disputes; +DROP POLICY IF EXISTS "disputes_service_update" ON public.p2p_fiat_disputes; +CREATE POLICY "disputes_service_update" ON public.p2p_fiat_disputes + FOR UPDATE USING (auth.role() = 'service_role') WITH CHECK (auth.role() = 'service_role'); + +-- ===================================================== +-- Done. Balances, ledger, deposit/withdraw requests and payment PII are no longer +-- world-readable via the anon key; dispute resolution is no longer world-writable. +-- +-- RESIDUAL (documented in the security report, NOT closed here to avoid breaking +-- the live app without the signed-session refactor): +-- * p2p_fiat_offers / p2p_fiat_trades / p2p_messages still carry USING(true) +-- policies because the client reads/writes them directly with the anon key +-- and there is no server session to bind to. Marking a trade status does not +-- itself move funds. +-- * The internal-ledger escrow RPCs (lock_/release_/refund_escrow_internal) +-- are still EXECUTE-able by anon (confirmPaymentReceived / createFiatOffer +-- call them directly). This is a SEPARATE critical hole that needs the same +-- signed-challenge mechanism applied to trade actions (an authenticated +-- confirm-payment / create-offer edge function). See report. +-- ===================================================== diff --git a/web/supabase/migrations/20260725020000_admin_dispute_resolution.sql b/web/supabase/migrations/20260725020000_admin_dispute_resolution.sql new file mode 100644 index 00000000..b97e6e6b --- /dev/null +++ b/web/supabase/migrations/20260725020000_admin_dispute_resolution.sql @@ -0,0 +1,158 @@ +-- ===================================================== +-- Migration: Atomic admin dispute resolution (moves escrow) +-- Date: 2026-07-25 +-- ===================================================== +-- +-- Fix for the CRITICAL fund-logic finding: the admin Dispute Resolution panel +-- only relabelled p2p_fiat_trades.status and NEVER moved escrow, so "buyer wins" +-- paid nothing, "refund seller" left funds locked, and "split" was unhandled. +-- +-- This SECURITY DEFINER function performs the escrow movement AND all status +-- changes in a single transaction. It is service-role only; caller identity +-- (admin) is verified by the resolve-dispute edge function via a wallet +-- signature before this is invoked. +-- +-- ESCROW ACCOUNTING (verified against createFiatOffer + accept_p2p_offer): +-- * createFiatOffer locks the FULL offer amount (available -> locked). +-- * accept_p2p_offer does NOT lock again; it only decrements +-- offer.remaining_amount. So: seller.locked == remaining_amount + SUM(active +-- trade amounts) for the offer. +-- Therefore, per trade of amount X: +-- - release_to_buyer : locked(seller) -= X, available(buyer) += X. (offer untouched) +-- - refund_to_seller : locked(seller) -= X, available(seller) += X. (offer untouched) +-- - split : release X/2 to buyer + refund X/2 to seller. (offer untouched) +-- remaining_amount is intentionally NOT restored (that would double-count the +-- funds — a latent bug in the older resolve_p2p_dispute()). + +CREATE OR REPLACE FUNCTION public.admin_resolve_dispute( + p_dispute_id UUID, + p_trade_id UUID, + p_decision TEXT, -- 'release_to_buyer' | 'refund_to_seller' | 'split' | 'escalate' + p_reasoning TEXT, + p_admin_ref TEXT -- admin wallet address (for audit only) +) RETURNS JSON AS $$ +DECLARE + v_trade RECORD; + v_token TEXT; + v_half DECIMAL(20, 12); + v_res JSON; + v_trade_status TEXT; +BEGIN + -- SECURITY: backend service role only. Admin identity is verified upstream by + -- the resolve-dispute edge function (wallet signature vs. admin wallet set). + IF current_setting('role', true) <> 'service_role' + AND current_setting('request.jwt.claim.role', true) <> 'service_role' THEN + RETURN json_build_object('success', false, 'error', 'UNAUTHORIZED: service role required'); + END IF; + + IF p_reasoning IS NULL OR length(trim(p_reasoning)) = 0 THEN + RETURN json_build_object('success', false, 'error', 'Reasoning is required'); + END IF; + + IF p_decision NOT IN ('release_to_buyer', 'refund_to_seller', 'split', 'escalate') THEN + RETURN json_build_object('success', false, 'error', 'Invalid decision'); + END IF; + + -- Lock the trade row + SELECT * INTO v_trade FROM public.p2p_fiat_trades WHERE id = p_trade_id FOR UPDATE; + IF NOT FOUND THEN + RETURN json_build_object('success', false, 'error', 'Trade not found'); + END IF; + + -- ----- ESCALATE: no fund movement, just mark dispute escalated ----- + IF p_decision = 'escalate' THEN + UPDATE public.p2p_fiat_disputes + SET status = 'escalated', decision = 'escalate', decision_reasoning = p_reasoning, updated_at = NOW() + WHERE id = p_dispute_id; + + INSERT INTO public.p2p_audit_log (user_id, action, entity_type, entity_id, details) + VALUES (NULL, 'dispute_escalated', 'trade', p_trade_id, + jsonb_build_object('dispute_id', p_dispute_id, 'admin_ref', p_admin_ref, 'reasoning', p_reasoning)); + + RETURN json_build_object('success', true, 'decision', 'escalate'); + END IF; + + -- For fund-moving decisions the trade must be in dispute. + IF v_trade.status <> 'disputed' THEN + RETURN json_build_object('success', false, 'error', 'Trade is not in disputed status (current: ' || v_trade.status || ')'); + END IF; + + -- Resolve token from the offer + SELECT token INTO v_token FROM public.p2p_fiat_offers WHERE id = v_trade.offer_id; + IF v_token IS NULL THEN + RETURN json_build_object('success', false, 'error', 'Offer/token not found for trade'); + END IF; + + IF p_decision = 'release_to_buyer' THEN + v_res := public.release_escrow_internal( + v_trade.seller_id, v_trade.buyer_id, v_token, v_trade.crypto_amount, 'dispute_resolution', p_trade_id); + IF (v_res->>'success')::boolean IS NOT TRUE THEN + RAISE EXCEPTION 'release_escrow_internal failed: %', COALESCE(v_res->>'error', 'unknown'); + END IF; + v_trade_status := 'completed'; + + ELSIF p_decision = 'refund_to_seller' THEN + v_res := public.refund_escrow_internal( + v_trade.seller_id, v_token, v_trade.crypto_amount, 'dispute_resolution', p_trade_id); + IF (v_res->>'success')::boolean IS NOT TRUE THEN + RAISE EXCEPTION 'refund_escrow_internal failed: %', COALESCE(v_res->>'error', 'unknown'); + END IF; + v_trade_status := 'refunded'; + + ELSIF p_decision = 'split' THEN + v_half := ROUND(v_trade.crypto_amount / 2, 12); + -- Half to buyer + v_res := public.release_escrow_internal( + v_trade.seller_id, v_trade.buyer_id, v_token, v_half, 'dispute_resolution_split', p_trade_id); + IF (v_res->>'success')::boolean IS NOT TRUE THEN + RAISE EXCEPTION 'split release failed: %', COALESCE(v_res->>'error', 'unknown'); + END IF; + -- Remainder back to seller (handles odd cents deterministically) + v_res := public.refund_escrow_internal( + v_trade.seller_id, v_token, v_trade.crypto_amount - v_half, 'dispute_resolution_split', p_trade_id); + IF (v_res->>'success')::boolean IS NOT TRUE THEN + RAISE EXCEPTION 'split refund failed: %', COALESCE(v_res->>'error', 'unknown'); + END IF; + v_trade_status := 'completed'; + END IF; + + -- Update trade + UPDATE public.p2p_fiat_trades + SET status = v_trade_status, + completed_at = CASE WHEN v_trade_status = 'completed' THEN NOW() ELSE completed_at END, + escrow_released_at = NOW(), + dispute_resolved_at = NOW(), + dispute_resolution = p_decision || ': ' || COALESCE(p_reasoning, ''), + updated_at = NOW() + WHERE id = p_trade_id; + + -- Update dispute + UPDATE public.p2p_fiat_disputes + SET status = 'resolved', decision = p_decision, decision_reasoning = p_reasoning, + resolved_at = NOW(), updated_at = NOW() + WHERE id = p_dispute_id; + + -- Notify both parties (best-effort, same txn) + INSERT INTO public.p2p_notifications (user_id, type, title, message, reference_type, reference_id) + VALUES + (v_trade.seller_id, 'dispute_resolved', 'Dispute Resolved', 'Your dispute was resolved: ' || p_decision, 'dispute', p_dispute_id), + (v_trade.buyer_id, 'dispute_resolved', 'Dispute Resolved', 'Your dispute was resolved: ' || p_decision, 'dispute', p_dispute_id); + + -- Audit + INSERT INTO public.p2p_audit_log (user_id, action, entity_type, entity_id, details) + VALUES (NULL, 'dispute_resolved', 'trade', p_trade_id, + jsonb_build_object( + 'dispute_id', p_dispute_id, 'decision', p_decision, 'admin_ref', p_admin_ref, + 'reasoning', p_reasoning, 'seller_id', v_trade.seller_id, 'buyer_id', v_trade.buyer_id, + 'amount', v_trade.crypto_amount, 'token', v_token)); + + RETURN json_build_object('success', true, 'decision', p_decision, 'trade_id', p_trade_id, 'token', v_token, 'amount', v_trade.crypto_amount); +END; +$$ LANGUAGE plpgsql SECURITY DEFINER; + +REVOKE EXECUTE ON FUNCTION public.admin_resolve_dispute(UUID, UUID, TEXT, TEXT, TEXT) FROM PUBLIC, anon, authenticated; + +COMMENT ON FUNCTION public.admin_resolve_dispute IS +'Atomically resolves a P2P dispute: moves escrow (release/refund/split) AND +updates trade + dispute status + notifications in one transaction. SERVICE ROLE +ONLY — admin identity is verified by the resolve-dispute edge function.'; diff --git a/web/supabase/migrations/20260725030000_lock_escrow_internal_rpcs.sql b/web/supabase/migrations/20260725030000_lock_escrow_internal_rpcs.sql new file mode 100644 index 00000000..29cdae25 --- /dev/null +++ b/web/supabase/migrations/20260725030000_lock_escrow_internal_rpcs.sql @@ -0,0 +1,52 @@ +-- ===================================================== +-- Migration: Lock down internal-ledger escrow RPCs +-- Date: 2026-07-25 +-- ===================================================== +-- +-- Fix for the CRITICAL drain: lock_/release_/refund_escrow_internal (migration +-- 014) had default PUBLIC EXECUTE, and the client called release_escrow_internal +-- directly with the public anon key. An anon caller could therefore run +-- release_escrow_internal(victim, attacker, token, amount) +-- and drain any victim's LOCKED balance. +-- +-- These functions now execute ONLY as the service role. Every legitimate caller +-- goes through a service-role edge function that first verifies a wallet +-- signature + identity ownership: +-- * release -> confirm-payment edge function (seller-authorized) +-- * lock -> lock-escrow edge function (owner-authorized) +-- * refund -> process-withdraw (on failed payout) + admin_resolve_dispute +-- (dispute refunds/splits). No direct client caller. +-- +-- SECURITY DEFINER functions that call these internally (admin_resolve_dispute, +-- cancel_expired_trades, process_deposit) are unaffected: EXECUTE for an inner +-- call is checked against the function OWNER, not the session role. + +-- release_escrow_internal(p_from_user_id, p_to_user_id, p_token, p_amount, p_reference_type, p_reference_id) +REVOKE EXECUTE ON FUNCTION release_escrow_internal(UUID, UUID, TEXT, DECIMAL, TEXT, UUID) + FROM PUBLIC, anon, authenticated; +GRANT EXECUTE ON FUNCTION release_escrow_internal(UUID, UUID, TEXT, DECIMAL, TEXT, UUID) + TO service_role; + +-- refund_escrow_internal(p_user_id, p_token, p_amount, p_reference_type, p_reference_id) +REVOKE EXECUTE ON FUNCTION refund_escrow_internal(UUID, TEXT, DECIMAL, TEXT, UUID) + FROM PUBLIC, anon, authenticated; +GRANT EXECUTE ON FUNCTION refund_escrow_internal(UUID, TEXT, DECIMAL, TEXT, UUID) + TO service_role; + +-- lock_escrow_internal(p_user_id, p_token, p_amount, p_reference_type, p_reference_id) +REVOKE EXECUTE ON FUNCTION lock_escrow_internal(UUID, TEXT, DECIMAL, TEXT, UUID) + FROM PUBLIC, anon, authenticated; +GRANT EXECUTE ON FUNCTION lock_escrow_internal(UUID, TEXT, DECIMAL, TEXT, UUID) + TO service_role; + +COMMENT ON FUNCTION release_escrow_internal IS +'Release escrow seller->buyer. SERVICE ROLE ONLY — invoked by the confirm-payment +edge function after verifying the seller''s wallet signature + identity ownership.'; + +COMMENT ON FUNCTION refund_escrow_internal IS +'Refund locked escrow to its owner. SERVICE ROLE ONLY — invoked by process-withdraw +(failed payout) and admin_resolve_dispute (dispute refund/split).'; + +COMMENT ON FUNCTION lock_escrow_internal IS +'Lock a user''s own available balance into escrow. SERVICE ROLE ONLY — invoked by +the lock-escrow edge function after verifying the caller owns that identity.'; diff --git a/web/supabase/migrations/20260725040000_freeze_trade_financial_columns.sql b/web/supabase/migrations/20260725040000_freeze_trade_financial_columns.sql new file mode 100644 index 00000000..3802755a --- /dev/null +++ b/web/supabase/migrations/20260725040000_freeze_trade_financial_columns.sql @@ -0,0 +1,109 @@ +-- ===================================================== +-- Migration: Freeze fund-routing columns on trades/offers +-- Date: 2026-07-25 +-- ===================================================== +-- +-- Fix for a CONFIRMED custody-critical escrow-redirection bypass. +-- +-- p2p_fiat_trades still carries a world-open UPDATE policy +-- (trades_anon_update USING(true), migration 20260223160000) because the client +-- legitimately flips status / uploads payment proof with the anon key, and there +-- is no server session to bind row ownership to. The 20260725010000 hardening +-- migration knowingly left this, on the assumption that "marking a trade status +-- does not itself move funds". +-- +-- That assumption is INCOMPLETE. The seller-authorized release path +-- (confirm-payment edge function) and admin_resolve_dispute() read the fund +-- DESTINATION and AMOUNT from the trade row at release time: +-- release_escrow_internal(trade.seller_id, trade.buyer_id, token, trade.crypto_amount) +-- Because buyer_id / crypto_amount / offer_id are attacker-writable via the anon +-- key, an external attacker can do +-- UPDATE p2p_fiat_trades SET buyer_id = WHERE id = +-- and, when the honest seller signs the (correctly authenticated) release, the +-- escrow is paid to the attacker instead of the buyer who sent fiat. The +-- signature gate is intact but authorizes a row whose routing was tampered. +-- +-- Minimal fix (no app-breaking change, no signed-session refactor required): +-- make the fund-routing / amount columns IMMUTABLE after insert via a BEFORE +-- UPDATE trigger. No legitimate code path ever mutates these columns after the +-- trade/offer is created (accept_p2p_offer INSERTs them; every UPDATE — status, +-- proof, timestamps, dispute fields, remaining_amount, price edits — leaves them +-- untouched). The service role is still allowed to change them so future +-- backend tooling / manual reconciliation is not boxed in. + +-- ----------------------------------------------------- +-- 1. p2p_fiat_trades: freeze routing + amount columns +-- ----------------------------------------------------- +CREATE OR REPLACE FUNCTION public.enforce_trade_financial_immutability() +RETURNS TRIGGER AS $$ +BEGIN + -- Allow the backend service role to change anything (reconciliation). + IF current_setting('role', true) = 'service_role' + OR current_setting('request.jwt.claim.role', true) = 'service_role' THEN + RETURN NEW; + END IF; + + IF NEW.offer_id IS DISTINCT FROM OLD.offer_id + OR NEW.seller_id IS DISTINCT FROM OLD.seller_id + OR NEW.buyer_id IS DISTINCT FROM OLD.buyer_id + OR NEW.crypto_amount IS DISTINCT FROM OLD.crypto_amount + OR NEW.fiat_amount IS DISTINCT FROM OLD.fiat_amount + OR NEW.price_per_unit IS DISTINCT FROM OLD.price_per_unit + OR NEW.escrow_locked_amount IS DISTINCT FROM OLD.escrow_locked_amount THEN + RAISE EXCEPTION 'Trade fund-routing columns are immutable (offer_id, seller_id, buyer_id, crypto_amount, fiat_amount, price_per_unit, escrow_locked_amount)'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +DROP TRIGGER IF EXISTS trg_freeze_trade_financials ON public.p2p_fiat_trades; +CREATE TRIGGER trg_freeze_trade_financials + BEFORE UPDATE ON public.p2p_fiat_trades + FOR EACH ROW EXECUTE FUNCTION public.enforce_trade_financial_immutability(); + +-- ----------------------------------------------------- +-- 2. p2p_fiat_offers: freeze token / seller / original amount +-- (token drives WHICH balance release_escrow_internal moves; seller_id is the +-- escrow owner). Status, remaining_amount, price and fiat fields stay editable +-- so the existing offer edit / pause / partial-fill flows keep working. +-- ----------------------------------------------------- +CREATE OR REPLACE FUNCTION public.enforce_offer_financial_immutability() +RETURNS TRIGGER AS $$ +BEGIN + IF current_setting('role', true) = 'service_role' + OR current_setting('request.jwt.claim.role', true) = 'service_role' THEN + RETURN NEW; + END IF; + + IF NEW.seller_id IS DISTINCT FROM OLD.seller_id + OR NEW.token IS DISTINCT FROM OLD.token + OR NEW.amount_crypto IS DISTINCT FROM OLD.amount_crypto THEN + RAISE EXCEPTION 'Offer fund-routing columns are immutable (seller_id, token, amount_crypto)'; + END IF; + + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +DROP TRIGGER IF EXISTS trg_freeze_offer_financials ON public.p2p_fiat_offers; +CREATE TRIGGER trg_freeze_offer_financials + BEFORE UPDATE ON public.p2p_fiat_offers + FOR EACH ROW EXECUTE FUNCTION public.enforce_offer_financial_immutability(); + +COMMENT ON FUNCTION public.enforce_trade_financial_immutability IS +'Blocks anon/authenticated UPDATEs from changing a trade''s fund-routing/amount +columns (escrow redirection defense). Service role is exempt.'; +COMMENT ON FUNCTION public.enforce_offer_financial_immutability IS +'Blocks anon/authenticated UPDATEs from changing an offer''s seller/token/amount +(escrow token mis-routing defense). Service role is exempt.'; + +-- --------------------------------------------------------------------------- +-- 3. Remove the dead legacy escrow-mover from the anon attack surface. +-- resolve_p2p_dispute() is SECURITY DEFINER and moves escrow, but its +-- auth.uid() admin gate is NULL under the public anon key, so it already +-- fails closed for anon. Revoking PUBLIC/anon/authenticated EXECUTE removes +-- it as an attack surface entirely (dispute resolution now flows through the +-- wallet-signed resolve-dispute edge function + admin_resolve_dispute). +-- --------------------------------------------------------------------------- +REVOKE EXECUTE ON FUNCTION resolve_p2p_dispute FROM PUBLIC, anon, authenticated; diff --git a/web/supabase/migrations/__tests__/freeze_trade_financials.test.ts b/web/supabase/migrations/__tests__/freeze_trade_financials.test.ts new file mode 100644 index 00000000..a09984d0 --- /dev/null +++ b/web/supabase/migrations/__tests__/freeze_trade_financials.test.ts @@ -0,0 +1,66 @@ +// DB-backed verification of migration 20260725040000 (BYPASS #1 custody fix): +// the freeze trigger must make trade fund-routing columns immutable for non- +// service-role writers. Runs the EXACT trigger from the migration on a real +// Postgres engine (pglite/WASM, no system install). Run: +// deno run -A web/supabase/migrations/__tests__/freeze_trade_financials.test.ts +// NOTE: proves the trigger (primary custody guard, current_setting-based). The +// RLS/REVOKE role-enforcement in the sibling migrations is single-user-untestable +// here and must be verified on a multi-role staging Postgres (see DEPLOY_RUNBOOK). +import { PGlite } from "npm:@electric-sql/pglite"; +const db = new PGlite(); +let pass = 0, fail = 0; +const ok = (c:boolean,m:string)=>{ c?(pass++,console.log(" ✅ "+m)):(fail++,console.log(" ❌ "+m)); }; +async function raises(sql:string){ try{ await db.exec(sql); return false; }catch(_e){ return true; } } + +// minimal schema + EXACT trigger from migration 20260725040000 +await db.exec(` +CREATE TABLE p2p_fiat_trades ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + offer_id uuid, seller_id uuid, buyer_id uuid, + crypto_amount numeric, fiat_amount numeric, price_per_unit numeric, + escrow_locked_amount numeric, status text, buyer_payment_reference text +); +CREATE OR REPLACE FUNCTION enforce_trade_financial_immutability() +RETURNS TRIGGER AS $$ +BEGIN + IF current_setting('role', true) = 'service_role' + OR current_setting('request.jwt.claim.role', true) = 'service_role' THEN + RETURN NEW; + END IF; + IF NEW.offer_id IS DISTINCT FROM OLD.offer_id + OR NEW.seller_id IS DISTINCT FROM OLD.seller_id + OR NEW.buyer_id IS DISTINCT FROM OLD.buyer_id + OR NEW.crypto_amount IS DISTINCT FROM OLD.crypto_amount + OR NEW.fiat_amount IS DISTINCT FROM OLD.fiat_amount + OR NEW.price_per_unit IS DISTINCT FROM OLD.price_per_unit + OR NEW.escrow_locked_amount IS DISTINCT FROM OLD.escrow_locked_amount THEN + RAISE EXCEPTION 'Trade fund-routing columns are immutable'; + END IF; + RETURN NEW; +END;$$ LANGUAGE plpgsql; +CREATE TRIGGER trg_freeze_trade_financials BEFORE UPDATE ON p2p_fiat_trades + FOR EACH ROW EXECUTE FUNCTION enforce_trade_financial_immutability(); +INSERT INTO p2p_fiat_trades (id, seller_id, buyer_id, crypto_amount, status) + VALUES ('11111111-1111-1111-1111-111111111111','22222222-2222-2222-2222-222222222222','33333333-3333-3333-3333-333333333333', 100, 'payment_sent'); +`); +console.log("BYPASS #1 (escrow-release redirection via trade-row) — freeze trigger:"); +// A) anon UPDATE buyer_id -> MUST raise +await db.exec(`SELECT set_config('request.jwt.claim.role','anon',false);`); +ok(await raises(`UPDATE p2p_fiat_trades SET buyer_id='44444444-4444-4444-4444-444444444444' WHERE id='11111111-1111-1111-1111-111111111111'`), + "anon UPDATE buyer_id (attacker redirect) -> BLOCKED"); +// B) anon UPDATE crypto_amount -> MUST raise +ok(await raises(`UPDATE p2p_fiat_trades SET crypto_amount=999999 WHERE id='11111111-1111-1111-1111-111111111111'`), + "anon UPDATE crypto_amount (amount tamper) -> BLOCKED"); +// C) anon UPDATE status only -> MUST succeed (non-custodial fields open) +ok(!(await raises(`UPDATE p2p_fiat_trades SET status='paid', buyer_payment_reference='x' WHERE id='11111111-1111-1111-1111-111111111111'`)), + "anon UPDATE status/proof only -> ALLOWED (correct)"); +// D) service_role UPDATE buyer_id -> MUST succeed (exempt) +await db.exec(`SELECT set_config('request.jwt.claim.role','service_role',false);`); +ok(!(await raises(`UPDATE p2p_fiat_trades SET buyer_id='55555555-5555-5555-5555-555555555555' WHERE id='11111111-1111-1111-1111-111111111111'`)), + "service_role UPDATE buyer_id -> ALLOWED (reconciliation)"); +// verify buyer_id was NOT changed by the blocked anon attempt +const r:any = await db.query(`SELECT buyer_id FROM p2p_fiat_trades WHERE id='11111111-1111-1111-1111-111111111111'`); +ok(r.rows[0].buyer_id==='55555555-5555-5555-5555-555555555555', + "final buyer_id = service_role value (attacker redirect never persisted)"); +console.log(`\nRESULT: ${pass} passed, ${fail} failed`); +Deno.exit(fail>0?1:0); diff --git a/web/supabase/migrations/__tests__/rls_revoke_enforcement.test.ts b/web/supabase/migrations/__tests__/rls_revoke_enforcement.test.ts new file mode 100644 index 00000000..60592634 --- /dev/null +++ b/web/supabase/migrations/__tests__/rls_revoke_enforcement.test.ts @@ -0,0 +1,52 @@ +// DB-backed verification of migrations 20260725010000 (financial RLS) + 20260725030000 +// (escrow REVOKE). Replicates the Supabase RLS model on a real Postgres engine +// (pglite/WASM): CREATE ROLE anon/service_role + an auth.role() stub that reads the JWT +// claim GUC exactly as Supabase does, then proves: anon can't read balances/payment PII +// or execute the escrow RPCs, while the SECURITY DEFINER read path + service_role still +// work. Run: deno run -A web/supabase/migrations/__tests__/rls_revoke_enforcement.test.ts +// Proves policy/grant LOGIC; final in-situ confirmation is the staging deploy (owner-gated). +import { PGlite } from "npm:@electric-sql/pglite"; +const db = new PGlite(); +let pass=0,fail=0; +const ok=(c:boolean,m:string)=>{c?(pass++,console.log(" ✅ "+m)):(fail++,console.log(" ❌ "+m));}; +async function denied(sql:string){ try{ await db.exec(sql); return false; }catch(e){ return String(e).includes("permission denied")||String(e).includes("denied"); } } +async function rows(sql:string){ const r:any=await db.query(sql); return r.rows.length; } + +await db.exec(` +CREATE ROLE anon NOLOGIN; CREATE ROLE authenticated NOLOGIN; CREATE ROLE service_role NOLOGIN; +CREATE SCHEMA auth; +CREATE FUNCTION auth.role() RETURNS text AS $$ SELECT current_setting('request.jwt.claim.role', true) $$ LANGUAGE sql STABLE; +-- balances table: Supabase grants anon SELECT, RLS filters. After dropping the anon USING(true) policy -> default deny. +CREATE TABLE user_internal_balances (user_id uuid, token text, available numeric); +INSERT INTO user_internal_balances VALUES ('11111111-1111-1111-1111-111111111111','HEZ', 500); +GRANT SELECT ON user_internal_balances TO anon, authenticated; +ALTER TABLE user_internal_balances ENABLE ROW LEVEL SECURITY; +-- (no permissive policy for anon = the post-migration state; reads go via SECURITY DEFINER RPC) +CREATE FUNCTION get_user_internal_balance(p uuid) RETURNS SETOF user_internal_balances AS $$ SELECT * FROM user_internal_balances WHERE user_id=p $$ LANGUAGE sql STABLE SECURITY DEFINER; +GRANT EXECUTE ON FUNCTION get_user_internal_balance(uuid) TO anon; +-- payment methods: REVOKE ALL from anon (IBAN PII) +CREATE TABLE p2p_user_payment_methods (user_id uuid, iban text); +INSERT INTO p2p_user_payment_methods VALUES ('11111111-1111-1111-1111-111111111111','TR00...'); +ALTER TABLE p2p_user_payment_methods ENABLE ROW LEVEL SECURITY; +CREATE POLICY user_pm_service_only ON p2p_user_payment_methods FOR ALL USING (auth.role()='service_role') WITH CHECK (auth.role()='service_role'); +REVOKE ALL ON p2p_user_payment_methods FROM anon, authenticated, PUBLIC; +GRANT ALL ON p2p_user_payment_methods TO service_role; +-- escrow RPC: REVOKE from anon +CREATE FUNCTION release_escrow_internal(a uuid,b uuid,t text,amt numeric) RETURNS void AS $$ BEGIN END $$ LANGUAGE plpgsql; +REVOKE EXECUTE ON FUNCTION release_escrow_internal(uuid,uuid,text,numeric) FROM PUBLIC, anon, authenticated; +GRANT EXECUTE ON FUNCTION release_escrow_internal(uuid,uuid,text,numeric) TO service_role; +`); + +console.log("RLS / REVOKE role-enforcement (Supabase auth.role() simulated):"); +// anon context +await db.exec(`SELECT set_config('request.jwt.claim.role','anon',false); SET ROLE anon;`); +ok(await rows(`SELECT * FROM user_internal_balances`)===0, "anon direct SELECT balances -> 0 rows (USING(true) leak closed)"); +ok(await rows(`SELECT * FROM get_user_internal_balance('11111111-1111-1111-1111-111111111111')`)===1, "anon via SECURITY DEFINER RPC -> works (legit path intact)"); +ok(await denied(`SELECT * FROM p2p_user_payment_methods`), "anon SELECT payment_methods (IBAN PII) -> permission DENIED"); +ok(await denied(`SELECT release_escrow_internal('11111111-1111-1111-1111-111111111111','22222222-2222-2222-2222-222222222222','HEZ',100)`), "anon EXECUTE release_escrow_internal -> permission DENIED (drain closed)"); +// service_role context +await db.exec(`RESET ROLE; SELECT set_config('request.jwt.claim.role','service_role',false); SET ROLE service_role;`); +ok((await rows(`SELECT * FROM p2p_user_payment_methods`))>=1, "service_role SELECT payment_methods -> allowed"); +ok(!(await denied(`SELECT release_escrow_internal('11111111-1111-1111-1111-111111111111','22222222-2222-2222-2222-222222222222','HEZ',100)`)), "service_role EXECUTE release_escrow_internal -> allowed"); +console.log(`\nRESULT: ${pass} passed, ${fail} failed`); +Deno.exit(fail>0?1:0); diff --git a/web/vite.config.ts b/web/vite.config.ts index 6d8b7e36..04c72adb 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -1,5 +1,5 @@ /// -import { defineConfig } from "vitest/config"; +import { defineConfig, configDefaults } from "vitest/config"; import react from "@vitejs/plugin-react-swc"; import path from "path"; import { nodePolyfills } from 'vite-plugin-node-polyfills'; @@ -11,6 +11,9 @@ export default defineConfig(({ command }) => ({ globals: true, environment: 'jsdom', setupFiles: './src/tests/setup.ts', + // supabase/** holds Deno tests (Deno.test + pglite) run via `deno test`, + // not vitest — exclude them from the web (node/jsdom) test sweep. + exclude: [...configDefaults.exclude, 'supabase/**'], alias: { 'vite-plugin-node-polyfills/shims/buffer': path.resolve(__dirname, './src/tests/mocks/buffer-shim.ts'), 'vite-plugin-node-polyfills/shims/global': path.resolve(__dirname, './src/tests/mocks/global-shim.ts'), @@ -66,6 +69,9 @@ export default defineConfig(({ command }) => ({ optimizeDeps: { include: ['@pezkuwi/util-crypto', '@pezkuwi/util', '@pezkuwi/api', '@pezkuwi/extension-dapp', '@pezkuwi/keyring', 'buffer'], }, + // Strip all console.* and debugger statements from production bundles so the + // 600+ dev-time console calls never ship. Dev keeps full logging. + esbuild: command === 'build' ? { drop: ['console', 'debugger'] } : {}, build: { rollupOptions: { external: [],