@nikolaymatrosov/sourcecraft-sdk
v0.1.5
Published
SourceCraft SDK
Downloads
75
Maintainers
Readme
SourceCraft SDK
A TypeScript/JavaScript SDK for interacting with the SourceCraft API - a platform for managing source code repositories, issues, pull requests, and CI/CD operations.
Features
- Type-Safe: Full TypeScript support with comprehensive type definitions
- Auto-Generated: Built from OpenAPI specifications for accuracy and consistency
- Zero Dependencies: Uses native fetch API, no external runtime dependencies
- Comprehensive API Coverage: 19 API classes covering all SourceCraft operations
- Modern: Supports Node.js 20.x and 24.x
- Well Documented: Includes detailed examples and inline documentation
Installation
npm install @nikolaymatrosov/sourcecraft-sdkQuick Start
import { Configuration, RepositoryApi } from '@nikolaymatrosov/sourcecraft-sdk';
// Configure the SDK
const config = new Configuration({
basePath: 'https://api.sourcecraft.tech',
accessToken: process.env.SOURCECRAFT_TOKEN,
});
// Create API client
const repositoryApi = new RepositoryApi(config);
// List repositories
const repos = await repositoryApi.listRepositories({
pageSize: 10,
});
console.log(repos);Authentication
SourceCraft SDK requires an access token for authentication. You can provide it in several ways:
Environment Variable (Recommended)
export SOURCECRAFT_TOKEN="your-token-here"const config = new Configuration({
basePath: 'https://api.sourcecraft.tech',
accessToken: process.env.SOURCECRAFT_TOKEN,
});Direct Configuration
const config = new Configuration({
basePath: 'https://api.sourcecraft.tech',
accessToken: 'your-token-here',
});Async Token Provider (for token refresh)
const config = new Configuration({
basePath: 'https://api.sourcecraft.tech',
accessToken: async () => {
// Fetch or refresh token
return await getTokenFromSomewhere();
},
});API Coverage
The SDK provides comprehensive coverage of SourceCraft APIs with 25 API client classes and 97+ endpoints:
Repository Management
RepositoryApi- Create, read, update, delete repositories; manage branches, tags, and tree contentsRepositoryLabelsApi- Manage repository labelsRepositoryMilestonesApi- Manage milestonesRepositoryPullRequestApi- Pull request operations (create, update, merge, reopen, discard)RepositoryPullRequestCommentsApi- PR commentsRepositoryPullRequestReviewersApi- PR reviewers and review decisionsRepositoryReleasesApi- Release management (create, update, publish, tag-based retrieval)ReleaseAttachmentsApi- Release asset attachments
Issues Management
IssuesApi- Issue lifecycle management (create, read, update, delete, list)IssuesCommentsApi- Issue commentsIssuesCommentsAttachmentsApi- Attachments on issue commentsIssuesLabelsApi- Issue labelsIssuesAttachmentsApi- File attachments on issuesIssuesCommentsReactionsApi- Emoji reactions on commentsIssuesLinkedIssuesApi- Link issues togetherIssuesLinkedPRsApi- Link issues to pull requestsIssuesStatusesApi- Issue status management
Organization & Access
OrganizationApi- Organization management and repository listingOrganizationInvitesApi- Organization membership invitationsOrganizationOperationApi- Track long-running organization operationsRolesApi- Role-based access control for repositories
CI/CD
CIApi- CI/CD pipeline operationsCICDApi- CI/CD runs, workflows, logs, and artifact management
User Operations
UserApi- User profile informationUserPullRequestApi- User-specific PR operations
Usage Examples
Creating a Repository
import { Configuration, RepositoryApi } from '@nikolaymatrosov/sourcecraft-sdk';
const config = new Configuration({
basePath: 'https://api.sourcecraft.tech',
accessToken: process.env.SOURCECRAFT_TOKEN,
});
const repoApi = new RepositoryApi(config);
const newRepo = await repoApi.createRepository({
createRepositoryRequest: {
name: 'my-new-repo',
description: 'A new repository',
visibility: 'public',
},
});
console.log(`Created repository: ${newRepo.name}`);Managing Issues
import { Configuration, IssuesApi } from '@nikolaymatrosov/sourcecraft-sdk';
const config = new Configuration({
basePath: 'https://api.sourcecraft.tech',
accessToken: process.env.SOURCECRAFT_TOKEN,
});
const issuesApi = new IssuesApi(config);
// Create an issue
const issue = await issuesApi.createIssue({
owner: 'myorg',
repo: 'my-repo',
createIssueRequest: {
title: 'Bug: Login not working',
body: 'Users cannot log in with valid credentials',
labels: ['bug', 'high-priority'],
},
});
console.log(`Created issue #${issue.number}`);Working with Pull Requests
import { Configuration, RepositoryPullRequestApi } from '@nikolaymatrosov/sourcecraft-sdk';
const config = new Configuration({
basePath: 'https://api.sourcecraft.tech',
accessToken: process.env.SOURCECRAFT_TOKEN,
});
const prApi = new RepositoryPullRequestApi(config);
// Create a pull request
const pr = await prApi.createPullRequest({
owner: 'myorg',
repo: 'my-repo',
createPullRequestRequest: {
title: 'Add new feature',
head: 'feature-branch',
base: 'main',
body: 'This PR adds a new feature',
},
});
console.log(`Created PR #${pr.number}`);Error Handling
try {
const repo = await repoApi.getRepository({
owner: 'myorg',
repo: 'my-repo',
});
console.log(repo);
} catch (error) {
console.error('Error fetching repository:', error);
}Examples Directory
The examples directory contains comprehensive usage examples:
- 01-basic-setup.ts - Configuration patterns and authentication
- 02-repository-operations.ts - Repository CRUD, forking, branches, tags
- 03-issues-management.ts - Issues, comments, labels, reactions, attachments
- 04-pull-requests.ts - PR creation, reviewers, merging, comments
Running Examples
# Set up environment
cp examples/.env.example examples/.env
# Edit examples/.env and add your SOURCECRAFT_TOKEN
# Method 1: Build and run
npm run build:examples
node examples/dist/01-basic-setup.js
# Method 2: Direct TypeScript execution
npx ts-node -P examples/tsconfig.json examples/01-basic-setup.tsDevelopment
Build Commands
# Install dependencies
npm install
# Full build (prepare spec, generate SDK, format, compile)
npm run build
# TypeScript compilation only
npm run build:ts
# Watch mode for development
npm run build:watch
# Build examples
npm run build:examplesCode Quality
# Run linter
npm run lint
# Fix linting issues
npm run lint:fix
# Format code
npm run format
# Check formatting
npm run format:checkSDK Generation
The SDK is auto-generated from OpenAPI specifications. To regenerate:
# Convert Swagger 2.0 to OpenAPI 3.0 and fix issues
npm run prepare-spec
# Generate SDK from OpenAPI spec
npm run generate-sdk
# Full build
npm run buildProject Structure
sourcecraft-sdk/
├── src/ # Auto-generated SDK source (don't edit manually)
│ ├── apis/ # 19 API classes
│ ├── models/ # TypeScript models
│ └── runtime.ts # Base runtime/configuration
├── examples/ # Usage examples
│ ├── 01-basic-setup.ts
│ ├── 02-repository-operations.ts
│ ├── 03-issues-management.ts
│ ├── 04-pull-requests.ts
│ └── .env.example # Environment template
├── spec/ # OpenAPI specifications
│ ├── swagger.json # Source Swagger 2.0 spec
│ └── openapi.yaml # Converted OpenAPI 3.0 spec
├── scripts/ # Build scripts
├── dist/ # Compiled output
└── .github/workflows/ # CI/CD pipelinesSDK Generation Process
This SDK is automatically generated from OpenAPI specifications:
- Source: Swagger 2.0 specification in
spec/swagger.json - Conversion: Converted to OpenAPI 3.0 format
- Fixing: Automated fixes applied via
scripts/fix-openapi.js - Generation: SDK generated using
openapi-generator-cliwith TypeScript-Fetch template - Formatting: Code formatted with Prettier and ESLint
Important: Do not edit files in src/ directory manually. Regenerate the SDK using npm run build instead.
CI/CD
This project uses GitHub Actions for continuous integration and deployment:
CI Workflow: Runs on PRs and pushes to main
- Tests on Node 20.x and 24.x
- Runs linter and format checks
- Builds SDK and examples
Publish Workflow: Runs on GitHub releases
- Publishes to npm with provenance
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests:
npm run lint && npm run build - Submit a pull request
Requirements
- Node.js 20.x or 24.x (see .nvmrc)
- npm or yarn
License
MIT License - see LICENSE file for details
Author
Nikolay Matrosov
- Email: [email protected]
- Package: @nikolaymatrosov/sourcecraft-sdk
Links
Support
For issues and questions:
- Open an issue on GitHub
- Contact: [email protected]
