{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__mailthing-api",
    "name": "mbarbine__mailthing-api",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__mailthing-api",
    "relative_path": "github-recent/mbarbine__mailthing-api",
    "remote_url": "git@github.com:mbarbine/mailthing-api.git",
    "default_branch": "main",
    "current_commit": "df0181d6c5874ef9683213b39619f272c5742ab2"
  },
  "languages": [
    {
      "language": "YAML",
      "files": 1,
      "bytes": 133162
    },
    {
      "language": "TypeScript",
      "files": 25,
      "bytes": 26916
    },
    {
      "language": "JSON",
      "files": 3,
      "bytes": 1611
    },
    {
      "language": "Markdown",
      "files": 1,
      "bytes": 1450
    },
    {
      "language": "JavaScript",
      "files": 2,
      "bytes": 830
    },
    {
      "language": "CSS",
      "files": 1,
      "bytes": 345
    },
    {
      "language": "TOML",
      "files": 1,
      "bytes": 32
    },
    {
      "language": "Shell",
      "files": 1,
      "bytes": 23
    }
  ],
  "frameworks": [
    {
      "name": "Express",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Next.js",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "React",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Tailwind CSS",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    }
  ],
  "packages": {
    "package_manager": "pnpm",
    "manifests": [
      {
        "path": "package.json",
        "name": "mailthing-api",
        "version": "0.1.0",
        "scripts": {
          "dev": "next dev --turbopack",
          "build": "next build",
          "start": "next start",
          "lint": "next lint"
        },
        "dependencies": {
          "@edgedb/ai": "0.1.0-alpha.2",
          "@vercel/analytics": "^0.1.11",
          "cors": "^2.8.5",
          "dotenv": "^16.4.7",
          "edgedb": "^1.5.12",
          "express": "^4.21.2",
          "react": "^19.0.0",
          "react-dom": "^19.0.0",
          "stripe": "^14.25.0"
        },
        "dev_dependencies": {
          "@eslint/eslintrc": "^3.2.0",
          "@types/cors": "^2.8.17",
          "@types/dotenv": "^8.2.3",
          "@types/express": "^5.0.0",
          "@types/next": "^9.0.0",
          "@types/node": "^20.17.10",
          "@types/react": "^19.0.2",
          "@types/react-dom": "^19.0.2",
          "eslint": "^9.17.0",
          "eslint-config-next": "15.1.2",
          "next": "15.1.2",
          "postcss": "^8.4.49",
          "tailwindcss": "^3.4.17",
          "typescript": "^5.7.2"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [
      {
        "route": "/addresses",
        "source_path": "app/api/addresses/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      },
      {
        "route": "/credits",
        "source_path": "app/api/credits/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/letters/cancel",
        "source_path": "app/api/letters/cancel/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/letters/list",
        "source_path": "app/api/letters/list/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/letters",
        "source_path": "app/api/letters/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/mailitems/[stannpId]",
        "source_path": "app/api/mailitems/[stannpId]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/mailitems",
        "source_path": "app/api/mailitems/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/payments",
        "source_path": "app/api/payments/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "POST"
        ]
      },
      {
        "route": "/user",
        "source_path": "app/api/user/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "POST"
        ]
      }
    ],
    "app_routes": []
  },
  "components": [],
  "data_models": [],
  "database": {
    "databases": [],
    "schemas": [],
    "migrations": []
  },
  "tests": [],
  "ci": {
    "workflows": []
  },
  "containers": {
    "dockerfiles": [],
    "compose_files": []
  },
  "env": {
    "example_files": [],
    "variables": [
      {
        "name": "CREDENTIALS_FILE",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "EDGEDB_INSTANCE",
        "source_paths": [
          "app/src/config/env.ts",
          "app/src/db/edgedb.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "EDGEDB_SECRET_KEY",
        "source_paths": [
          "app/src/config/env.ts",
          "app/src/db/edgedb.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "GMAIL_API_KEY",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "GOOGLE_CLIENT_ID",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "GOOGLE_CLIENT_SECRET",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "OPENAI_API_KEY",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "OPENAI_ORG",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "PORT",
        "source_paths": [
          "app/src/config/env.ts",
          "app/src/server.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "STANNP_API_KEY",
        "source_paths": [
          "app/src/config/env.ts",
          "app/src/controllers/addressesController.ts",
          "app/src/controllers/lettersController.ts",
          "app/src/controllers/mailItemsController.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "STANNP_PRIV_API_KEY",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "STRIPE",
        "source_paths": [
          "app/src/controllers/paymentsController.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "TOKEN_FILE",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "VITE_STANNP_API_BASE",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "VITE_STANNP_API_KEY",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "VITE_STRIPE_SECRET_KEY",
        "source_paths": [
          "app/src/config/env.ts"
        ],
        "likely_secret": true
      }
    ]
  },
  "configs": [
    {
      "path": "eslint.config.mjs"
    },
    {
      "path": "next.config.ts"
    },
    {
      "path": "package.json"
    },
    {
      "path": "postcss.config.mjs"
    },
    {
      "path": "tailwind.config.ts"
    },
    {
      "path": "tsconfig.json"
    }
  ],
  "docs": {
    "readme_paths": [
      {
        "path": "README.md"
      }
    ],
    "doc_paths": [],
    "llms_context_paths": []
  },
  "discovery_files": {
    "openapi": [],
    "mcp": [],
    "llms": [],
    "sitemaps": [],
    "feeds": [],
    "well_known": [],
    "robots": [],
    "manifests": []
  },
  "integrations": [
    {
      "name": "Gmail",
      "confidence": "medium",
      "evidence_paths": [
        "app/src/config/env.ts",
        "package.json"
      ]
    },
    {
      "name": "Google",
      "confidence": "medium",
      "evidence_paths": [
        "app/src/config/env.ts",
        "package.json"
      ]
    },
    {
      "name": "OpenAI",
      "confidence": "medium",
      "evidence_paths": [
        "app/src/config/env.ts",
        "package.json"
      ]
    },
    {
      "name": "Stannp",
      "confidence": "medium",
      "evidence_paths": [
        "app/src/config/env.ts",
        "app/src/controllers/addressesController.ts",
        "app/src/controllers/lettersController.ts",
        "app/src/controllers/mailItemsController.ts",
        "package.json"
      ]
    },
    {
      "name": "Stripe",
      "confidence": "medium",
      "evidence_paths": [
        "app/src/config/env.ts",
        "app/src/controllers/creditsController.ts",
        "app/src/controllers/paymentsController.ts",
        "app/src/server.ts",
        "package.json",
        "pnpm-lock.yaml"
      ]
    },
    {
      "name": "Vercel",
      "confidence": "medium",
      "evidence_paths": [
        "app/layout.tsx",
        "package.json",
        "pnpm-lock.yaml"
      ]
    }
  ],
  "license": {
    "spdx": null,
    "paths": []
  },
  "comments": [
    {
      "kind": "unsafe",
      "source_path": "app/src/controllers/creditsController.ts",
      "line": 10,
      "text": "// Partial hack for .balance"
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 374,
      "text": "deprecated: This is a stub types definition. dotenv provides its own type definitions, so you do not need this installed."
    },
    {
      "kind": "deprecated",
      "source_path": "pnpm-lock.yaml",
      "line": 399,
      "text": "deprecated: This is a stub types definition. next provides its own type definitions, so you do not need this installed."
    }
  ],
  "security": {
    "secret_risks": [],
    "unsafe_patterns": [
      {
        "name": "ssrf-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "app/src/controllers/addressesController.ts",
          "app/src/controllers/lettersController.ts",
          "app/src/controllers/mailItemsController.ts"
        ]
      }
    ],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          "app/src/config/env.ts",
          "app/src/controllers/addressesController.ts",
          "app/src/controllers/lettersController.ts",
          "app/src/controllers/mailItemsController.ts"
        ]
      },
      {
        "name": "card",
        "confidence": "medium",
        "evidence_paths": [
          "app/src/controllers/mailItemsController.ts"
        ]
      },
      {
        "name": "payment",
        "confidence": "medium",
        "evidence_paths": [
          "app/api/payments/route.ts",
          "app/src/app.ts",
          "app/src/controllers/paymentsController.ts",
          "app/src/routes/payments.ts"
        ]
      },
      {
        "name": "pii",
        "confidence": "medium",
        "evidence_paths": [
          "pnpm-lock.yaml"
        ]
      },
      {
        "name": "secret-like environment variables",
        "confidence": "medium",
        "evidence_paths": [
          "package.json"
        ]
      },
      {
        "name": "token",
        "confidence": "medium",
        "evidence_paths": [
          "app/src/config/env.ts",
          "pnpm-lock.yaml"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:10.255Z"
}
