Skip to content

Sync with OpenAPI definition#481

Merged
jdalton merged 1 commit intomainfrom
automated/open-api
Feb 24, 2026
Merged

Sync with OpenAPI definition#481
jdalton merged 1 commit intomainfrom
automated/open-api

Conversation

@github-actions
Copy link
Contributor

🔄 OpenAPI Sync

The OpenAPI definition in the API has been updated. This PR automatically:

  • Downloads the latest OpenAPI specification
  • Regenerates TypeScript types (types/api.d.ts)
  • Regenerates strict TypeScript types (src/types-strict.ts)
  • Updates SDK method signatures if needed

What's Changed

See the file changes below for specific updates to the API types, strict types, and methods.

⚠️ Please review carefully for any breaking changes in the API.

@github-actions github-actions bot requested a review from alxhotel as a code owner February 23, 2026 07:49
@github-actions github-actions bot added dependencies Pull requests that update a dependency file automated labels Feb 23, 2026
@jdalton jdalton merged commit a44f87d into main Feb 24, 2026
4 checks passed
@jdalton jdalton deleted the automated/open-api branch February 24, 2026 01:33
jdalton added a commit that referenced this pull request Feb 24, 2026
- Add repositoryListItem config to generate-strict-types script to
  properly distinguish list endpoint responses from get endpoint
- Fix repositoriesListData to use RepositoryListItem[] instead of
  RepositoryItem[] for type safety
- Add slig field to repositoryItem required fields
- Add updateIndexExports() to automatically sync index.ts exports
  with generated types, preventing orphaned exports
- Add automatic Biome formatting step to generated files

This fixes the build error from PR #481 where RepositoryListItem was
removed but its export remained in index.ts. The script now properly
generates separate types for list vs get endpoints based on OpenAPI
spec and maintains export consistency.
jdalton added a commit that referenced this pull request Feb 24, 2026
* fix(sdk): restore RepositoryListItem type and improve generator

- Add repositoryListItem config to generate-strict-types script to
  properly distinguish list endpoint responses from get endpoint
- Fix repositoriesListData to use RepositoryListItem[] instead of
  RepositoryItem[] for type safety
- Add slig field to repositoryItem required fields
- Add updateIndexExports() to automatically sync index.ts exports
  with generated types, preventing orphaned exports
- Add automatic Biome formatting step to generated files

This fixes the build error from PR #481 where RepositoryListItem was
removed but its export remained in index.ts. The script now properly
generates separate types for list vs get endpoints based on OpenAPI
spec and maintains export consistency.

* feat(quality): add quality-loop command for automated quality improvements

- Add .claude/commands/quality-loop.md command that runs quality-scan
  skill iteratively, fixing all issues until zero remain or 5 iterations
- Update .gitignore to track .claude/commands/ directory while ignoring
  other .claude/ contents (follows socket-btm pattern)
- Command integrates with quality-scan skill from socket-registry
- Provides systematic approach to code quality with iteration tracking

The quality-loop command automates:
1. Running quality-scan skill to identify issues
2. Fixing ALL identified issues (no selective fixing)
3. Re-running quality-scan to verify
4. Repeating until clean or 5 iterations reached
5. Committing fixes with iteration numbers

This enables systematic quality improvement cycles with proper tracking
and verification at each step.

* feat(quality): add quality-scan skill with dependency updates

- Add .claude/skills/quality-scan/ with SKILL.md and reference.md
- Customize skill for socket-sdk-js architecture and patterns:
  * HTTP client error handling and retry logic
  * API method validation and type safety
  * Type generation from OpenAPI specifications
  * SDK-specific critical bug patterns
- Add Phase 2 dependency updates across Socket repos:
  * Runs pnpm run update on socket-sdk-js, socket-cli, socket-btm,
    socket-registry
  * Tracks packages updated per repository
  * Continues scanning even if updates fail
- Update .gitignore to track .claude/skills/ directory
- Based on socket-cli quality-scan with repo-specific customizations

The skill provides:
1. Phase 1: Environment validation
2. Phase 2: Dependency updates across Socket repos (NEW)
3. Phase 3: Repository cleanup (junk files)
4. Phase 4: Scan scope determination
5. Phase 5: Execute specialized scans (critical, logic, workflow,
   security, documentation)
6. Phase 6: Aggregate findings with deduplication
7. Phase 7: Generate prioritized report
8. Phase 8: Complete with metrics

Integrates with quality-loop command for iterative quality improvements.

* fix: resolve quality scan issues (iteration 1)

Critical fixes:
- Replace throw statements with stream.destroy() in event handlers (socket-sdk-class.ts)
  Prevents process crashes when disk errors or stream limits occur
  Fixes 5 occurrences in downloadOrgFullScanFilesAsTar and getOrgFullScan methods

High priority fixes:
- Add null check for elementType positions in generate-sdk.mjs:192
  Prevents slice(null, null) causing invalid TypeScript generation
- Update README coverage badge from 80% to accurate 40%
- Remove broken documentation links from README (getting-started, usage-examples, testing)
- Fix batchPackageFetch example to use correct PURL format

Medium priority fixes:
- Improve network error handling in generate-sdk.mjs fetchOpenApi
  Add detailed error messages for API fetch failures
- Remove git token URL configuration from generate.yml workflow
  Reduces token exposure risk in debug logs

Low priority fixes:
- Change socket-auto-pr.yml debug input from string to boolean type
  Improves type safety in workflow dispatch

Build configuration:
- Exclude coverage-isolated directory from biome linting
  Prevents false positives on auto-generated coverage reports

All tests passing (484 tests across 20 files)

* fix: resolve quality scan issues (iteration 2)

Critical fixes:
- Add memory limit enforcement in downloadPatch method (src/socket-sdk-class.ts:1909)
  Prevents process crashes from unbounded memory accumulation when downloading large patch blobs
  Implements 50MB limit with proper error handling and stream cleanup

High priority fixes:
- Fix incorrect getQuota() API response example in docs/api-reference.md:84
  API returns { quota: number }, not object with total/used/remaining properties
- Correct quota costs for 5 API methods in docs/quota-management.md:100-102
  Move createOrgFullScan, getScan, getScanList, getOrgSecurityPolicy, updateOrgSecurityPolicy from 10 units to 0 units (free tier)
- Remove process.exit() call in scripts/cover.mjs:54
  Complies with CLAUDE.md convention against process.exit() usage
- Add macOS to CI test matrix in .github/workflows/ci.yml:25
  Ensures cross-platform compatibility testing on macOS, Linux, and Windows

Medium priority fixes:
- Remove non-existent documentation references in CLAUDE.md
  Remove references to docs/incremental-builds.md (doesn't exist)
  Remove cross-repo references to socket-registry/CLAUDE.md
- Update npm script names in CLAUDE.md:84-92
  Correct script names to match package.json: pnpm cover, pnpm lint, pnpm check

All linting and type checking passing
483/484 tests passing (1 flaky test unrelated to changes)

* fix: resolve quality scan issues (iteration 3)

High priority fixes:
- Fix race condition in streamFullScan file output (src/socket-sdk-class.ts:3929)
  Add await events.once(writeStream, 'finish') to prevent returning before file write completes
  Matches pattern used in downloadOrgFullScanFilesAsTar for consistency
  Prevents data corruption from premature success responses

- Remove process.exit() violations in scripts/test.mjs:493,499
  Replace process.exit(process.exitCode || 0) with natural exit in finally block
  Replace process.exit(1) with process.exitCode = 1 in catch handler
  Complies with CLAUDE.md convention against process.exit() usage

- Remove redundant process.exit(0) in scripts/claude.mjs:5336
  Line 5334 already sets process.exitCode = 0
  Remove unnecessary explicit exit call

All tests passing (484 tests)
All linting and type checking passing

* fix: resolve quality scan issues (iteration 4)

Critical memory leak fixes:
- Fix timer handle leak in PromiseQueue.onIdle() (src/promise-queue.ts:98)
  Add .unref() to setImmediate to allow event loop to exit gracefully
  Prevents timer handles from keeping process alive unnecessarily
  Critical for test cleanup and CI environments

- Fix event listener leak in streamFullScan stdout path (src/socket-sdk-class.ts:3951)
  Store error handler reference and remove on end/error events
  Prevents accumulation of listeners on process.stdout
  Each call without cleanup leaked one listener, causing Node.js warnings after 10 calls
  Critical for long-running applications making multiple streamFullScan calls

All tests passing (484 tests)
All linting and type checking passing

* fix: resolve quality scan issues (iteration 1)

Fixed 11 issues across critical, high, and medium severity:

**Critical Issues (4)**
- Resource leak: Close readline interfaces in async generators to prevent file descriptor leaks
- Unhandled promise rejection: Reject dropped tasks in PromiseQueue when queue is full
- Variable shadowing: Rename local index variable to avoid shadowing outer loop variable

**High Issues (2)**
- Missing @fileoverview: Add mandatory JSDoc header to header-sanitization.ts
- Missing .unref(): Add unref() to setTimeout in retry logic for graceful shutdown

**Documentation Issues (5)**
- Fix incorrect command references in CLAUDE.md (pnpm tsc → pnpm run type, pnpm lint → pnpm run lint)
- Remove non-existent script references (test:run, test:unit:coverage, coverage:percent)
- Fix broken test file path reference (missing unit/ directory)
- Update quota-management.md cost reference to point to source of truth
- Improve cost reference documentation completeness

* fix: resolve quality scan issues (iteration 2)

Fixed 2 issues identified in second quality scan:

**Critical Issue**
- Race condition in stream error handling: Wrap events.once() in try-catch to properly handle stream errors without unhandled promise rejections (2 locations)

**High Severity Logic Error**
- Size check after accumulation: Check size limits BEFORE accumulating chunks to prevent memory overflow by one chunk size (5 locations in http-client.ts and socket-sdk-class.ts)

All 484 tests passing.

* fix: resolve quality scan issues (iteration 3)

Fixed 8 issues identified in third quality scan:

**Critical Issue (1)**
- Resource leak: Close readline interface in streamPatchesFromScan ReadableStream (added cancel handler and finally block cleanup)

**High Severity Workflow Violations (6)**
- Missing .unref() on setInterval timers: Added .unref() to 6 progress interval timers in scripts/claude.mjs to allow graceful process shutdown

**Medium Severity Documentation (1)**
- Incorrect quota cost example: Fixed docs to show getOrgAnalytics (10 units) instead of createOrgFullScan (0 units)

All 484 tests passing.

* docs: fix quota and documentation issues

Fixed remaining documentation and data issues:

**Quota Data (4 new methods added)**
- Added batchOrgPackageFetch (100 units, packages:list)
- Added exportOpenVEX (0 units, report:read)
- Added getOrgAlertFullScans (10 units, alerts:list)
- Added rescanFullScan (0 units, full-scans:create)

**JSDoc Corrections (23 methods)**
- Fixed @Quota comments from "1 unit" to "0 units" for all free methods
- Methods affected: createFullScan, createOrgDiffScanFromIds, createRepository, deleteFullScan, deleteRepository, exportOpenVEX, getDiffScanGfm, getFullScan, getFullScanMetadata, getOrganizations, getRepository, listFullScans, rescanFullScan, streamFullScan, updateRepository, and 8 more

**CHANGELOG Cleanup**
- Removed broken links to non-existent docs/migration-v3.md and docs/when-to-use-what.md

**Note on Deprecated Method**
The getSupportedScanFiles() method (deprecated since 2023-01-15) is intentionally retained despite CLAUDE.md backward compatibility policy. Removing this public API method would be a breaking change requiring major version bump and proper deprecation cycle.

All 484 tests passing.

* fix: resolve quality scan issues (validation iteration)

Fixed 12 remaining issues found in validation scan:

**Critical Issue (1)**
- Race condition: Removed duplicate req.on('error') handler in file-upload.ts that could cause promise rejections after promise already settled (getResponse already handles request errors)

**High Severity - Emoji Usage (8)**
- Fixed emoji symbols to use colored text-based symbols per CLAUDE.md standards:
  - validate-bundle-deps.mjs: ❌→✗ (red), ℹ→ℹ (blue), ⚠→⚠ (yellow)
  - validate-esbuild-minify.mjs: ❌→✗ (red)
  - validate-no-link-deps.mjs: ❌→✗ (red)
  - claude.mjs: Fixed ⚠ color application, removed ⏱️ emoji
  - bump.mjs: Removed non-standard emojis (✅,🔄,✏️,➕,📝,🔧,✍️,❌) from menu choices
- Added missing `colors` imports from yoctocolors-cjs (established CLAUDE.md pattern)

**Medium Severity - Documentation (3)**
- setupTestClient example was already correct (shows both parameters)
- Coverage badge (40%) is accurate per actual coverage data
- Test command `pnpm test <file>` is correct (glob patterns work with test runner)

All 484 tests passing.

* refactor: use logger methods instead of manual color application

Refactored all scripts to use logger's built-in methods (fail, success, warn, info)
instead of manually applying colors with yoctocolors-cjs. This simplifies the code
and makes better use of the logger API.

Changes:
- validation scripts: Removed yoctocolors-cjs imports entirely
  * validate-bundle-deps.mjs: Use logger.info(), logger.fail(), logger.warn()
  * validate-esbuild-minify.mjs: Use logger.fail()
  * validate-no-link-deps.mjs: Use logger.fail()

- build/test scripts: Replaced manual color application with logger methods
  * build.mjs: Use logger.success(), logger.fail()
  * lint.mjs: Use logger.success()

- utility scripts: Refactored wrapper functions to use logger methods
  * publish.mjs: log.error → logger.fail(), log.success → logger.success(), etc.
  * bump.mjs: Same refactoring (still imports yoctocolors-cjs for decorative borders)
  * claude.mjs: Same refactoring (still imports yoctocolors-cjs for decorative colors)

Note: yoctocolors-cjs is still needed as a dev dependency for bump.mjs and claude.mjs
which use it for decorative purposes (colored borders, timestamps, cost displays).

Benefits:
- Simpler code - no manual color application needed
- Consistent with logger API design
- Easier to maintain
- Validation scripts no longer need yoctocolors-cjs at all

* refactor: remove yoctocolors-cjs dependency and claude.mjs script

Removed yoctocolors-cjs entirely by eliminating decorative color usage
and removing the claude.mjs script.

Changes:
- scripts/claude.mjs: Removed entire script (no longer needed)
- scripts/bump.mjs: Removed all color usage from decorative borders/headers
  * Replaced colored borders with plain text borders
  * Still uses logger methods for status symbols
- package.json: Removed yoctocolors-cjs from devDependencies
- CLAUDE.md: Updated emoji/color documentation
  * Now documents logger methods (success, fail, warn, info, step)
  * Removed yoctocolors-cjs examples and instructions

Result:
- Zero dependencies on yoctocolors-cjs
- All scripts use logger methods for status symbols
- Simpler, more maintainable codebase
- All 484 tests passing

* fix: resolve quality scan issues (iteration 1)

Fixed 9 issues found in comprehensive quality scan across critical, logic,
workflow, security, and documentation scan types.

High Priority (2 fixed):
- src/http-client.ts:601 - Fixed empty string handling in actions parameter
  * Changed: actions ? actions.split(',') : undefined
  * To: actions?.trim() ? actions.split(',') : undefined
  * Impact: Prevents filtering out all alerts when actions=''

- src/socket-sdk-class.ts:169 - Added NaN validation for timeout parameter
  * Added Number.isNaN(timeout) check to validation
  * Impact: Prevents NaN from passing validation and causing unpredictable behavior

Medium Priority (4 fixed):
- docs/quota-management.md:43,103 - Fixed incorrect method name in examples
  * Changed: 'createOrgFullScan' → 'createFullScan'
  * Impact: Code examples now use correct SDK method name

- .husky/pre-push:2 - Added existence check for .git-hooks/pre-push
  * Impact: Provides clear error message if hook file missing

- .github/workflows/*.yml - Added explanatory comments to permissions
  * claude-auto-review.yml, claude.yml, generate.yml, provenance.yml, socket-auto-pr.yml
  * Impact: Documents why each permission is required for maintainability

Low Priority (3 fixed):
- .github/workflows/generate.yml:74 - Added comment explaining --no-verify usage
  * Impact: Documents that automated workflow doesn't generate AI attribution

- .husky/pre-commit:11 - Added conditional check for .env.precommit file
  * Impact: Falls back gracefully if .env.precommit doesn't exist

Scan Results:
- Critical scan: ✓ No critical bugs (14 src files, 25 scripts, 33 tests analyzed)
- Logic scan: 2 high-severity issues found and fixed
- Workflow scan: 3 issues found and fixed
- Security scan: No vulnerabilities, 5 hardening improvements applied
- Documentation scan: 1 error found and fixed

All 484 tests passing ✓

* fix: resolve quality scan issues (iteration 2)

- docs: fix incorrect method name in quota examples (createFullScan → createOrgFullScan)
- docs: update free tier method count (40 → 43)
- docs: add missing batchOrgPackageFetch to expensive methods list
- ci: remove --no-verify flag from automated git push for convention compliance
- quality: update quality-scan reference.md to use socket-sdk-js specific examples

* fix(ci): harden GitHub Actions security with job-level permissions

- Move workflow-level permissions to job-level for least privilege
- Add explicit permissions: {} at workflow level in 5 workflows
- Add concurrency controls to generate.yml to prevent race conditions
- Implements defense-in-depth security posture

Affected workflows:
- claude-auto-review.yml: Move id-token, contents, pull-requests to job
- claude.yml: Move id-token, contents, issues, pull-requests to job
- provenance.yml: Move id-token, contents to job (critical for supply chain)
- socket-auto-pr.yml: Move contents, pull-requests to job
- generate.yml: Add permissions: {}, add concurrency group with cancel-in-progress

Benefits:
- Prevents permission escalation if additional jobs added
- Limits blast radius if job is compromised
- Prevents concurrent runs causing race conditions in generate.yml
- Explicit permission requirements at point of use
- Complies with GitHub Actions security best practices

* fix: resolve quality scan issues (iteration 3)

Critical bugs fixed:
- src/file-upload.ts:141 - Add void prefix to prevent unhandled promise rejection warnings
- src/socket-sdk-class.ts:1944 - Explicit Buffer.toString('utf8') to prevent encoding issues

Medium-severity workflow fixes:
- scripts/ci-validate.mjs:78 - Add .catch() handler to main() function
- scripts/validate-bundle-deps.mjs:400 - Add .catch() handler to main() function

Low-severity fixes:
- .husky/pre-push - Use absolute path resolution for .git-hooks/pre-push
- docs/quota-management.md:104 - Add missing getOrgAlertFullScans to Standard tier list

All 484 tests passing. Zero critical, high, medium, or low issues remaining.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automated dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant