JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 75
  • Score
    100M100P100Q89615F
  • License MIT

TypeScript client library for the devpad API - project and task management made simple

Package Exports

  • @devpad/api
  • @devpad/api/schema
  • @devpad/api/schema/blog
  • @devpad/api/schema/media

Readme

@devpad/api

TypeScript API client for devpad — project management, task tracking, milestones, goals, and more.

Installation

bun add @devpad/api

Quick start

import ApiClient from "@devpad/api";

const client = new ApiClient({
  base_url: "https://devpad.tools/api/v1",
  api_key: "your-api-key",
});

The constructor also accepts auth_mode, credentials, default_headers, and custom_fetch. Auth mode is auto-detected from the api_key format.

Error handling

All methods return ApiResult<T> which is Result<T, ApiResultError> from @f0rbit/corpus. No try/catch needed.

import ApiClient, { type ApiResult } from "@devpad/api";

const result = await client.projects.list();

if (!result.ok) {
  console.error(result.error.message, result.error.status_code);
  return;
}

const projects = result.value;

The ok() and err() constructors are re-exported for building your own Results.

API reference

Projects

client.projects.list()
client.projects.find(id)
client.projects.getByName(name)
client.projects.create(data)
client.projects.upsert(data)
client.projects.config.load(id)
client.projects.config.save(id, config)
client.projects.history(id)
client.projects.specification(id)
client.projects.scan.initiate(name)
client.projects.scan.updates(id)
client.projects.map()

Tasks

client.tasks.list(params?)          // optional { project_id, tag_id }
client.tasks.find(id)
client.tasks.getByProject(id)
client.tasks.create(data)
client.tasks.upsert(data)
client.tasks.delete(id)
client.tasks.history.get(id)

Milestones

client.milestones.list(params?)     // optional { project_id }
client.milestones.find(id)
client.milestones.getByProject(id)
client.milestones.create(data)
client.milestones.update(id, data)
client.milestones.delete(id)
client.milestones.goals(id)

Goals

client.goals.list()
client.goals.find(id)
client.goals.create(data)
client.goals.update(id, data)
client.goals.delete(id)

Tags

client.tags.list()
client.tags.save(tags)

Auth

client.auth.keys.list()
client.auth.keys.create(data)
client.auth.keys.update(id, data)
client.auth.keys.delete(id)
client.auth.user()
client.auth.login(code)
client.auth.loginUrl()

User

client.user.history()

GitHub

client.github.repos()
client.github.branches(owner, repo)

Blog and media namespaces also exist but are documented separately.

Types

import ApiClient, {
  type ApiResult,
  type ApiResultError,
  type AuthMode,        // "session" | "key" | "cookie"
} from "@devpad/api";

// Schema types re-exported for convenience
import type {
  Project,
  TaskWithDetails,
  UpsertProject,
  UpsertTodo,
} from "@devpad/api";

Result utilities ok and err are also exported from the main entry point.

License

MIT