🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/linear

Package Overview
Dependencies
Maintainers
4
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/linear - npm Package Compare versions

Comparing version
0.1.2
to
0.3.0
+6
dist/index.d.ts
import type { ModuleAdapter } from "@robinpath/core";
declare const LinearModule: ModuleAdapter;
export default LinearModule;
export { LinearModule };
export { LinearFunctions, LinearFunctionMetadata, LinearModuleMetadata, LinearCredentialTypes, configureLinear, } from "./linear.js";
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AASrD,QAAA,MAAM,YAAY,EAAE,aAQnB,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,GAChB,MAAM,aAAa,CAAC"}
import { LinearFunctions, LinearFunctionMetadata, LinearModuleMetadata, LinearCredentialTypes, configureLinear, } from "./linear.js";
const LinearModule = {
name: "linear",
functions: LinearFunctions,
functionMetadata: LinearFunctionMetadata,
moduleMetadata: LinearModuleMetadata,
credentialTypes: LinearCredentialTypes,
configure: configureLinear,
global: false,
};
export default LinearModule;
export { LinearModule };
export { LinearFunctions, LinearFunctionMetadata, LinearModuleMetadata, LinearCredentialTypes, configureLinear, } from "./linear.js";
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,MAAM,YAAY,GAAkB;IAClC,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,eAAe;IAC1B,gBAAgB,EAAE,sBAAsB;IACxC,cAAc,EAAE,oBAAoB;IACpC,eAAe,EAAE,qBAAqB;IACtC,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,eAAe,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,GAChB,MAAM,aAAa,CAAC"}
/**
* RobinPath Linear Module (Node port)
*
* Linear GraphQL API — issues, projects, teams, labels, users, and comments.
* Shares the credential-vault + ModuleHost pattern with the other RobinPath
* modules so the visual editor can render them identically.
*
* Linear authenticates with a **Personal API Key** from
* https://linear.app/settings/api. The key is sent in the `Authorization`
* header **without** a `Bearer` prefix — that's a Linear quirk, not a typo.
*
* Every method takes a credential slug as its first argument; the module
* resolves the stored api key at call time via the injected ModuleHost.
*
* Credential type declared by this module:
* - linear : { api_key }
*/
import type { BuiltinHandler, CredentialTypeSchema, FunctionMetadata, ModuleHost, ModuleMetadata } from "@robinpath/core";
export declare function configureLinear(h: ModuleHost): void;
export declare const LinearFunctions: Record<string, BuiltinHandler>;
export declare const LinearCredentialTypes: CredentialTypeSchema[];
export declare const LinearFunctionMetadata: Record<string, FunctionMetadata>;
export declare const LinearModuleMetadata: ModuleMetadata;
//# sourceMappingURL=linear.d.ts.map
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../src/linear.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAezB,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAEnD;AAqlBD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA6B1D,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,oBAAoB,EAiBvD,CAAC;AAuEF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAsoBnE,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAE,cA0DlC,CAAC"}
/**
* RobinPath Linear Module (Node port)
*
* Linear GraphQL API — issues, projects, teams, labels, users, and comments.
* Shares the credential-vault + ModuleHost pattern with the other RobinPath
* modules so the visual editor can render them identically.
*
* Linear authenticates with a **Personal API Key** from
* https://linear.app/settings/api. The key is sent in the `Authorization`
* header **without** a `Bearer` prefix — that's a Linear quirk, not a typo.
*
* Every method takes a credential slug as its first argument; the module
* resolves the stored api key at call time via the injected ModuleHost.
*
* Credential type declared by this module:
* - linear : { api_key }
*/
// ── Module-local state (populated by configure hook) ────────────────────
const state = {};
function host() {
if (!state.host) {
throw new Error("Linear module not initialized. Pass the adapter to rp.installModule() so its configure() hook runs first.");
}
return state.host;
}
export function configureLinear(h) {
state.host = h;
}
// ── Constants ──────────────────────────────────────────────────────────
const GRAPHQL_ENDPOINT = "https://api.linear.app/graphql";
const CREDENTIAL_TYPE = "linear";
function errorReturn(error, code, extra = {}) {
return { error, code, ...extra };
}
// ── Credential resolver ────────────────────────────────────────────────
async function resolveApiKey(credentialSlug) {
if (!credentialSlug) {
return errorReturn("Credential slug is required.", "credential_not_found");
}
let fields;
try {
fields = await host().credentials.get(credentialSlug);
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "credential_not_found");
}
if (!fields) {
return errorReturn(`Credential '${credentialSlug}' not found.`, "credential_not_found");
}
const apiKey = String(fields.api_key ?? fields.apiKey ?? fields.token ?? "");
if (!apiKey) {
return errorReturn("Credential has no `api_key` field.", "api_key_missing");
}
return { apiKey };
}
// ── Internal helpers ───────────────────────────────────────────────────
function isPlainObject(v) {
return !!v && typeof v === "object" && !Array.isArray(v);
}
// ── GraphQL helper (normalized envelope, never throws for API errors) ──
async function callGraphql(cred, query, variables) {
const resolved = await resolveApiKey(cred);
if ("error" in resolved)
return resolved;
const headers = {
// Linear expects the raw api key, NOT "Bearer <key>".
Authorization: resolved.apiKey,
"Content-Type": "application/json",
Accept: "application/json",
};
const body = JSON.stringify({ query, variables: variables ?? {} });
let response;
try {
response = await fetch(GRAPHQL_ENDPOINT, { method: "POST", headers, body });
}
catch (e) {
return errorReturn(e instanceof Error ? e.message : String(e), "transport");
}
const status = response.status;
const raw = await response.text();
let decoded;
try {
decoded = JSON.parse(raw);
}
catch {
decoded = { raw: raw.slice(0, 500) };
}
const decodedObj = decoded && typeof decoded === "object" && !Array.isArray(decoded)
? decoded
: { raw: raw.slice(0, 500) };
if (status < 200 || status >= 300) {
return linearError(status, decodedObj);
}
// GraphQL surfaces errors in the `errors` array even on HTTP 200.
const errs = decodedObj.errors;
if (Array.isArray(errs) && errs.length > 0) {
return linearError(status, decodedObj);
}
const data = decodedObj.data;
if (data !== undefined && data !== null && typeof data === "object") {
return data;
}
return decodedObj;
}
function linearError(status, decoded) {
let message = "";
const errs = decoded.errors;
if (Array.isArray(errs) && errs.length > 0) {
const first = errs[0];
if (first && typeof first === "object") {
const m = first.message;
if (typeof m === "string")
message = m;
const ext = first.extensions;
if (!message && isPlainObject(ext) && typeof ext.userMessage === "string") {
message = ext.userMessage;
}
}
}
if (!message && typeof decoded.message === "string")
message = decoded.message;
if (!message)
message = `Linear returned HTTP ${status}.`;
let code = "linear_error";
if (status === 401)
code = "unauthorized";
else if (status === 403)
code = "permission_denied";
else if (status === 404)
code = "not_found";
else if (status === 400 || status === 422)
code = "validation_failed";
else if (status === 429)
code = "rate_limited";
// GraphQL error extensions can carry richer codes.
if (Array.isArray(decoded.errors) && decoded.errors.length > 0) {
const first = decoded.errors[0];
if (isPlainObject(first)) {
const ext = first.extensions;
if (isPlainObject(ext) && typeof ext.code === "string") {
const ec = ext.code;
if (ec === "FEATURE_NOT_ACCESSIBLE")
code = "permission_denied";
else if (ec === "AUTHENTICATION_ERROR")
code = "unauthorized";
else if (ec === "INVALID_INPUT")
code = "validation_failed";
else if (ec === "RATELIMITED")
code = "rate_limited";
}
}
}
return errorReturn(message, code, { status, linear_error: decoded });
}
// ── GraphQL fragments ──────────────────────────────────────────────────
const ISSUE_FIELDS = `
id identifier title description url
priority priorityLabel
estimate
createdAt updatedAt completedAt canceledAt dueDate
state { id name type color }
assignee { id name email displayName }
creator { id name displayName }
team { id key name }
project { id name }
cycle { id number name startsAt endsAt }
labels { nodes { id name color } }
parent { id identifier title }
`;
const PROJECT_FIELDS = `
id name description slugId url color icon
state startDate targetDate completedAt canceledAt
progress scope
createdAt updatedAt
lead { id name displayName }
teams { nodes { id key name } }
`;
const TEAM_FIELDS = `
id key name description color icon
private cyclesEnabled
createdAt
organization { id name urlKey }
`;
const LABEL_FIELDS = `
id name description color
team { id key }
`;
const COMMENT_FIELDS = `
id body url
createdAt updatedAt
user { id name displayName }
issue { id identifier }
`;
const USER_FIELDS = `
id name displayName email
avatarUrl
active admin guest
createdAt
`;
// ── Handlers: Viewer ───────────────────────────────────────────────────
const getViewer = async (args) => {
const cred = String(args[0] ?? "");
const query = `
query Viewer {
viewer { ${USER_FIELDS} }
}
`;
return (await callGraphql(cred, query));
};
// ── Handlers: Issues ───────────────────────────────────────────────────
const listIssues = async (args) => {
const cred = String(args[0] ?? "");
const opts = isPlainObject(args[1]) ? args[1] : {};
const vars = {};
if (opts.filter !== undefined)
vars.filter = opts.filter;
if (opts.first !== undefined)
vars.first = opts.first;
else
vars.first = 50;
if (opts.after !== undefined)
vars.after = opts.after;
if (opts.orderBy !== undefined)
vars.orderBy = opts.orderBy;
if (opts.includeArchived !== undefined)
vars.includeArchived = opts.includeArchived;
const query = `
query ListIssues($first: Int, $after: String, $filter: IssueFilter, $orderBy: PaginationOrderBy, $includeArchived: Boolean) {
issues(first: $first, after: $after, filter: $filter, orderBy: $orderBy, includeArchived: $includeArchived) {
nodes { ${ISSUE_FIELDS} }
pageInfo { hasNextPage endCursor }
}
}
`;
return (await callGraphql(cred, query, vars));
};
const getIssue = async (args) => {
const cred = String(args[0] ?? "");
const idOrIdentifier = String(args[1] ?? "");
if (!idOrIdentifier) {
return errorReturn("`issueId` is required.", "validation_failed");
}
// Linear's `issue(id: …)` accepts either the UUID or the human identifier (e.g. "ENG-123").
const query = `
query GetIssue($id: String!) {
issue(id: $id) { ${ISSUE_FIELDS} }
}
`;
return (await callGraphql(cred, query, { id: idOrIdentifier }));
};
const createIssue = async (args) => {
const cred = String(args[0] ?? "");
const input = isPlainObject(args[1]) ? args[1] : {};
if (!input.teamId) {
return errorReturn("`input.teamId` is required (get one from listTeams).", "validation_failed");
}
if (!input.title) {
return errorReturn("`input.title` is required.", "validation_failed");
}
const query = `
mutation CreateIssue($input: IssueCreateInput!) {
issueCreate(input: $input) {
success
issue { ${ISSUE_FIELDS} }
}
}
`;
return (await callGraphql(cred, query, { input }));
};
const updateIssue = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
const input = isPlainObject(args[2]) ? args[2] : {};
if (!id) {
return errorReturn("`issueId` is required.", "validation_failed");
}
if (Object.keys(input).length === 0) {
return errorReturn("`input` is required.", "validation_failed");
}
const query = `
mutation UpdateIssue($id: String!, $input: IssueUpdateInput!) {
issueUpdate(id: $id, input: $input) {
success
issue { ${ISSUE_FIELDS} }
}
}
`;
return (await callGraphql(cred, query, { id, input }));
};
const deleteIssue = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`issueId` is required.", "validation_failed");
}
const query = `
mutation DeleteIssue($id: String!) {
issueDelete(id: $id) { success }
}
`;
return (await callGraphql(cred, query, { id }));
};
const archiveIssue = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`issueId` is required.", "validation_failed");
}
const query = `
mutation ArchiveIssue($id: String!) {
issueArchive(id: $id) { success }
}
`;
return (await callGraphql(cred, query, { id }));
};
const searchIssues = async (args) => {
const cred = String(args[0] ?? "");
const term = String(args[1] ?? "");
const opts = isPlainObject(args[2]) ? args[2] : {};
if (!term) {
return errorReturn("`query` is required.", "validation_failed");
}
const vars = { term };
if (opts.first !== undefined)
vars.first = opts.first;
else
vars.first = 25;
if (opts.after !== undefined)
vars.after = opts.after;
if (opts.teamId !== undefined)
vars.teamId = opts.teamId;
if (opts.includeArchived !== undefined)
vars.includeArchived = opts.includeArchived;
const query = `
query SearchIssues($term: String!, $first: Int, $after: String, $teamId: String, $includeArchived: Boolean) {
searchIssues(term: $term, first: $first, after: $after, teamId: $teamId, includeArchived: $includeArchived) {
nodes { ${ISSUE_FIELDS} }
pageInfo { hasNextPage endCursor }
totalCount
}
}
`;
return (await callGraphql(cred, query, vars));
};
// ── Handlers: Projects ─────────────────────────────────────────────────
const listProjects = async (args) => {
const cred = String(args[0] ?? "");
const opts = isPlainObject(args[1]) ? args[1] : {};
const vars = {};
if (opts.filter !== undefined)
vars.filter = opts.filter;
if (opts.first !== undefined)
vars.first = opts.first;
else
vars.first = 50;
if (opts.after !== undefined)
vars.after = opts.after;
if (opts.includeArchived !== undefined)
vars.includeArchived = opts.includeArchived;
const query = `
query ListProjects($first: Int, $after: String, $filter: ProjectFilter, $includeArchived: Boolean) {
projects(first: $first, after: $after, filter: $filter, includeArchived: $includeArchived) {
nodes { ${PROJECT_FIELDS} }
pageInfo { hasNextPage endCursor }
}
}
`;
return (await callGraphql(cred, query, vars));
};
const getProject = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`projectId` is required.", "validation_failed");
}
const query = `
query GetProject($id: String!) {
project(id: $id) { ${PROJECT_FIELDS} }
}
`;
return (await callGraphql(cred, query, { id }));
};
const createProject = async (args) => {
const cred = String(args[0] ?? "");
const input = isPlainObject(args[1]) ? args[1] : {};
if (!input.name) {
return errorReturn("`input.name` is required.", "validation_failed");
}
if (!input.teamIds) {
return errorReturn("`input.teamIds` is required (array of team ids).", "validation_failed");
}
const query = `
mutation CreateProject($input: ProjectCreateInput!) {
projectCreate(input: $input) {
success
project { ${PROJECT_FIELDS} }
}
}
`;
return (await callGraphql(cred, query, { input }));
};
const updateProject = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
const input = isPlainObject(args[2]) ? args[2] : {};
if (!id) {
return errorReturn("`projectId` is required.", "validation_failed");
}
if (Object.keys(input).length === 0) {
return errorReturn("`input` is required.", "validation_failed");
}
const query = `
mutation UpdateProject($id: String!, $input: ProjectUpdateInput!) {
projectUpdate(id: $id, input: $input) {
success
project { ${PROJECT_FIELDS} }
}
}
`;
return (await callGraphql(cred, query, { id, input }));
};
// ── Handlers: Teams ────────────────────────────────────────────────────
const listTeams = async (args) => {
const cred = String(args[0] ?? "");
const opts = isPlainObject(args[1]) ? args[1] : {};
const vars = {};
if (opts.first !== undefined)
vars.first = opts.first;
else
vars.first = 50;
if (opts.after !== undefined)
vars.after = opts.after;
if (opts.filter !== undefined)
vars.filter = opts.filter;
const query = `
query ListTeams($first: Int, $after: String, $filter: TeamFilter) {
teams(first: $first, after: $after, filter: $filter) {
nodes { ${TEAM_FIELDS} }
pageInfo { hasNextPage endCursor }
}
}
`;
return (await callGraphql(cred, query, vars));
};
const getTeam = async (args) => {
const cred = String(args[0] ?? "");
const id = String(args[1] ?? "");
if (!id) {
return errorReturn("`teamId` is required.", "validation_failed");
}
const query = `
query GetTeam($id: String!) {
team(id: $id) { ${TEAM_FIELDS} }
}
`;
return (await callGraphql(cred, query, { id }));
};
// ── Handlers: Labels ───────────────────────────────────────────────────
const listLabels = async (args) => {
const cred = String(args[0] ?? "");
const opts = isPlainObject(args[1]) ? args[1] : {};
const vars = {};
if (opts.filter !== undefined)
vars.filter = opts.filter;
if (opts.first !== undefined)
vars.first = opts.first;
else
vars.first = 50;
if (opts.after !== undefined)
vars.after = opts.after;
const query = `
query ListLabels($first: Int, $after: String, $filter: IssueLabelFilter) {
issueLabels(first: $first, after: $after, filter: $filter) {
nodes { ${LABEL_FIELDS} }
pageInfo { hasNextPage endCursor }
}
}
`;
return (await callGraphql(cred, query, vars));
};
const createLabel = async (args) => {
const cred = String(args[0] ?? "");
const input = isPlainObject(args[1]) ? args[1] : {};
if (!input.name) {
return errorReturn("`input.name` is required.", "validation_failed");
}
const query = `
mutation CreateLabel($input: IssueLabelCreateInput!) {
issueLabelCreate(input: $input) {
success
issueLabel { ${LABEL_FIELDS} }
}
}
`;
return (await callGraphql(cred, query, { input }));
};
// ── Handlers: Comments ─────────────────────────────────────────────────
const listComments = async (args) => {
const cred = String(args[0] ?? "");
const issueId = String(args[1] ?? "");
const opts = isPlainObject(args[2]) ? args[2] : {};
if (!issueId) {
return errorReturn("`issueId` is required.", "validation_failed");
}
const vars = {
filter: { issue: { id: { eq: issueId } } },
};
if (opts.first !== undefined)
vars.first = opts.first;
else
vars.first = 50;
if (opts.after !== undefined)
vars.after = opts.after;
const query = `
query ListComments($first: Int, $after: String, $filter: CommentFilter) {
comments(first: $first, after: $after, filter: $filter) {
nodes { ${COMMENT_FIELDS} }
pageInfo { hasNextPage endCursor }
}
}
`;
return (await callGraphql(cred, query, vars));
};
const createComment = async (args) => {
const cred = String(args[0] ?? "");
const issueId = String(args[1] ?? "");
const body = String(args[2] ?? "");
if (!issueId) {
return errorReturn("`issueId` is required.", "validation_failed");
}
if (!body) {
return errorReturn("`body` is required.", "validation_failed");
}
const query = `
mutation CreateComment($input: CommentCreateInput!) {
commentCreate(input: $input) {
success
comment { ${COMMENT_FIELDS} }
}
}
`;
return (await callGraphql(cred, query, {
input: { issueId, body },
}));
};
// ── Handlers: Users ────────────────────────────────────────────────────
const listUsers = async (args) => {
const cred = String(args[0] ?? "");
const opts = isPlainObject(args[1]) ? args[1] : {};
const vars = {};
if (opts.first !== undefined)
vars.first = opts.first;
else
vars.first = 50;
if (opts.after !== undefined)
vars.after = opts.after;
if (opts.filter !== undefined)
vars.filter = opts.filter;
if (opts.includeArchived !== undefined)
vars.includeArchived = opts.includeArchived;
const query = `
query ListUsers($first: Int, $after: String, $filter: UserFilter, $includeArchived: Boolean) {
users(first: $first, after: $after, filter: $filter, includeArchived: $includeArchived) {
nodes { ${USER_FIELDS} }
pageInfo { hasNextPage endCursor }
}
}
`;
return (await callGraphql(cred, query, vars));
};
// ── Handlers: Raw GraphQL escape hatch ─────────────────────────────────
const query = async (args) => {
const cred = String(args[0] ?? "");
const q = String(args[1] ?? "");
const variables = isPlainObject(args[2]) ? args[2] : {};
if (!q) {
return errorReturn("`query` is required.", "validation_failed");
}
return (await callGraphql(cred, q, variables));
};
// ── Exports: functions map ─────────────────────────────────────────────
export const LinearFunctions = {
// Viewer.
getViewer,
// Issues.
listIssues,
getIssue,
createIssue,
updateIssue,
deleteIssue,
archiveIssue,
searchIssues,
// Projects.
listProjects,
getProject,
createProject,
updateProject,
// Teams.
listTeams,
getTeam,
// Labels.
listLabels,
createLabel,
// Comments.
listComments,
createComment,
// Users.
listUsers,
// Raw GraphQL.
query,
};
// ── Exports: credential types ──────────────────────────────────────────
export const LinearCredentialTypes = [
{
slug: CREDENTIAL_TYPE,
title: "Linear API key",
icon: "layers",
fields: [
{
name: "api_key",
title: "Personal API key",
type: "password",
required: true,
placeholder: "lin_api_…",
description: "Create one at https://linear.app/settings/api. The key is sent in the `Authorization` header *without* a `Bearer` prefix — Linear's own quirk.",
},
],
},
];
// ── Shared parameter metadata ──────────────────────────────────────────
const credentialParam = {
name: "credential",
title: "Credential",
description: "Slug of a saved `linear` credential (Personal API key).",
dataType: "string",
formInputType: "resource",
required: true,
allowExpression: true,
placeholder: "my_linear",
resource: {
type: "credential",
listFn: "credential.list",
modes: ["list", "expression"],
searchable: true,
filter: { type: CREDENTIAL_TYPE },
},
};
const issueIdParam = {
name: "issueId",
title: "Issue id or identifier",
description: "Either the UUID of the issue or its human identifier (e.g. `ENG-123`). Both forms work wherever an issue id is accepted.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "ENG-123",
};
const projectIdParam = {
name: "projectId",
title: "Project id",
description: "UUID of a Linear project (get it from `listProjects`).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "proj_01HXY…",
};
const teamIdParam = {
name: "teamId",
title: "Team id",
description: "UUID of a Linear team (get it from `listTeams`).",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "team_01HXY…",
};
const commonErrors = {
credential_not_found: "No credential with that slug exists in the vault.",
api_key_missing: "The credential has no `api_key` field.",
transport: "Network failure calling api.linear.app.",
linear_error: "Linear returned an error — see `linear_error.errors[]` in the response.",
unauthorized: "API key rejected (HTTP 401 or AUTHENTICATION_ERROR).",
permission_denied: "The key does not have permission for this resource (HTTP 403 or FEATURE_NOT_ACCESSIBLE).",
not_found: "No resource with that id exists (HTTP 404).",
validation_failed: "Linear rejected the input (GraphQL INVALID_INPUT / HTTP 400).",
rate_limited: "Hit Linear rate limits — back off and retry.",
};
// ── Exports: function metadata ─────────────────────────────────────────
export const LinearFunctionMetadata = {
// ===================== VIEWER =====================
getViewer: {
title: "Get viewer",
summary: "Fetch the user that owns the API key",
description: "Runs `{ viewer { … } }` — returns the authenticated user record. Useful to confirm the credential is valid and discover the user id for assignments.",
group: "viewer",
action: "read",
icon: "user",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "user", "me"],
parameters: [credentialParam],
returnType: "object",
returnDescription: "{ viewer: {id,name,displayName,email,active,…} }.",
errors: commonErrors,
example: 'linear.getViewer "my_linear"',
},
// ===================== ISSUES =====================
listIssues: {
title: "List issues",
summary: "Page through issues with optional filter",
description: "Runs `issues(filter, first, after, orderBy)`. Pass `options.filter` as a Linear `IssueFilter` object — examples:\n - `{state: {type: {eq: \"started\"}}}`\n - `{team: {key: {eq: \"ENG\"}}}`\n - `{assignee: {id: {eq: \"<userId>\"}}}`\n - `{priority: {lte: 2}}`\n\nPagination uses cursor pagination — pass the previous response's `pageInfo.endCursor` as `options.after`.",
group: "issues",
action: "query",
icon: "list",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "issue", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n filter : IssueFilter GraphQL object\n first : page size (default 50, max 250)\n after : cursor from previous response's `pageInfo.endCursor`\n orderBy : `createdAt` | `updatedAt`\n includeArchived : bool",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 5,
},
],
returnType: "object",
returnDescription: "{ issues: { nodes: [{id,identifier,title,…}, …], pageInfo: {…} } }.",
errors: commonErrors,
example: 'linear.listIssues "my_linear" {filter: {state: {type: {eq: "started"}}}, first: 50}',
},
getIssue: {
title: "Get issue",
summary: "Fetch a single issue by id or identifier",
description: "Runs `issue(id)`. Accepts either the UUID or the human identifier (e.g. `ENG-123`).",
group: "issues",
action: "read",
icon: "file-text",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "issue", "lookup"],
parameters: [credentialParam, issueIdParam],
returnType: "object",
returnDescription: "{ issue: {id,identifier,title,description,state,assignee,…} }.",
errors: commonErrors,
example: 'linear.getIssue "my_linear" "ENG-123"',
},
createIssue: {
title: "Create issue",
summary: "Create a new issue on a team",
description: "Runs `issueCreate(input: IssueCreateInput)`. Required: `input.teamId`, `input.title`. Common optional fields:\n - `description` : markdown\n - `priority` : 0 (no priority), 1 (urgent), 2 (high), 3 (medium), 4 (low)\n - `assigneeId` : user UUID\n - `stateId` : workflow state UUID\n - `projectId` : project UUID\n - `labelIds` : array of label UUIDs\n - `dueDate` : ISO date\n - `estimate` : Fibonacci points (team must have estimation enabled)\n - `parentId` : for sub-issues",
group: "issues",
action: "write",
icon: "plus-square",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["linear", "issue", "create"],
parameters: [
credentialParam,
{
name: "input",
title: "Issue input",
description: "`IssueCreateInput` object. Required: `teamId`, `title`. Optional: `description`, `priority`, `assigneeId`, `stateId`, `projectId`, `labelIds`, `dueDate`, `estimate`, `parentId`.",
dataType: "object",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 8,
},
],
returnType: "object",
returnDescription: "{ issueCreate: { success: bool, issue: {…} } }.",
errors: commonErrors,
example: 'linear.createIssue "my_linear" {\n teamId: "team_…",\n title: "Fix login 500 on Safari",\n description: "Reported by 3 users on Safari 17",\n priority: 2\n}',
},
updateIssue: {
title: "Update issue",
summary: "Patch fields on an existing issue",
description: "Runs `issueUpdate(id, input: IssueUpdateInput)`. Pass any subset of fields supported by `IssueUpdateInput`. Common uses: change status via `stateId`, reassign via `assigneeId`, move project via `projectId`, update `priority`/`dueDate`.",
group: "issues",
action: "write",
icon: "edit-3",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "issue", "update"],
parameters: [
credentialParam,
issueIdParam,
{
name: "input",
title: "Fields to patch",
description: "`IssueUpdateInput` object — any subset of `title`, `description`, `priority`, `assigneeId`, `stateId`, `projectId`, `labelIds`, `dueDate`, `estimate`.",
dataType: "object",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 6,
},
],
returnType: "object",
returnDescription: "{ issueUpdate: { success: bool, issue: {…} } }.",
errors: commonErrors,
example: 'linear.updateIssue "my_linear" "ENG-123" {priority: 1, stateId: "state_…"}',
},
deleteIssue: {
title: "Delete issue",
summary: "Permanently delete an issue",
description: "Runs `issueDelete(id)`. **Hard delete — not recoverable.** Use `archiveIssue` for a reversible alternative.",
group: "issues",
action: "delete",
icon: "trash-2",
capability: "manage_options",
sideEffects: ["makes_http_call", "destructive"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "issue", "delete", "destructive"],
parameters: [credentialParam, issueIdParam],
returnType: "object",
returnDescription: "{ issueDelete: { success: bool } }.",
errors: commonErrors,
example: 'linear.deleteIssue "my_linear" "ENG-123"',
},
archiveIssue: {
title: "Archive issue",
summary: "Archive an issue (reversible)",
description: "Runs `issueArchive(id)`. Archived issues are hidden by default but can be restored from the Linear UI or by setting `includeArchived:true` in list queries.",
group: "issues",
action: "write",
icon: "archive",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "issue", "archive"],
parameters: [credentialParam, issueIdParam],
returnType: "object",
returnDescription: "{ issueArchive: { success: bool } }.",
errors: commonErrors,
example: 'linear.archiveIssue "my_linear" "ENG-123"',
},
searchIssues: {
title: "Search issues",
summary: "Full-text search across issues",
description: "Runs `searchIssues(term)`. Use `options.teamId` to scope to a single team. Pagination via `options.first`/`options.after`.",
group: "issues",
action: "query",
icon: "search",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "issue", "search"],
parameters: [
credentialParam,
{
name: "query",
title: "Search query",
description: "Free-text search across issue titles and descriptions.",
dataType: "string",
formInputType: "text",
required: true,
allowExpression: true,
placeholder: "login 500",
},
{
name: "options",
title: "Options",
description: "Recognized keys:\n teamId : scope to a single team\n first : page size (default 25, max 100)\n after : cursor\n includeArchived : bool",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 3,
advanced: true,
},
],
returnType: "object",
returnDescription: "{ searchIssues: { nodes: [...], pageInfo: {…}, totalCount: int } }.",
errors: commonErrors,
example: 'linear.searchIssues "my_linear" "login 500" {first: 25}',
},
// ===================== PROJECTS =====================
listProjects: {
title: "List projects",
summary: "Page through projects",
description: "Runs `projects(filter, first, after)`. Pass `options.filter` as a `ProjectFilter` object — e.g. `{state: {eq: \"started\"}}` or `{team: {key: {eq: \"ENG\"}}}`.",
group: "projects",
action: "query",
icon: "folder",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "project", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n filter : ProjectFilter GraphQL object\n first : page size (default 50)\n after : cursor\n includeArchived : bool",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
},
],
returnType: "object",
returnDescription: "{ projects: { nodes: [{id,name,state,lead,…}, …], pageInfo: {…} } }.",
errors: commonErrors,
example: 'linear.listProjects "my_linear" {filter: {state: {eq: "started"}}}',
},
getProject: {
title: "Get project",
summary: "Fetch a single project by id",
description: "Runs `project(id)`. Returns the full project record.",
group: "projects",
action: "read",
icon: "folder",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "project", "lookup"],
parameters: [credentialParam, projectIdParam],
returnType: "object",
returnDescription: "{ project: {id,name,description,state,lead,teams,…} }.",
errors: commonErrors,
example: 'linear.getProject "my_linear" "proj_01HXY…"',
},
createProject: {
title: "Create project",
summary: "Open a new project on one or more teams",
description: "Runs `projectCreate(input: ProjectCreateInput)`. Required: `name`, `teamIds` (array). Common optional: `description`, `startDate`, `targetDate`, `leadId`, `color`, `icon`, `state`.",
group: "projects",
action: "write",
icon: "folder-plus",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["linear", "project", "create"],
parameters: [
credentialParam,
{
name: "input",
title: "Project input",
description: "`ProjectCreateInput` object. Required: `name`, `teamIds` (array). Optional: `description`, `startDate`, `targetDate`, `leadId`, `color`, `icon`, `state`.",
dataType: "object",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 6,
},
],
returnType: "object",
returnDescription: "{ projectCreate: { success: bool, project: {…} } }.",
errors: commonErrors,
example: 'linear.createProject "my_linear" {\n name: "Q2 Launch",\n teamIds: ["team_…"],\n targetDate: "2026-06-30"\n}',
},
updateProject: {
title: "Update project",
summary: "Patch fields on an existing project",
description: "Runs `projectUpdate(id, input: ProjectUpdateInput)`. Common uses: set `state:\"completed\"` to mark a project done, update `targetDate`, change `leadId`.",
group: "projects",
action: "write",
icon: "edit-3",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "project", "update"],
parameters: [
credentialParam,
projectIdParam,
{
name: "input",
title: "Fields to patch",
description: "`ProjectUpdateInput` object — any subset of `name`, `description`, `state`, `startDate`, `targetDate`, `leadId`, `color`, `icon`.",
dataType: "object",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 5,
},
],
returnType: "object",
returnDescription: "{ projectUpdate: { success: bool, project: {…} } }.",
errors: commonErrors,
example: 'linear.updateProject "my_linear" "proj_…" {state: "completed"}',
},
// ===================== TEAMS =====================
listTeams: {
title: "List teams",
summary: "Page through teams visible to the key",
description: "Runs `teams(first, after, filter)`. Teams are Linear's top-level work containers — each has its own key (`ENG`, `DES`, …), cycles, labels, and workflow states.",
group: "teams",
action: "query",
icon: "users",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "team", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n filter : TeamFilter GraphQL object (e.g. `{key: {eq: \"ENG\"}}`)\n first : page size (default 50)\n after : cursor",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 3,
advanced: true,
},
],
returnType: "object",
returnDescription: "{ teams: { nodes: [{id,key,name,private,…}, …], pageInfo: {…} } }.",
errors: commonErrors,
example: 'linear.listTeams "my_linear"',
},
getTeam: {
title: "Get team",
summary: "Fetch a single team by id",
description: "Runs `team(id)`. Returns the full team record.",
group: "teams",
action: "read",
icon: "users",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "team", "lookup"],
parameters: [credentialParam, teamIdParam],
returnType: "object",
returnDescription: "{ team: {id,key,name,description,private,…} }.",
errors: commonErrors,
example: 'linear.getTeam "my_linear" "team_…"',
},
// ===================== LABELS =====================
listLabels: {
title: "List labels",
summary: "Page through issue labels",
description: "Runs `issueLabels(first, after, filter)`. Scope to a single team with `options.filter = {team: {id: {eq: \"<teamId>\"}}}`.",
group: "labels",
action: "read",
icon: "tag",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "label", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n filter : IssueLabelFilter GraphQL object\n first : page size (default 50)\n after : cursor",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 3,
advanced: true,
},
],
returnType: "object",
returnDescription: "{ issueLabels: { nodes: [{id,name,color,team:{key}}, …], pageInfo: {…} } }.",
errors: commonErrors,
example: 'linear.listLabels "my_linear" {filter: {team: {id: {eq: "team_…"}}}}',
},
createLabel: {
title: "Create label",
summary: "Create a new issue label",
description: "Runs `issueLabelCreate(input: IssueLabelCreateInput)`. Required: `name`. Common optional: `color` (hex), `description`, `teamId` (scope to one team — omit for a workspace-wide label).",
group: "labels",
action: "write",
icon: "plus-circle",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["linear", "label", "create"],
parameters: [
credentialParam,
{
name: "input",
title: "Label input",
description: "`IssueLabelCreateInput` object. Required: `name`. Optional: `color`, `description`, `teamId`.",
dataType: "object",
formInputType: "json",
required: true,
allowExpression: true,
language: "json",
rows: 4,
},
],
returnType: "object",
returnDescription: "{ issueLabelCreate: { success: bool, issueLabel: {…} } }.",
errors: commonErrors,
example: 'linear.createLabel "my_linear" {name: "bug", color: "#dc2626", teamId: "team_…"}',
},
// ===================== COMMENTS =====================
listComments: {
title: "List comments on an issue",
summary: "Page through comments belonging to an issue",
description: "Runs `comments(filter: {issue: {id: {eq: <issueId>}}}, first, after)`. Comments are returned oldest-first by default.",
group: "comments",
action: "read",
icon: "message-circle",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "comment", "list"],
parameters: [
credentialParam,
issueIdParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n first : page size (default 50)\n after : cursor",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 2,
advanced: true,
},
],
returnType: "object",
returnDescription: "{ comments: { nodes: [{id,body,user,createdAt,…}, …], pageInfo: {…} } }.",
errors: commonErrors,
example: 'linear.listComments "my_linear" "ENG-123"',
},
createComment: {
title: "Add comment",
summary: "Post a comment on an issue",
description: "Runs `commentCreate(input: {issueId, body})`. Comment bodies support Linear's Markdown.",
group: "comments",
action: "write",
icon: "message-square",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: false,
since: "1.0.0",
tags: ["linear", "comment", "create"],
parameters: [
credentialParam,
issueIdParam,
{
name: "body",
title: "Comment body",
description: "Markdown-formatted comment text. `@username` notifies members.",
dataType: "string",
formInputType: "textarea",
required: true,
allowExpression: true,
rows: 4,
placeholder: "Root-cause found — fix shipping in build #42.",
},
],
returnType: "object",
returnDescription: "{ commentCreate: { success: bool, comment: {…} } }.",
errors: commonErrors,
example: 'linear.createComment "my_linear" "ENG-123" "Shipped in build #42"',
},
// ===================== USERS =====================
listUsers: {
title: "List users",
summary: "Page through users in the organization",
description: "Runs `users(first, after, filter, includeArchived)`. Use `options.filter = {email: {eq: \"foo@bar.com\"}}` to resolve a user by email.",
group: "users",
action: "query",
icon: "users",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "user", "list"],
parameters: [
credentialParam,
{
name: "options",
title: "Options",
description: "Recognized keys:\n filter : UserFilter GraphQL object\n first : page size (default 50)\n after : cursor\n includeArchived : bool",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 3,
advanced: true,
},
],
returnType: "object",
returnDescription: "{ users: { nodes: [{id,name,displayName,email,active,…}, …], pageInfo: {…} } }.",
errors: commonErrors,
example: 'linear.listUsers "my_linear" {filter: {active: {eq: true}}}',
},
// ===================== RAW =====================
query: {
title: "Raw GraphQL query",
summary: "Execute an arbitrary GraphQL query/mutation",
description: "Escape hatch for any operation not covered by the typed wrappers — pass the full GraphQL string plus a `variables` object. The response is returned as-is (the `data` envelope is unwrapped; `errors[]` causes the call to return a `linear_error` envelope).",
group: "raw",
action: "query",
icon: "code",
capability: "manage_options",
sideEffects: ["makes_http_call"],
idempotent: true,
since: "1.0.0",
tags: ["linear", "graphql", "raw"],
parameters: [
credentialParam,
{
name: "query",
title: "GraphQL document",
description: "A full GraphQL query or mutation string. Declare variables in the operation signature and pass their values via `variables`.",
dataType: "string",
formInputType: "code",
required: true,
allowExpression: true,
language: "graphql",
rows: 10,
placeholder: "query { viewer { id name } }",
},
{
name: "variables",
title: "Variables",
description: "Flat object of GraphQL variables referenced by the document.",
dataType: "object",
formInputType: "json",
required: false,
allowExpression: true,
language: "json",
rows: 4,
},
],
returnType: "object",
returnDescription: "The unwrapped `data` payload from Linear's GraphQL response.",
errors: commonErrors,
example: 'linear.query "my_linear" "query($id: String!) { issue(id: $id) { title } }" {id:"ENG-123"}',
},
};
// ── Exports: module metadata ───────────────────────────────────────────
export const LinearModuleMetadata = {
slug: "linear",
title: "Linear",
summary: "Issues, projects, cycles, teams, labels — manage your Linear workspace",
description: "Create and update Linear issues from RobinPath scripts — sync form submissions, transition issues through workflow states, reassign, comment, label, and search your workspace via GraphQL.\n\nAuthenticated with a **Personal API Key** from linear.app/settings/api. Store the key as a `linear` credential and pass the slug as the first argument to every method.\n\nLinear authenticates with a raw `Authorization` header (no `Bearer` prefix) — that's a Linear quirk. The module handles it; you just store the key.\n\nMost typed wrappers map directly to a single GraphQL query/mutation and return the full response. Use `linear.query` for anything not covered — you can execute any GraphQL operation with full access to the Linear schema.",
category: "project-management",
icon: "icon.svg",
color: "#5E6AD2",
version: "0.2.0",
docsUrl: "https://docs.robinpath.com/modules/linear",
status: "stable",
requires: [],
minNodeVersion: "18.0.0",
credentialsType: CREDENTIAL_TYPE,
operationGroups: {
viewer: {
title: "Viewer",
description: "Inspect the user behind the API key.",
order: 1,
},
issues: {
title: "Issues",
description: "Create, update, search, and delete issues.",
order: 2,
},
projects: {
title: "Projects",
description: "Multi-team initiatives with milestones and target dates.",
order: 3,
},
teams: {
title: "Teams",
description: "Top-level work containers — each has its own key and workflow.",
order: 4,
},
labels: {
title: "Labels",
description: "Issue labels, per-team or workspace-wide.",
order: 5,
},
comments: {
title: "Comments",
description: "Post and list comments on issues.",
order: 6,
},
users: {
title: "Users",
description: "Look up organization members by name, email, or id.",
order: 7,
},
raw: {
title: "Raw GraphQL",
description: "Escape hatch for arbitrary Linear GraphQL operations.",
order: 8,
},
},
methods: Object.keys(LinearFunctions),
};
//# sourceMappingURL=linear.js.map
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../src/linear.ts"],"names":[],"mappings":"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"}
+19
-9
{
"name": "@robinpath/linear",
"version": "0.1.2",
"version": "0.3.0",
"publishConfig": {

@@ -23,12 +23,16 @@ "access": "public"

"peerDependencies": {
"@robinpath/core": ">=0.20.0"
"@robinpath/core": ">=0.40.0"
},
"devDependencies": {
"@robinpath/core": "^0.30.1",
"@robinpath/core": "^0.40.0",
"typescript": "^5.6.0"
},
"description": "Linear module for RobinPath.",
"description": "Linear GraphQL API — issues, projects, teams, labels, users, and comments. Uses the encrypted credential vault for Personal API keys.",
"keywords": [
"linear",
"project management"
"project management",
"project-management",
"issues",
"graphql",
"productivity"
],

@@ -38,7 +42,13 @@ "license": "MIT",

"category": "project-management",
"type": "integration",
"auth": "api-key",
"functionCount": 21,
"baseUrl": "https://api.linear.app"
"type": "module",
"auth": "credential-vault",
"functionCount": 20,
"baseUrl": "https://api.linear.app",
"language": "nodejs",
"platforms": [
"cloud",
"cli",
"desktop"
]
}
}

@@ -22,3 +22,3 @@ # @robinpath/linear

```bash
npm install @robinpath/linear
robinpath add @robinpath/linear
```

@@ -25,0 +25,0 @@