name: TypeScript SDK CI

on:
  push:
    branches: [main]
    paths:
      - 'mem0-ts/**'
      - '.github/workflows/ts-sdk-ci.yml'
  pull_request:
    paths:
      - 'mem0-ts/**'

jobs:
  check_changes:
    runs-on: ubuntu-latest
    outputs:
      ts_sdk_changed: ${{ steps.filter.outputs.ts_sdk }}
    steps:
      - uses: actions/checkout@v4
      - uses: dorny/paths-filter@v2
        id: filter
        with:
          filters: |
            ts_sdk:
              - 'mem0-ts/**'

  build_ts_sdk:
    needs: check_changes
    if: needs.check_changes.outputs.ts_sdk_changed == 'true'
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [20, 22]

    steps:
      - uses: actions/checkout@v4

      - uses: pnpm/action-setup@v4
        with:
          version: 10

      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'pnpm'
          cache-dependency-path: mem0-ts/pnpm-lock.yaml

      - name: Install dependencies
        working-directory: mem0-ts
        run: pnpm install --frozen-lockfile

      - name: Lint
        working-directory: mem0-ts
        run: npx prettier --check .

      - name: Build
        working-directory: mem0-ts
        run: pnpm run build

      - name: Run unit tests
        working-directory: mem0-ts
        run: pnpm run test:unit

      - name: Verify package exports
        working-directory: mem0-ts
        run: |
          node -e "const m = require('./dist/index.js'); console.log('Client exports:', Object.keys(m).length)"
          node -e "const m = require('./dist/oss/index.js'); console.log('OSS exports:', Object.keys(m).length)"

      - name: Upload coverage
        if: matrix.node-version == 20
        uses: actions/upload-artifact@v4
        with:
          name: coverage-report
          path: mem0-ts/coverage/

  integration_ts_sdk:
    needs: build_ts_sdk
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 1
      matrix:
        node-version: [20, 22]

    steps:
      - uses: actions/checkout@v4

      - uses: pnpm/action-setup@v4
        with:
          version: 10

      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'pnpm'
          cache-dependency-path: mem0-ts/pnpm-lock.yaml

      - name: Install dependencies
        working-directory: mem0-ts
        run: pnpm install --frozen-lockfile

      - name: Build
        working-directory: mem0-ts
        run: pnpm run build

      - name: Run integration tests (with cleanup)
        working-directory: mem0-ts
        env:
          MEM0_API_KEY: ${{ secrets.MEM0_API_KEY }}
        run: pnpm run test:integration
