Skill: getlighty/getlighty-clawsync (version 2.0.0)

--- name: clawsync description: > Portable identity vault for OpenClaw. Syncs knowledge, packages, and memory across machines like iCloud — automatic, invisible, encrypted. Bring your own storage (Google Drive, Dropbox, FTP, Git) or use ClawSync Cloud. version: 2.0.0 author: getlighty license: MIT tags: - sync - identity - migration - packages - backup - roaming triggers: - vault - sync - migrate - packages - roam - backup - restore - cloud tools: - exec - file --- # ClawSync — Portable Agent Environment You are an OpenClaw agent with the **clawsync** skill installed. This skill gives you automatic, continuous sync of the user's knowledge and environment across all their machines — like iCloud for AI agents. ## Architecture ClawSync works like a combination of iCloud and Git: - **Auto-sync**: file changes are detected, auto-committed, and pushed - **Versioned**: every change is a commit — full history, rollback anytime - **Encrypted**: Ed25519 keypair per installation — private key never leaves the machine - **Multi-provider**: user picks where their vault lives ## Providers | Provider | Type | Setup | |----------|------|-------| | ClawSync Cloud | Managed (paid per MB) | One command — `clawsync cloud signup` | | Google Drive | BYOS (free) | OAuth flow via `clawsync provider gdrive` | | Dropbox | BYOS (free) | OAuth flow via `clawsync provider dropbox` | | FTP/SFTP | BYOS (free) | Host + credentials via `clawsync provider ftp` | | Git | BYOS (free) | Any git remote via `clawsync provider git` | | S3 | BYOS (free) | Any S3-compatible via `clawsync provider s3` | | WebDAV | BYOS (free) | Nextcloud etc via `clawsync provider webdav` | | Local | BYOS (free) | USB/NAS mount via `clawsync provider local` | "BYOS" = Bring Your Own Storage. Free forever. ClawSync Cloud is the convenience option for people who don't want to manage storage. ## What Syncs ``` ALWAYS SYNCED (shared knowledge pool): identity/USER.md Who you are knowledge/MEMORY.md Long-term memory knowledge/projects/ Project context requirements.yaml System packages skills-manifest.yaml Installed skills list NEVER AUTO-SYNCED (per-instance): local/SOUL.md This agent's personality local/IDENTITY.md This agent's identity local/config-override Local config tweaks OPT-IN SYNC: openclaw config.json Gateway/model config credentials/ Channel auth (encrypted separately) ``` ## Commands When the user asks about vault operations, use these: ### First-Time Setup - **"set up clawsync"** → `clawsync.sh init` — creates vault, generates Ed25519 keypair, scans packages - **"use clawsync cloud"** → `clawsync.sh cloud signup` — creates cloud account, auto-configures provider - **"use google drive for vault"** → `clawsync.sh provider gdrive` — OAuth flow for Google Drive - **"use dropbox for vault"** → `clawsync.sh provider dropbox` - **"use FTP for vault"** → `clawsync.sh provider ftp` — asks for host, port, credentials ### Daily Use (mostly invisible) - **"sync status"** → `clawsync.sh status` — show sync state, last push/pull, provider info - **"sync now"** → `sync-engine.sh push` — force immediate sync - **"show vault history"** → `sync-engine.sh log` — show commit history (like `git log`) - **"rollback vault"** → `sync-engine.sh rollback` — revert to previous state - **"what changed"** → `sync-engine.sh diff` — show pending changes ### Packages - **"scan packages"** → `track-packages.sh scan` - **"what's different from vault"** → `track-packages.sh diff` - **"install missing packages"** → `track-packages.sh install` — shows commands, asks before running ### Migration - **"migrate to this machine"** / **"pull from vault"** → `migrate.sh pull` — interactive restore wizard - **"push my soul to vault"** → `migrate.sh push-identity` — explicit opt-in only ### Profiles Each machine backs up to its own named profile (default: hostname). Profiles are separate — different machines can have different knowledge, memory, and packages without interfering with each other. - **"show profile"** / **"what profile am I on"** → `clawsync.sh profile show` — displays current profile name - **"list profiles"** / **"what profiles exist"** → `clawsync.sh profile list` — lists all profiles in the remote storage - **"rename profile"** → `clawsync.sh profile rename <new-name>` — renames this machine's profile - **"restore from another machine"** / **"pull profile X"** → `clawsync.sh profile pull <name>` — restores a specific profile to this machine (overwrites local vault with that profile's data, does NOT affect the source) ### Key Management - **"show my vault key"** → `keypair.sh show-public` — display public key (for adding to providers) - **"regenerate vault key"** → `keypair.sh rotate` — generates new keypair, re-registers with provider ## Behavior Rules 1. **Auto-sync is ON by default** after setup — like iCloud. The user should not have to think about syncing. Changes are pushed within 30 seconds. 2. **Never sync SOUL.md or IDENTITY.md without explicit permission.** 3. **Always confirm before installing packages.** Show the diff, let them pick. 4. **Private key never leaves the machine.** It's stored in `~/.clawsync/keys/` with 600 permissions. The public key is registered with the vault provider. 5. **Conflicts:** If remote has changes the user hasn't seen, show a diff and let them choose. Auto-merge for non-conflicting changes (like git). 6. **Be transparent about costs.** If using ClawSync Cloud, show current usage and estimated cost when asked. Never surprise the user with charges. 7. **Offline-first.** Everything works locally. Sync happens when connectivity is available. Queue changes and push when back online. 8. **Profiles are separate by default.** Each machine pushes to its own named profile (default: hostname). Profiles never merge automatically. If the user wants data from another machine, they must explicitly pull that profile with `clawsync.sh profile pull <name>`. ## ClawSync Cloud Pricing When users ask about pricing: - **First 50 MB free** — enough for most single-user vaults - **$0.005/MB/month** after that (~$0.50/month for 100 MB extra) - **No per-instance fees** — connect unlimited machines - **No bandwidth fees** — sync as often as you want - Example: typical vault is 10-30 MB → completely free - Example: power user with 200 MB → $0.75/month - Example: team vault with 2 GB → ~$10/month

path: README.md
content: # 🦞 ClawSync

**Portable identity vault for OpenClaw. Your AI agent follows you everywhere.**

[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![OpenClaw Skill](https://img.shields.io/badge/OpenClaw-skill-orange.svg)](SKILL.md)

ClawSync is an open-source OpenClaw skill that syncs your agent's knowledge, memory, and system packages across all your machines — like iCloud, but for AI agents.

## The idea

You have a work laptop, a home machine, maybe a server. Each runs OpenClaw. You want them to share your knowledge but have their own personality. ClawSync makes that work:

- **Knowledge is shared** — USER.md, MEMORY.md, projects, package lists
- **Soul is local** — each instance keeps its own SOUL.md and IDENTITY.md
- **Sync is invisible** — changes auto-detect, auto-commit, auto-push
- **History is versioned** — every change is a git commit, rollback anytime
- **Storage is your choice** — Google Drive, Dropbox, Git, FTP, S3, or our managed cloud

## Quick start

```bash
# Install the skill
clawdhub install clawsync

# Initialize (scans packages, generates keypair, captures knowledge)
clawsync init

# Pick storage — managed cloud (50 MB free):
clawsync provider setup cloud

# Or bring your own:
clawsync provider setup gdrive    # Google Drive
clawsync provider setup dropbox   # Dropbox
clawsync provider setup git       # Any git repo
clawsync provider setup ftp       # FTP/SFTP
clawsync provider setup s3        # S3-compatible
clawsync provider setup local     # USB/NAS

# Start auto-sync
clawsync sync start
```

### On a new machine

```bash
# Install OpenClaw + skill
npm install -g openclaw
clawdhub install clawsync

# Connect to your vault
clawsync init
clawsync provider setup cloud  # same credentials

# Pull everything
clawsync migrate pull
# → Restores knowledge, shows package diff, offers to install missing
```

## How sync works

ClawSync works like a combination of **iCloud** and **Git**:

1. **File watcher** detects changes in your vault (real-time via `fswatch`, or polling)
2. **Auto-commit** creates a local git commit with what changed
3. **Auto-push** sends to your storage provider
4. Every push is **signed** with your machine's Ed25519 private key
5. On pull, conflicts are shown as diffs — you choose what wins

```
~/.clawsync/
├── config.yaml              # Vault configuration
├── requirements.yaml        # System packages (brew/apt/npm/pip)
├── manifest.json            # What's in the vault + checksums
├── identity/
│   ├── USER.md              # Shared — who you are
│   └── instances.yaml       # All connected machines
├── knowledge/
│   ├── MEMORY.md            # Shared — long-term memory
│   └── projects/            # Shared — project context
├── local/                   # ⚠ NOT synced
│   ├── SOUL.md              # This machine's personality
│   └── IDENTITY.md          # This machine's identity
└── keys/
    ├── clawsync_ed25519     # Private key (never leaves machine)
    └── clawsync_ed25519.pub # Public key (registered with provider)
```

## Package tracking

ClawSync scans and tracks installed packages across:

| Manager | macOS | Linux |
|---------|-------|-------|
| Homebrew | ✓ | ✓ |
| apt | — | ✓ |
| snap | — | ✓ |
| flatpak | — | ✓ |
| npm (global) | ✓ | ✓ |
| pip (global) | ✓ | ✓ |

When migrating, it shows what's missing and generates install commands for the target OS.

## ClawSync Cloud

The skill is 100% free and open source (MIT). **ClawSync Cloud** is the optional managed storage for people who don't want to configure their own:

| Usage | Cost |
|-------|------|
| First 50 MB | **Free** |
| After that | $0.005/MB/month |
| Per-instance fee | None |
| Bandwidth | Unlimited |

Most single-user vaults are 10-30 MB — comfortably free. A power user at 200 MB pays ~$0.75/month.

## Commands

| Command | What it does |
|---------|-------------|
| `clawsync init` | Initialize vault, generate keypair, scan packages |
| `clawsync provider setup <n>` | Configure storage provider |
| `clawsync provider list` | Show available providers |
| `clawsync sync start` | Start auto-sync daemon |
| `clawsync sync stop` | Stop auto-sync |
| `clawsync sync push` | Force push now |
| `clawsync sync pull` | Force pull now |
| `clawsync log` | Show vault commit history |
| `clawsync diff` | Show pending changes |
| `clawsync rollback` | Revert to previous state |
| `clawsync packages scan` | Scan installed packages |
| `clawsync packages diff` | Compare local vs vault |
| `clawsync packages install` | Install missing from vault |
| `clawsync migrate pull` | Full migration wizard |
| `clawsync migrate push-identity` | Push SOUL.md to vault (opt-in) |
| `clawsync key show` | Show public key |
| `clawsync key rotate` | Generate new keypair |
| `clawsync status` | Full vault status |

## Security

- **Ed25519 keypair** per machine — private key never leaves the device (stored with 600 permissions)
- **Credentials in system keychain** — macOS Keychain or libsecret on Linux, never plaintext
- **Signed pushes** — every sync is signed with your private key
- **SOUL.md and IDENTITY.md never auto-sync** — explicit opt-in only
- **Packages shown before installing** — never auto-executed
- **Full audit trail** — every change is a git commit

## Repo structure

```
clawsync/
├── SKILL.md               # OpenClaw skill definition
├── clawsync.sh            # Main CLI entry point
├── track-packages.sh       # Package scanner
├── migrate.sh              # Migration wizard
├── src/
│   ├── sync-engine.sh      # iCloud-like auto-sync + history
│   ├── keypair.sh          # Ed25519 key management
│   └── provider.sh         # Provider manager
├── providers/
│   ├── cloud.sh            # ClawSync Cloud (managed)
│   ├── gdrive.sh           # Google Drive (via rclone)
│   ├── dropbox.sh          # Dropbox (via rclone)
│   ├── ftp.sh              # FTP/SFTP (via rsync+ssh)
│   ├── git.sh              # Any Git remote
│   ├── s3.sh               # S3-compatible (via rclone)
│   ├── webdav.sh           # WebDAV (via rclone)
│   └── local.sh            # Local directory
├── web/
│   └── index.html          # Landing page
├── LICENSE                  # MIT
└── README.md
```

## Contributing

PRs welcome. The codebase is intentionally all bash — no build step, no dependencies beyond standard Unix tools + rclone for cloud storage. This runs on the same machines OpenClaw runs on.

## License

MIT — do whatever you want with it.


path: clawsync.sh
content: #!/usr/bin/env bash
# ClawSync — Main CLI
# Portable identity vault for OpenClaw
# Usage: clawsync.sh <command> [args]

set -euo pipefail

VERSION="3.0.0"
VAULT_DIR="$HOME/.clawsync"
CONFIG="$VAULT_DIR/config.yaml"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SRC_DIR="$SCRIPT_DIR/src"
PROVIDERS_DIR="$SCRIPT_DIR/providers"

timestamp() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }
log() { echo "[clawsync$(timestamp)] $*"; }

get_profile_name() {
  local name
  name=$(grep 'profile_name:' "$CONFIG" 2>/dev/null | head -1 | awk '{print $2}' | tr -d '"')
  echo "${name:-$(hostname -s 2>/dev/null || echo default)}"
}

detect_os() { case "$(uname -s)" in Darwin) echo "macos";; Linux) echo "linux";; *) echo "unknown";; esac; }
detect_openclaw_dir() {
  if [[ -d "$HOME/.openclaw" ]]; then echo "$HOME/.openclaw"
  elif [[ -d "$HOME/clawd" ]]; then echo "$HOME/clawd"
  else echo ""; fi
}

# ─── Init ─────────────────────────────────────────────────────

cmd_init() {
  if [[ -f "$CONFIG" ]]; then
    log "Already initialized at $VAULT_DIR"
    log "Run 'clawsync.sh status' or 'clawsync.sh provider setup <name>'"
    return 0
  fi

  log "Initializing ClawSync v$VERSION..."

  local os instance_id openclaw_dir
  os="$(detect_os)"
  instance_id="$(hostname -s 2>/dev/null || echo x)-$(date +%s | shasum -a 256 2>/dev/null | cut -c1-8 || echo $$)"
  openclaw_dir="$(detect_openclaw_dir)"

  mkdir -p "$VAULT_DIR"/{identity,knowledge,knowledge/projects,local}

  # Create config
  cat > "$CONFIG" <<YAML
# ClawSync Configuration v$VERSION
# Generated: $(timestamp)

vault:
  version: "$VERSION"
  instance_id: "$instance_id"
  profile_name: "$(hostname -s 2>/dev/null || echo default)"

system:
  os: "$os"
  hostname: "$(hostname -s 2>/dev/null || echo unknown)"
  openclaw_dir: "$openclaw_dir"

# Set by 'clawsync.sh provider setup <name>'
provider: ""

sync:
  interval_minutes: 5
  # What to auto-sync
  knowledge: true
  memory: true
  projects: true
  requirements: true
  skills_list: true
  config: false
  soul: false
  identity_md: false

packages:
  track:
    brew: true
    apt: true
    snap: true
    flatpak: true
    npm_global: true
    pip_global: true
YAML

  # Create instance registry
  cat > "$VAULT_DIR/identity/instances.yaml" <<YAML
# ClawSync Instance Registry
instances:
  - id: "$instance_id"
    hostname: "$(hostname -s 2>/dev/null || echo unknown)"
    os: "$os"
    openclaw_dir: "$openclaw_dir"
    registered: "$(timestamp)"
    last_sync: null
    soul_name: ""
YAML

  # Generate keypair
  bash "$SRC_DIR/keypair.sh" generate

  # Copy from openclaw if exists
  if [[ -n "$openclaw_dir" && -d "$openclaw_dir" ]]; then
    local ws="$openclaw_dir/workspace"
    [[ -f "$ws/USER.md" ]]     && cp "$ws/USER.md"     "$VAULT_DIR/identity/USER.md"     && log "  Imported USER.md"
    [[ -f "$ws/MEMORY.md" ]]   && cp "$ws/MEMORY.md"   "$VAULT_DIR/knowledge/MEMORY.md"  && log "  Imported MEMORY.md"
    [[ -f "$ws/SOUL.md" ]]     && cp "$ws/SOUL.md"     "$VAULT_DIR/local/SOUL.md"        && log "  Saved SOUL.md (local-only)"
    [[ -f "$ws/IDENTITY.md" ]] && cp "$ws/IDENTITY.md"  "$VAULT_DIR/local/IDENTITY.md"   && log "  Saved IDENTITY.md (local-only)"
    if [[ -d "$ws/memory/projects" ]]; then
      cp -r "$ws/memory/projects/"* "$VAULT_DIR/knowledge/projects/" 2>/dev/null && log "  Imported project context"
    fi
  fi

  # Initial package scan
  bash "$SRC_DIR/../track-packages.sh" scan 2>/dev/null || true

  # Initialize local git for history
  bash "$SRC_DIR/sync-engine.sh" status >/dev/null 2>&1 || true

  echo ""
  echo "🦞 ClawSync initialized!"
  echo ""
  local profile_name
  profile_name=$(get_profile_name)
  echo "  Instance:  $instance_id"
  echo "  Profile:   $profile_name"
  echo "  Vault:     $VAULT_DIR"
  echo "  OS:        $os"
  echo "  OpenClaw:  ${openclaw_dir:-not found}"
  echo ""
  echo "Next: pick a storage provider:"
  echo "  clawsync.sh provider setup cloud      ← managed, easiest"
  echo "  clawsync.sh provider setup gdrive     ← Google Drive"
  echo "  clawsync.sh provider setup dropbox    ← Dropbox"
  echo "  clawsync.sh provider setup git        ← any Git repo"
  echo "  clawsync.sh provider setup ftp        ← FTP/SFTP server"
  echo "  clawsync.sh provider setup s3         ← S3 bucket"
  echo "  clawsync.sh provider setup local      ← USB/NAS"
  echo ""
}

# ─── Status ───────────────────────────────────────────────────

cmd_status() {
  if [[ ! -f "$CONFIG" ]]; then
    echo "ClawSync not initialized. Run: clawsync.sh init"
    return 1
  fi

  bash "$SRC_DIR/sync-engine.sh" status

  # Provider details
  local provider
  provider=$(grep '^provider:' "$CONFIG" 2>/dev/null | awk '{print $2}' | tr -d '"')
  if [[ -n "$provider" && -f "$PROVIDERS_DIR/${provider}.sh" ]]; then
    echo "Provider Details"
    echo "━━━━━━━━━━━━━━━━"
    bash "$PROVIDERS_DIR/${provider}.sh" info
    echo ""
  fi
}

# ─── Cloud shortcut ───────────────────────────────────────────

cmd_cloud() {
  local subcmd="${1:-}"
  case "$subcmd" in
    signup|setup) bash "$SRC_DIR/provider.sh" setup cloud ;;
    usage)        bash "$PROVIDERS_DIR/cloud.sh" usage ;;
    *)            bash "$SRC_DIR/provider.sh" setup cloud ;;
  esac
}

# ─── Profile ─────────────────────────────────────────────────

cmd_profile() {
  if [[ ! -f "$CONFIG" ]]; then
    echo "ClawSync not initialized. Run: clawsync.sh init"
    return 1
  fi

  local subcmd="${1:-show}"
  case "$subcmd" in
    show)
      echo "Profile: $(get_profile_name)"
      ;;
    rename)
      local new_name="${2:-}"
      if [[ -z "$new_name" ]]; then
        echo "Usage: clawsync.sh profile rename <name>"
        return 1
      fi
      if [[ ! "$new_name" =~ ^[a-zA-Z0-9_-]{1,64}$ ]]; then
        echo "Invalid name. Use letters, numbers, dashes, underscores (max 64 chars)."
        return 1
      fi
      if [[ "$(uname -s)" == "Darwin" ]]; then
        sed -i '' "s/^  profile_name: .*/  profile_name: \"$new_name\"/" "$CONFIG"
      else
        sed -i "s/^  profile_name: .*/  profile_name: \"$new_name\"/" "$CONFIG"
      fi
      log "Profile renamed to: $new_name"
      ;;
    list)
      local provider
      provider=$(grep '^provider:' "$CONFIG" 2>/dev/null | awk '{print $2}' | tr -d '"')
      if [[ -z "$provider" || ! -f "$PROVIDERS_DIR/${provider}.sh" ]]; then
        echo "No provider configured."
        return 1
      fi
      CLAWSYNC_PROFILE="$(get_profile_name)" bash "$PROVIDERS_DIR/${provider}.sh" list-profiles
      ;;
    pull)
      local target="${2:-}"
      if [[ -z "$target" ]]; then
        echo "Usage: clawsync.sh profile pull <name>"
        echo "Use 'clawsync.sh profile list' to see available profiles."
        return 1
      fi
      log "Pulling profile: $target"
      CLAWSYNC_PROFILE="$target" bash "$SRC_DIR/sync-engine.sh" pull
      log "Restored profile: $target"
      ;;
    *)
      echo "Usage: clawsync.sh profile {show|rename|list|pull}"
      ;;
  esac
}

# ─── Help ─────────────────────────────────────────────────────

cmd_help() {
  echo ""
  echo "🦞 ClawSync v$VERSION — Portable Agent Environment"
  echo ""
  echo "Setup:"
  echo "  init                    Initialize vault on this machine"
  echo "  provider setup <name>   Configure storage (cloud/gdrive/dropbox/ftp/git/s3/local)"
  echo "  provider list           Show available providers"
  echo "  cloud signup            Quick setup for ClawSync Cloud"
  echo ""
  echo "Sync:"
  echo "  sync start              Start auto-sync (iCloud-like)"
  echo "  sync stop               Stop auto-sync"
  echo "  sync push               Force push now"
  echo "  sync pull               Force pull now"
  echo "  sync status             Show sync status"
  echo ""
  echo "History:"
  echo "  log                     Show vault commit history"
  echo "  diff                    Show pending changes"
  echo "  rollback                Revert to previous state"
  echo ""
  echo "Packages:"
  echo "  packages scan           Scan installed packages"
  echo "  packages diff           Compare local vs vault"
  echo "  packages install        Install missing from vault"
  echo ""
  echo "Migration:"
  echo "  migrate pull            Pull vault to this machine"
  echo "  migrate push-identity   Push SOUL/IDENTITY to vault (opt-in)"
  echo "  migrate status          Show migration status"
  echo ""
  echo "Keys:"
  echo "  key show                Show public key"
  echo "  key fingerprint         Show key fingerprint"
  echo "  key push                Push public key to vault"
  echo "  key rotate              Generate new keypair"
  echo "  key verify              Check keypair health"
  echo ""
  echo "Profiles:"
  echo "  profile show            Show current profile name"
  echo "  profile rename <name>   Rename this machine's profile"
  echo "  profile list            List all remote profiles"
  echo "  profile pull <name>     Restore from a specific profile"
  echo ""
  echo "Other:"
  echo "  status                  Full vault status"
  echo "  help                    This help"
  echo ""
}

# ─── Route Commands ───────────────────────────────────────────

case "${1:-help}" in
  init)      cmd_init ;;
  status)    cmd_status ;;
  help|-h)   cmd_help ;;

  # Provider
  provider)  bash "$SRC_DIR/provider.sh" "${2:-list}" "${3:-}" ;;
  cloud)     cmd_cloud "${2:-}" ;;

  # Sync
  sync)
    case "${2:-status}" in
      start)  bash "$SRC_DIR/sync-engine.sh" start ;;
      stop)   bash "$SRC_DIR/sync-engine.sh" stop ;;
      push)   bash "$SRC_DIR/sync-engine.sh" push ;;
      pull)   bash "$SRC_DIR/sync-engine.sh" pull ;;
      status) bash "$SRC_DIR/sync-engine.sh" status ;;
      *)      echo "Usage: clawsync.sh sync {start|stop|push|pull|status}" ;;
    esac ;;

  # History
  log)       bash "$SRC_DIR/sync-engine.sh" log ;;
  diff)      bash "$SRC_DIR/sync-engine.sh" diff ;;
  rollback)  bash "$SRC_DIR/sync-engine.sh" rollback ;;

  # Packages
  packages)  bash "$SCRIPT_DIR/track-packages.sh" "${2:-scan}" "${3:-}" ;;

  # Migration
  migrate)   bash "$SCRIPT_DIR/migrate.sh" "${2:-status}" ;;

  # Keys
  key)       bash "$SRC_DIR/keypair.sh" "${2:-show-public}" ;;

  # Profiles
  profile)   cmd_profile "${2:-show}" "${3:-}" ;;

  *)
    echo "Unknown command: $1"
    cmd_help
    exit 1 ;;
esac


path: cloud-api/package-lock.json
content: {
  "name": "clawsync-cloud-api",
  "version": "1.0.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "clawsync-cloud-api",
      "version": "1.0.0",
      "dependencies": {
        "@aws-sdk/client-s3": "^3.700.0",
        "@hono/node-server": "^1.13.0",
        "hono": "^4.6.0",
        "pg": "^8.13.0",
        "stripe": "^17.0.0"
      },
      "devDependencies": {
        "@types/node": "^22.0.0",
        "@types/pg": "^8.11.0",
        "tsx": "^4.19.0",
        "typescript": "^5.7.0"
      }
    },
    "node_modules/@aws-crypto/crc32": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/util": "^5.2.0",
        "@aws-sdk/types": "^3.222.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=16.0.0"
      }
    },
    "node_modules/@aws-crypto/crc32c": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/util": "^5.2.0",
        "@aws-sdk/types": "^3.222.0",
        "tslib": "^2.6.2"
      }
    },
    "node_modules/@aws-crypto/sha1-browser": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/supports-web-crypto": "^5.2.0",
        "@aws-crypto/util": "^5.2.0",
        "@aws-sdk/types": "^3.222.0",
        "@aws-sdk/util-locate-window": "^3.0.0",
        "@smithy/util-utf8": "^2.0.0",
        "tslib": "^2.6.2"
      }
    },
    "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/is-array-buffer": "^2.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/util-buffer-from": "^2.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-crypto/sha256-browser": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/sha256-js": "^5.2.0",
        "@aws-crypto/supports-web-crypto": "^5.2.0",
        "@aws-crypto/util": "^5.2.0",
        "@aws-sdk/types": "^3.222.0",
        "@aws-sdk/util-locate-window": "^3.0.0",
        "@smithy/util-utf8": "^2.0.0",
        "tslib": "^2.6.2"
      }
    },
    "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/is-array-buffer": "^2.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/util-buffer-from": "^2.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-crypto/sha256-js": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/util": "^5.2.0",
        "@aws-sdk/types": "^3.222.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=16.0.0"
      }
    },
    "node_modules/@aws-crypto/supports-web-crypto": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      }
    },
    "node_modules/@aws-crypto/util": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.222.0",
        "@smithy/util-utf8": "^2.0.0",
        "tslib": "^2.6.2"
      }
    },
    "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/is-array-buffer": "^2.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/util-buffer-from": "^2.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=14.0.0"
      }
    },
    "node_modules/@aws-sdk/client-s3": {
      "version": "3.995.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.995.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/sha1-browser": "5.2.0",
        "@aws-crypto/sha256-browser": "5.2.0",
        "@aws-crypto/sha256-js": "5.2.0",
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/credential-provider-node": "^3.972.10",
        "@aws-sdk/middleware-bucket-endpoint": "^3.972.3",
        "@aws-sdk/middleware-expect-continue": "^3.972.3",
        "@aws-sdk/middleware-flexible-checksums": "^3.972.9",
        "@aws-sdk/middleware-host-header": "^3.972.3",
        "@aws-sdk/middleware-location-constraint": "^3.972.3",
        "@aws-sdk/middleware-logger": "^3.972.3",
        "@aws-sdk/middleware-recursion-detection": "^3.972.3",
        "@aws-sdk/middleware-sdk-s3": "^3.972.11",
        "@aws-sdk/middleware-ssec": "^3.972.3",
        "@aws-sdk/middleware-user-agent": "^3.972.11",
        "@aws-sdk/region-config-resolver": "^3.972.3",
        "@aws-sdk/signature-v4-multi-region": "3.995.0",
        "@aws-sdk/types": "^3.973.1",
        "@aws-sdk/util-endpoints": "3.995.0",
        "@aws-sdk/util-user-agent-browser": "^3.972.3",
        "@aws-sdk/util-user-agent-node": "^3.972.10",
        "@smithy/config-resolver": "^4.4.6",
        "@smithy/core": "^3.23.2",
        "@smithy/eventstream-serde-browser": "^4.2.8",
        "@smithy/eventstream-serde-config-resolver": "^4.3.8",
        "@smithy/eventstream-serde-node": "^4.2.8",
        "@smithy/fetch-http-handler": "^5.3.9",
        "@smithy/hash-blob-browser": "^4.2.9",
        "@smithy/hash-node": "^4.2.8",
        "@smithy/hash-stream-node": "^4.2.8",
        "@smithy/invalid-dependency": "^4.2.8",
        "@smithy/md5-js": "^4.2.8",
        "@smithy/middleware-content-length": "^4.2.8",
        "@smithy/middleware-endpoint": "^4.4.16",
        "@smithy/middleware-retry": "^4.4.33",
        "@smithy/middleware-serde": "^4.2.9",
        "@smithy/middleware-stack": "^4.2.8",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/node-http-handler": "^4.4.10",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/smithy-client": "^4.11.5",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "@smithy/util-base64": "^4.3.0",
        "@smithy/util-body-length-browser": "^4.2.0",
        "@smithy/util-body-length-node": "^4.2.1",
        "@smithy/util-defaults-mode-browser": "^4.3.32",
        "@smithy/util-defaults-mode-node": "^4.2.35",
        "@smithy/util-endpoints": "^3.2.8",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-retry": "^4.2.8",
        "@smithy/util-stream": "^4.5.12",
        "@smithy/util-utf8": "^4.2.0",
        "@smithy/util-waiter": "^4.2.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/client-sso": {
      "version": "3.993.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.993.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/sha256-browser": "5.2.0",
        "@aws-crypto/sha256-js": "5.2.0",
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/middleware-host-header": "^3.972.3",
        "@aws-sdk/middleware-logger": "^3.972.3",
        "@aws-sdk/middleware-recursion-detection": "^3.972.3",
        "@aws-sdk/middleware-user-agent": "^3.972.11",
        "@aws-sdk/region-config-resolver": "^3.972.3",
        "@aws-sdk/types": "^3.973.1",
        "@aws-sdk/util-endpoints": "3.993.0",
        "@aws-sdk/util-user-agent-browser": "^3.972.3",
        "@aws-sdk/util-user-agent-node": "^3.972.9",
        "@smithy/config-resolver": "^4.4.6",
        "@smithy/core": "^3.23.2",
        "@smithy/fetch-http-handler": "^5.3.9",
        "@smithy/hash-node": "^4.2.8",
        "@smithy/invalid-dependency": "^4.2.8",
        "@smithy/middleware-content-length": "^4.2.8",
        "@smithy/middleware-endpoint": "^4.4.16",
        "@smithy/middleware-retry": "^4.4.33",
        "@smithy/middleware-serde": "^4.2.9",
        "@smithy/middleware-stack": "^4.2.8",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/node-http-handler": "^4.4.10",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/smithy-client": "^4.11.5",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "@smithy/util-base64": "^4.3.0",
        "@smithy/util-body-length-browser": "^4.2.0",
        "@smithy/util-body-length-node": "^4.2.1",
        "@smithy/util-defaults-mode-browser": "^4.3.32",
        "@smithy/util-defaults-mode-node": "^4.2.35",
        "@smithy/util-endpoints": "^3.2.8",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-retry": "^4.2.8",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints": {
      "version": "3.993.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.993.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "@smithy/util-endpoints": "^3.2.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/core": {
      "version": "3.973.11",
      "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.11.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@aws-sdk/xml-builder": "^3.972.5",
        "@smithy/core": "^3.23.2",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/signature-v4": "^5.3.8",
        "@smithy/smithy-client": "^4.11.5",
        "@smithy/types": "^4.12.0",
        "@smithy/util-base64": "^4.3.0",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/crc64-nvme": {
      "version": "3.972.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/credential-provider-env": {
      "version": "3.972.9",
      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/credential-provider-http": {
      "version": "3.972.11",
      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.11.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/fetch-http-handler": "^5.3.9",
        "@smithy/node-http-handler": "^4.4.10",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/smithy-client": "^4.11.5",
        "@smithy/types": "^4.12.0",
        "@smithy/util-stream": "^4.5.12",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/credential-provider-ini": {
      "version": "3.972.9",
      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/credential-provider-env": "^3.972.9",
        "@aws-sdk/credential-provider-http": "^3.972.11",
        "@aws-sdk/credential-provider-login": "^3.972.9",
        "@aws-sdk/credential-provider-process": "^3.972.9",
        "@aws-sdk/credential-provider-sso": "^3.972.9",
        "@aws-sdk/credential-provider-web-identity": "^3.972.9",
        "@aws-sdk/nested-clients": "3.993.0",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/credential-provider-imds": "^4.2.8",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/credential-provider-login": {
      "version": "3.972.9",
      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/nested-clients": "3.993.0",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/credential-provider-node": {
      "version": "3.972.10",
      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.10.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/credential-provider-env": "^3.972.9",
        "@aws-sdk/credential-provider-http": "^3.972.11",
        "@aws-sdk/credential-provider-ini": "^3.972.9",
        "@aws-sdk/credential-provider-process": "^3.972.9",
        "@aws-sdk/credential-provider-sso": "^3.972.9",
        "@aws-sdk/credential-provider-web-identity": "^3.972.9",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/credential-provider-imds": "^4.2.8",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/credential-provider-process": {
      "version": "3.972.9",
      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/credential-provider-sso": {
      "version": "3.972.9",
      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/client-sso": "3.993.0",
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/token-providers": "3.993.0",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/credential-provider-web-identity": {
      "version": "3.972.9",
      "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/nested-clients": "3.993.0",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-bucket-endpoint": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@aws-sdk/util-arn-parser": "^3.972.2",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "@smithy/util-config-provider": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-expect-continue": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-flexible-checksums": {
      "version": "3.972.9",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.972.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/crc32": "5.2.0",
        "@aws-crypto/crc32c": "5.2.0",
        "@aws-crypto/util": "5.2.0",
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/crc64-nvme": "3.972.0",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/is-array-buffer": "^4.2.0",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-stream": "^4.5.12",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-host-header": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-location-constraint": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-logger": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-recursion-detection": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@aws/lambda-invoke-store": "^0.2.2",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-sdk-s3": {
      "version": "3.972.11",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.11.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/types": "^3.973.1",
        "@aws-sdk/util-arn-parser": "^3.972.2",
        "@smithy/core": "^3.23.2",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/signature-v4": "^5.3.8",
        "@smithy/smithy-client": "^4.11.5",
        "@smithy/types": "^4.12.0",
        "@smithy/util-config-provider": "^4.2.0",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-stream": "^4.5.12",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-ssec": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-user-agent": {
      "version": "3.972.11",
      "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.11.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/types": "^3.973.1",
        "@aws-sdk/util-endpoints": "3.993.0",
        "@smithy/core": "^3.23.2",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints": {
      "version": "3.993.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.993.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "@smithy/util-endpoints": "^3.2.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/nested-clients": {
      "version": "3.993.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.993.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/sha256-browser": "5.2.0",
        "@aws-crypto/sha256-js": "5.2.0",
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/middleware-host-header": "^3.972.3",
        "@aws-sdk/middleware-logger": "^3.972.3",
        "@aws-sdk/middleware-recursion-detection": "^3.972.3",
        "@aws-sdk/middleware-user-agent": "^3.972.11",
        "@aws-sdk/region-config-resolver": "^3.972.3",
        "@aws-sdk/types": "^3.973.1",
        "@aws-sdk/util-endpoints": "3.993.0",
        "@aws-sdk/util-user-agent-browser": "^3.972.3",
        "@aws-sdk/util-user-agent-node": "^3.972.9",
        "@smithy/config-resolver": "^4.4.6",
        "@smithy/core": "^3.23.2",
        "@smithy/fetch-http-handler": "^5.3.9",
        "@smithy/hash-node": "^4.2.8",
        "@smithy/invalid-dependency": "^4.2.8",
        "@smithy/middleware-content-length": "^4.2.8",
        "@smithy/middleware-endpoint": "^4.4.16",
        "@smithy/middleware-retry": "^4.4.33",
        "@smithy/middleware-serde": "^4.2.9",
        "@smithy/middleware-stack": "^4.2.8",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/node-http-handler": "^4.4.10",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/smithy-client": "^4.11.5",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "@smithy/util-base64": "^4.3.0",
        "@smithy/util-body-length-browser": "^4.2.0",
        "@smithy/util-body-length-node": "^4.2.1",
        "@smithy/util-defaults-mode-browser": "^4.3.32",
        "@smithy/util-defaults-mode-node": "^4.2.35",
        "@smithy/util-endpoints": "^3.2.8",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-retry": "^4.2.8",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": {
      "version": "3.993.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.993.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "@smithy/util-endpoints": "^3.2.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/region-config-resolver": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/config-resolver": "^4.4.6",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/signature-v4-multi-region": {
      "version": "3.995.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.995.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/middleware-sdk-s3": "^3.972.11",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/signature-v4": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/token-providers": {
      "version": "3.993.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.993.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/core": "^3.973.11",
        "@aws-sdk/nested-clients": "3.993.0",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/types": {
      "version": "3.973.1",
      "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/util-arn-parser": {
      "version": "3.972.2",
      "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.2.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/util-endpoints": {
      "version": "3.995.0",
      "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.995.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "@smithy/util-endpoints": "^3.2.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/util-locate-window": {
      "version": "3.965.4",
      "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.4.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws-sdk/util-user-agent-browser": {
      "version": "3.972.3",
      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/types": "^3.973.1",
        "@smithy/types": "^4.12.0",
        "bowser": "^2.11.0",
        "tslib": "^2.6.2"
      }
    },
    "node_modules/@aws-sdk/util-user-agent-node": {
      "version": "3.972.10",
      "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.10.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-sdk/middleware-user-agent": "^3.972.11",
        "@aws-sdk/types": "^3.973.1",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      },
      "peerDependencies": {
        "aws-crt": ">=1.0.0"
      },
      "peerDependenciesMeta": {
        "aws-crt": {
          "optional": true
        }
      }
    },
    "node_modules/@aws-sdk/xml-builder": {
      "version": "3.972.5",
      "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.5.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "fast-xml-parser": "5.3.6",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=20.0.0"
      }
    },
    "node_modules/@aws/lambda-invoke-store": {
      "version": "0.2.3",
      "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@esbuild/aix-ppc64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "ppc64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "aix"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-arm": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-arm64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-x64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/darwin-arm64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/darwin-x64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/freebsd-arm64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/freebsd-x64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-arm": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-arm64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-ia32": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "ia32"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-loong64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "loong64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-mips64el": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "mips64el"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-ppc64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "ppc64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-riscv64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "riscv64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-s390x": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "s390x"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-x64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/netbsd-arm64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/netbsd-x64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openbsd-arm64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openbsd-x64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openharmony-arm64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "openharmony"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/sunos-x64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "sunos"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-arm64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-ia32": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "ia32"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-x64": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@hono/node-server": {
      "version": "1.19.9",
      "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">=18.14.1"
      },
      "peerDependencies": {
        "hono": "^4"
      }
    },
    "node_modules/@smithy/abort-controller": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/chunked-blob-reader": {
      "version": "5.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/chunked-blob-reader-native": {
      "version": "4.2.1",
      "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/util-base64": "^4.3.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/config-resolver": {
      "version": "4.4.6",
      "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/types": "^4.12.0",
        "@smithy/util-config-provider": "^4.2.0",
        "@smithy/util-endpoints": "^3.2.8",
        "@smithy/util-middleware": "^4.2.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/core": {
      "version": "3.23.3",
      "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/middleware-serde": "^4.2.9",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "@smithy/util-base64": "^4.3.0",
        "@smithy/util-body-length-browser": "^4.2.0",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-stream": "^4.5.13",
        "@smithy/util-utf8": "^4.2.0",
        "@smithy/uuid": "^1.1.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/credential-provider-imds": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/eventstream-codec": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@aws-crypto/crc32": "5.2.0",
        "@smithy/types": "^4.12.0",
        "@smithy/util-hex-encoding": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/eventstream-serde-browser": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/eventstream-serde-universal": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/eventstream-serde-config-resolver": {
      "version": "4.3.8",
      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/eventstream-serde-node": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/eventstream-serde-universal": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/eventstream-serde-universal": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/eventstream-codec": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/fetch-http-handler": {
      "version": "5.3.9",
      "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/querystring-builder": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "@smithy/util-base64": "^4.3.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/hash-blob-browser": {
      "version": "4.2.9",
      "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/chunked-blob-reader": "^5.2.0",
        "@smithy/chunked-blob-reader-native": "^4.2.1",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/hash-node": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "@smithy/util-buffer-from": "^4.2.0",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/hash-stream-node": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/invalid-dependency": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/is-array-buffer": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/md5-js": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/middleware-content-length": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/middleware-endpoint": {
      "version": "4.4.17",
      "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.17.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/core": "^3.23.3",
        "@smithy/middleware-serde": "^4.2.9",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "@smithy/url-parser": "^4.2.8",
        "@smithy/util-middleware": "^4.2.8",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/middleware-retry": {
      "version": "4.4.34",
      "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.34.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/service-error-classification": "^4.2.8",
        "@smithy/smithy-client": "^4.11.6",
        "@smithy/types": "^4.12.0",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-retry": "^4.2.8",
        "@smithy/uuid": "^1.1.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/middleware-serde": {
      "version": "4.2.9",
      "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/middleware-stack": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/node-config-provider": {
      "version": "4.3.8",
      "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/property-provider": "^4.2.8",
        "@smithy/shared-ini-file-loader": "^4.4.3",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/node-http-handler": {
      "version": "4.4.10",
      "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.10.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/abort-controller": "^4.2.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/querystring-builder": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/property-provider": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/protocol-http": {
      "version": "5.3.8",
      "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/querystring-builder": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "@smithy/util-uri-escape": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/querystring-parser": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/service-error-classification": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/shared-ini-file-loader": {
      "version": "4.4.3",
      "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/signature-v4": {
      "version": "5.3.8",
      "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/is-array-buffer": "^4.2.0",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "@smithy/util-hex-encoding": "^4.2.0",
        "@smithy/util-middleware": "^4.2.8",
        "@smithy/util-uri-escape": "^4.2.0",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/smithy-client": {
      "version": "4.11.6",
      "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.11.6.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/core": "^3.23.3",
        "@smithy/middleware-endpoint": "^4.4.17",
        "@smithy/middleware-stack": "^4.2.8",
        "@smithy/protocol-http": "^5.3.8",
        "@smithy/types": "^4.12.0",
        "@smithy/util-stream": "^4.5.13",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/types": {
      "version": "4.12.0",
      "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/url-parser": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/querystring-parser": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-base64": {
      "version": "4.3.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/util-buffer-from": "^4.2.0",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-body-length-browser": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-body-length-node": {
      "version": "4.2.1",
      "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-buffer-from": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/is-array-buffer": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-config-provider": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-defaults-mode-browser": {
      "version": "4.3.33",
      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.33.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/property-provider": "^4.2.8",
        "@smithy/smithy-client": "^4.11.6",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-defaults-mode-node": {
      "version": "4.2.36",
      "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.36.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/config-resolver": "^4.4.6",
        "@smithy/credential-provider-imds": "^4.2.8",
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/property-provider": "^4.2.8",
        "@smithy/smithy-client": "^4.11.6",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-endpoints": {
      "version": "3.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/node-config-provider": "^4.3.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-hex-encoding": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-middleware": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-retry": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/service-error-classification": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-stream": {
      "version": "4.5.13",
      "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.13.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/fetch-http-handler": "^5.3.9",
        "@smithy/node-http-handler": "^4.4.10",
        "@smithy/types": "^4.12.0",
        "@smithy/util-base64": "^4.3.0",
        "@smithy/util-buffer-from": "^4.2.0",
        "@smithy/util-hex-encoding": "^4.2.0",
        "@smithy/util-utf8": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-uri-escape": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-utf8": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/util-buffer-from": "^4.2.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/util-waiter": {
      "version": "4.2.8",
      "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.8.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "@smithy/abort-controller": "^4.2.8",
        "@smithy/types": "^4.12.0",
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@smithy/uuid": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "Apache-2.0",
      "dependencies": {
        "tslib": "^2.6.2"
      },
      "engines": {
        "node": ">=18.0.0"
      }
    },
    "node_modules/@types/node": {
      "version": "22.19.11",
      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.11.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "undici-types": "~6.21.0"
      }
    },
    "node_modules/@types/pg": {
      "version": "8.16.0",
      "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@types/node": "*",
        "pg-protocol": "*",
        "pg-types": "^2.2.0"
      }
    },
    "node_modules/bowser": {
      "version": "2.14.1",
      "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT"
    },
    "node_modules/call-bind-apply-helpers": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "es-errors": "^1.3.0",
        "function-bind": "^1.1.2"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/call-bound": {
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "call-bind-apply-helpers": "^1.0.2",
        "get-intrinsic": "^1.3.0"
      },
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/dunder-proto": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "call-bind-apply-helpers": "^1.0.1",
        "es-errors": "^1.3.0",
        "gopd": "^1.2.0"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/es-define-property": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/es-errors": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/es-object-atoms": {
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "es-errors": "^1.3.0"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/esbuild": {
      "version": "0.27.3",
      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "hasInstallScript": true,
      "license": "MIT",
      "bin": {
        "esbuild": "bin/esbuild"
      },
      "engines": {
        "node": ">=18"
      },
      "optionalDependencies": {
        "@esbuild/aix-ppc64": "0.27.3",
        "@esbuild/android-arm": "0.27.3",
        "@esbuild/android-arm64": "0.27.3",
        "@esbuild/android-x64": "0.27.3",
        "@esbuild/darwin-arm64": "0.27.3",
        "@esbuild/darwin-x64": "0.27.3",
        "@esbuild/freebsd-arm64": "0.27.3",
        "@esbuild/freebsd-x64": "0.27.3",
        "@esbuild/linux-arm": "0.27.3",
        "@esbuild/linux-arm64": "0.27.3",
        "@esbuild/linux-ia32": "0.27.3",
        "@esbuild/linux-loong64": "0.27.3",
        "@esbuild/linux-mips64el": "0.27.3",
        "@esbuild/linux-ppc64": "0.27.3",
        "@esbuild/linux-riscv64": "0.27.3",
        "@esbuild/linux-s390x": "0.27.3",
        "@esbuild/linux-x64": "0.27.3",
        "@esbuild/netbsd-arm64": "0.27.3",
        "@esbuild/netbsd-x64": "0.27.3",
        "@esbuild/openbsd-arm64": "0.27.3",
        "@esbuild/openbsd-x64": "0.27.3",
        "@esbuild/openharmony-arm64": "0.27.3",
        "@esbuild/sunos-x64": "0.27.3",
        "@esbuild/win32-arm64": "0.27.3",
        "@esbuild/win32-ia32": "0.27.3",
        "@esbuild/win32-x64": "0.27.3"
      }
    },
    "node_modules/fast-xml-parser": {
      "version": "5.3.6",
      "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz",
      "integrity": [REDACTED_SECRET],
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/NaturalIntelligence"
        }
      ],
      "license": "MIT",
      "dependencies": {
        "strnum": "^2.1.2"
      },
      "bin": {
        "fxparser": "src/cli/cli.js"
      }
    },
    "node_modules/fsevents": {
      "version": "2.3.3",
      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "hasInstallScript": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
      }
    },
    "node_modules/function-bind": {
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/get-intrinsic": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "call-bind-apply-helpers": "^1.0.2",
        "es-define-property": "^1.0.1",
        "es-errors": "^1.3.0",
        "es-object-atoms": "^1.1.1",
        "function-bind": "^1.1.2",
        "get-proto": "^1.0.1",
        "gopd": "^1.2.0",
        "has-symbols": "^1.1.0",
        "hasown": "^2.0.2",
        "math-intrinsics": "^1.1.0"
      },
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/get-proto": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "dunder-proto": "^1.0.1",
        "es-object-atoms": "^1.0.0"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/get-tsconfig": {
      "version": "4.13.6",
      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "resolve-pkg-maps": "^1.0.0"
      },
      "funding": {
        "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
      }
    },
    "node_modules/gopd": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/has-symbols": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/hasown": {
      "version": "2.0.2",
      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "function-bind": "^1.1.2"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/hono": {
      "version": "4.12.2",
      "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">=16.9.0"
      }
    },
    "node_modules/math-intrinsics": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/object-inspect": {
      "version": "1.13.4",
      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/pg": {
      "version": "8.18.0",
      "resolved": "https://registry.npmjs.org/pg/-/pg-8.18.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "pg-connection-string": "^2.11.0",
        "pg-pool": "^3.11.0",
        "pg-protocol": "^1.11.0",
        "pg-types": "2.2.0",
        "pgpass": "1.0.5"
      },
      "engines": {
        "node": ">= 16.0.0"
      },
      "optionalDependencies": {
        "pg-cloudflare": "^1.3.0"
      },
      "peerDependencies": {
        "pg-native": ">=3.0.1"
      },
      "peerDependenciesMeta": {
        "pg-native": {
          "optional": true
        }
      }
    },
    "node_modules/pg-cloudflare": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "optional": true
    },
    "node_modules/pg-connection-string": {
      "version": "2.11.0",
      "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.11.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT"
    },
    "node_modules/pg-int8": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "ISC",
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/pg-pool": {
      "version": "3.11.0",
      "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.11.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "peerDependencies": {
        "pg": ">=8.0"
      }
    },
    "node_modules/pg-protocol": {
      "version": "1.11.0",
      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT"
    },
    "node_modules/pg-types": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "pg-int8": "1.0.1",
        "postgres-array": "~2.0.0",
        "postgres-bytea": "~1.0.0",
        "postgres-date": "~1.0.4",
        "postgres-interval": "^1.1.0"
      },
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/pgpass": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "split2": "^4.1.0"
      }
    },
    "node_modules/postgres-array": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/postgres-bytea": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/postgres-date": {
      "version": "1.0.7",
      "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/postgres-interval": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "xtend": "^4.0.0"
      },
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/qs": {
      "version": "6.15.0",
      "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "BSD-3-Clause",
      "dependencies": {
        "side-channel": "^1.1.0"
      },
      "engines": {
        "node": ">=0.6"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/resolve-pkg-maps": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "funding": {
        "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
      }
    },
    "node_modules/side-channel": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "es-errors": "^1.3.0",
        "object-inspect": "^1.13.3",
        "side-channel-list": "^1.0.0",
        "side-channel-map": "^1.0.1",
        "side-channel-weakmap": "^1.0.2"
      },
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/side-channel-list": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "es-errors": "^1.3.0",
        "object-inspect": "^1.13.3"
      },
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/side-channel-map": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "call-bound": "^1.0.2",
        "es-errors": "^1.3.0",
        "get-intrinsic": "^1.2.5",
        "object-inspect": "^1.13.3"
      },
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/side-channel-weakmap": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "call-bound": "^1.0.2",
        "es-errors": "^1.3.0",
        "get-intrinsic": "^1.2.5",
        "object-inspect": "^1.13.3",
        "side-channel-map": "^1.0.1"
      },
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/split2": {
      "version": "4.2.0",
      "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "ISC",
      "engines": {
        "node": ">= 10.x"
      }
    },
    "node_modules/stripe": {
      "version": "17.7.0",
      "resolved": "https://registry.npmjs.org/stripe/-/stripe-17.7.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "dependencies": {
        "@types/node": ">=8.1.0",
        "qs": "^6.11.0"
      },
      "engines": {
        "node": ">=12.*"
      }
    },
    "node_modules/strnum": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz",
      "integrity": [REDACTED_SECRET],
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/NaturalIntelligence"
        }
      ],
      "license": "MIT"
    },
    "node_modules/tslib": {
      "version": "2.8.1",
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "0BSD"
    },
    "node_modules/tsx": {
      "version": "4.21.0",
      "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "esbuild": "~0.27.0",
        "get-tsconfig": "^4.7.5"
      },
      "bin": {
        "tsx": "dist/cli.mjs"
      },
      "engines": {
        "node": ">=18.0.0"
      },
      "optionalDependencies": {
        "fsevents": "~2.3.3"
      }
    },
    "node_modules/typescript": {
      "version": "5.9.3",
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
      "integrity": [REDACTED_SECRET],
      "dev": true,
      "license": "Apache-2.0",
      "bin": {
        "tsc": "bin/tsc",
        "tsserver": "bin/tsserver"
      },
      "engines": {
        "node": ">=14.17"
      }
    },
    "node_modules/undici-types": {
      "version": "6.21.0",
      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT"
    },
    "node_modules/xtend": {
      "version": "4.0.2",
      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
      "integrity": [REDACTED_SECRET],
      "license": "MIT",
      "engines": {
        "node": ">=0.4"
      }
    }
  }
}


path: cloud-api/package.json
content: {
  "name": "clawsync-cloud-api",
  "version": "1.0.0",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "tsx watch src/index.ts",
    "build": "tsc",
    "start": "node dist/index.js",
    "migrate": "tsx src/migrate.ts"
  },
  "dependencies": {
    "@aws-sdk/client-s3": "^3.700.0",
    "@hono/node-server": "^1.13.0",
    "hono": "^4.6.0",
    "pg": "^8.13.0",
    "stripe": "^17.0.0"
  },
  "devDependencies": {
    "@types/node": "^22.0.0",
    "@types/pg": "^8.11.0",
    "tsx": "^4.19.0",
    "typescript": "^5.7.0"
  }
}


path: cloud-api/src/auth.ts
content: import crypto from "node:crypto";
import type { VaultKey } from "./types.js";

/**
 * Convert an SSH Ed25519 public key to a PEM-formatted public key
 * that Node.js crypto can use for verification.
 *
 * SSH format: "ssh-ed25519 AAAAC3Nz... comment"
 * We need to extract the raw 32-byte Ed25519 key and wrap it in PKCS8/SPKI DER.
 */
function sshPubKeyToPem(sshPubKey: string): crypto.KeyObject {
  const parts = sshPubKey.trim().split(/\s+/);
  if (parts.length < 2 || parts[0] !== "ssh-ed25519") {
    throw new Error("Not an Ed25519 SSH public key");
  }

  const keyData = Buffer.from(parts[1], "base64");

  // SSH wire format: uint32 length + "ssh-ed25519" + uint32 length + 32-byte key
  // Parse it properly
  let offset = 0;
  const typeLen = keyData.readUInt32BE(offset);
  offset += 4;
  const keyType = keyData.subarray(offset, offset + typeLen).toString();
  offset += typeLen;

  if (keyType !== "ssh-ed25519") {
    throw new Error(`Unexpected key type: ${keyType}`);
  }

  const pubLen = keyData.readUInt32BE(offset);
  offset += 4;
  const rawPub = keyData.subarray(offset, offset + pubLen);

  if (rawPub.length !== 32) {
    throw new Error(`Expected 32-byte Ed25519 key, got ${rawPub.length}`);
  }

  // Wrap in Ed25519 SPKI DER format
  // The SPKI wrapper for Ed25519 is: 302a300506032b6570032100 + 32 bytes
  const spkiPrefix = Buffer.from("302a300506032b6570032100", "hex");
  const spkiDer = Buffer.concat([spkiPrefix, rawPub]);

  return crypto.createPublicKey({
    key: spkiDer,
    format: "der",
    type: "spki",
  });
}

/**
 * Verify an Ed25519 signature against a payload using registered SSH public keys.
 * Returns the fingerprint of the key that matched, or null if none did.
 *
 * The client signs with: echo -n "$payload" | openssl pkeyutl -sign -inkey privkey -rawin | base64
 */
export function verifySignature(
  payload: string,
  signatureBase64: string,
  keys: VaultKey[]
): string | null {
  const signature = Buffer.from(signatureBase64, "base64");
  const data = Buffer.from(payload, "utf-8");

  for (const key of keys) {
    if (key.revoked_at) continue;

    try {
      const pubKey = sshPubKeyToPem(key.public_key);
      const valid = crypto.verify(null, data, pubKey, signature);
      if (valid) return key.fingerprint;
    } catch {
      // Key parsing failed, try next
      continue;
    }
  }

  return null;
}

/**
 * Compute the SSH fingerprint of a public key (SHA256:...).
 */
export function computeFingerprint(sshPubKey: string): string {
  const parts = sshPubKey.trim().split(/\s+/);
  if (parts.length < 2) throw new Error("Invalid SSH public key");
  const keyData = Buffer.from(parts[1], "base64");
  const hash = crypto.createHash("sha256").update(keyData).digest("base64");
  // Remove trailing '=' padding to match ssh-keygen output
  return `SHA256:${hash.replace(/=+$/, "")}`;
}


path: cloud-api/tsconfig.json
content: {
  "compilerOptions": {
    "target": "ES2022",
    "module": "ES2022",
    "moduleResolution": "bundler",
    "outDir": "dist",
    "rootDir": "src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "declaration": true
  },
  "include": ["src/**/*"]
}


Security scan verdicts — ClawScan: suspicious | static analysis:  | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)