TypeScript SDK

Projects

Create, list, inspect, and manage projects with @tektona/sdk.

tek.project manages projects within an organization. Methods return the wire ProjectResponse (id, name, display_name, description, effective_role, owner, created_at, updated_at); listForUser returns AccessibleProjectResponse, which adds the org field. The org comes from the client default or a per-call org.

List

Scoped to an org, returns one Page:

const page = await tek.project.list({ limit: 50 });        // org from client scope
const other = await tek.project.list({ org: 'other-org' }); // per-call override
for await (const p of tek.project.listAll()) console.log(p.name);

List across orgs

listForUser ignores scope and returns every project the caller can access across all their organizations, one Page at a time; listAllForUser auto-pages:

const page = await tek.project.listForUser({ limit: 50 });
page.items.forEach((p) => console.log(`${p.org}/${p.name}`));

for await (const p of tek.project.listAllForUser()) console.log(`${p.org}/${p.name}`);

Get

const project = await tek.project.get('web');            // org from client scope
const scoped = await tek.project.get('web', { org: 'acme' });
console.log(project.display_name, project.created_at);

Create

const project = await tek.project.create({
  name: 'web',             // URL-safe name
  display_name: 'Web App',
  description: 'frontend', // optional
});

Update

update replaces the project's mutable fields (PUT semantics):

await tek.project.update('web', {
  display_name: 'Web App v2',
});

Delete

await tek.project.delete('web'); // idempotent: a missing project resolves cleanly

Sandbox settings

A project's sandbox settings — its default egress policy and the effective policy (the project default resolved against the org). Uses the client's default org/project (or a per-call { org, project }):

const settings = await tek.project.getSandboxSettings();
// { default_policy, effective_policy }

await tek.project.updateSandboxSettings({ default_policy: 'tektona/open' });

On this page