fakeplane 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +12 -0
  3. package/README.md +225 -2
  4. package/demo/agents/careful.mjs +89 -0
  5. package/demo/agents/naive.mjs +50 -0
  6. package/demo/scenarios/large-refund-escalation.yaml +38 -0
  7. package/demo/scenarios/refund-ambiguous-timeout.yaml +40 -0
  8. package/demo/scenarios/refund-duplicate-webhook.yaml +40 -0
  9. package/dist/agent.d.ts +28 -0
  10. package/dist/agent.js +113 -0
  11. package/dist/agent.js.map +1 -0
  12. package/dist/assertions.d.ts +21 -0
  13. package/dist/assertions.js +180 -0
  14. package/dist/assertions.js.map +1 -0
  15. package/dist/backends/common.d.ts +13 -0
  16. package/dist/backends/common.js +37 -0
  17. package/dist/backends/common.js.map +1 -0
  18. package/dist/backends/generic.d.ts +79 -0
  19. package/dist/backends/generic.js +227 -0
  20. package/dist/backends/generic.js.map +1 -0
  21. package/dist/backends/graphql.d.ts +22 -0
  22. package/dist/backends/graphql.js +248 -0
  23. package/dist/backends/graphql.js.map +1 -0
  24. package/dist/backends/index.d.ts +24 -0
  25. package/dist/backends/index.js +27 -0
  26. package/dist/backends/index.js.map +1 -0
  27. package/dist/backends/linear.d.ts +123 -0
  28. package/dist/backends/linear.js +451 -0
  29. package/dist/backends/linear.js.map +1 -0
  30. package/dist/backends/slack.d.ts +92 -0
  31. package/dist/backends/slack.js +221 -0
  32. package/dist/backends/slack.js.map +1 -0
  33. package/dist/backends/zendesk.d.ts +94 -0
  34. package/dist/backends/zendesk.js +455 -0
  35. package/dist/backends/zendesk.js.map +1 -0
  36. package/dist/cli.d.ts +2 -0
  37. package/dist/cli.js +340 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/index.d.ts +15 -0
  40. package/dist/index.js +16 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/matchers.d.ts +11 -0
  43. package/dist/matchers.js +156 -0
  44. package/dist/matchers.js.map +1 -0
  45. package/dist/mcp.d.ts +43 -0
  46. package/dist/mcp.js +116 -0
  47. package/dist/mcp.js.map +1 -0
  48. package/dist/pii.d.ts +17 -0
  49. package/dist/pii.js +79 -0
  50. package/dist/pii.js.map +1 -0
  51. package/dist/report.d.ts +13 -0
  52. package/dist/report.js +97 -0
  53. package/dist/report.js.map +1 -0
  54. package/dist/runner.d.ts +56 -0
  55. package/dist/runner.js +114 -0
  56. package/dist/runner.js.map +1 -0
  57. package/dist/scenario.d.ts +270 -0
  58. package/dist/scenario.js +270 -0
  59. package/dist/scenario.js.map +1 -0
  60. package/dist/server.d.ts +40 -0
  61. package/dist/server.js +241 -0
  62. package/dist/server.js.map +1 -0
  63. package/dist/trace.d.ts +42 -0
  64. package/dist/trace.js +432 -0
  65. package/dist/trace.js.map +1 -0
  66. package/dist/types.d.ts +70 -0
  67. package/dist/types.js +16 -0
  68. package/dist/types.js.map +1 -0
  69. package/dist/util.d.ts +13 -0
  70. package/dist/util.js +89 -0
  71. package/dist/util.js.map +1 -0
  72. package/dist/version.d.ts +1 -0
  73. package/dist/version.js +2 -0
  74. package/dist/version.js.map +1 -0
  75. package/dist/world.d.ts +149 -0
  76. package/dist/world.js +187 -0
  77. package/dist/world.js.map +1 -0
  78. package/package.json +68 -4
@@ -0,0 +1,123 @@
1
+ import { ApiError, type JsonObject } from "../types.js";
2
+ import type { Backend, DispatchResult, HttpReply, HttpRequestInfo, HttpRoute, Operation, TurnInjection, World } from "../world.js";
3
+ interface Team {
4
+ id: string;
5
+ key: string;
6
+ name: string;
7
+ }
8
+ interface State {
9
+ id: string;
10
+ name: string;
11
+ type: "backlog" | "unstarted" | "started" | "completed" | "canceled" | "triage";
12
+ teamId: string;
13
+ }
14
+ interface User {
15
+ id: string;
16
+ name: string;
17
+ email?: string;
18
+ }
19
+ interface Label {
20
+ id: string;
21
+ name: string;
22
+ }
23
+ export interface LinearSeed {
24
+ teams?: Partial<Team>[];
25
+ users?: User[];
26
+ states?: (Partial<State> & {
27
+ name: string;
28
+ team?: string;
29
+ })[];
30
+ labels?: (Partial<Label> & {
31
+ name: string;
32
+ })[];
33
+ issues?: {
34
+ id?: string;
35
+ identifier?: string;
36
+ team?: string;
37
+ title: string;
38
+ description?: string;
39
+ priority?: number;
40
+ state?: string;
41
+ assignee?: string;
42
+ labels?: string[];
43
+ comments?: {
44
+ body: string;
45
+ user?: string;
46
+ }[];
47
+ }[];
48
+ }
49
+ export declare class LinearBackend implements Backend {
50
+ private readonly world;
51
+ readonly name = "linear";
52
+ readonly mounts: {
53
+ prefix: string;
54
+ strip: boolean;
55
+ }[];
56
+ private teams;
57
+ private states;
58
+ private users;
59
+ private labels;
60
+ private issues;
61
+ private readonly botId;
62
+ constructor(world: World, seed?: LinearSeed);
63
+ private findTeam;
64
+ private team;
65
+ private state;
66
+ private user;
67
+ private label;
68
+ private issue;
69
+ private view;
70
+ private commentView;
71
+ private applyFields;
72
+ operations(): Operation[];
73
+ routes(): HttpRoute[];
74
+ handleHttp(req: HttpRequestInfo, dispatch: (op: string, input: unknown) => Promise<DispatchResult>): Promise<HttpReply | undefined>;
75
+ private mapField;
76
+ errorResponse(err: ApiError): {
77
+ status: number;
78
+ body: {
79
+ errors: {
80
+ message: string;
81
+ extensions: {
82
+ code: string;
83
+ };
84
+ }[];
85
+ };
86
+ headers: {
87
+ "Retry-After": string;
88
+ };
89
+ } | {
90
+ status: number;
91
+ body: {
92
+ errors: {
93
+ message: string;
94
+ extensions: {
95
+ code: string;
96
+ };
97
+ }[];
98
+ };
99
+ headers?: undefined;
100
+ };
101
+ injectTurn(turn: TurnInjection, { deliveryId }: {
102
+ world: World;
103
+ deliveryId: string;
104
+ }): JsonObject;
105
+ snapshot(): {
106
+ issues: Record<string, unknown>;
107
+ teams: {
108
+ [k: string]: {
109
+ id: string;
110
+ key: string;
111
+ name: string;
112
+ };
113
+ };
114
+ users: {
115
+ [k: string]: {
116
+ id: string;
117
+ name: string;
118
+ email?: string;
119
+ };
120
+ };
121
+ };
122
+ }
123
+ export {};
@@ -0,0 +1,451 @@
1
+ import { ApiError } from "../types.js";
2
+ import { IDEMPOTENCY_KEY, int, obj, required, str, strList, stringList } from "./common.js";
3
+ import { GraphQLSyntaxError, parseOperation, project } from "./graphql.js";
4
+ const PRIORITY_LABELS = ["No priority", "Urgent", "High", "Medium", "Low"];
5
+ const DEFAULT_STATES = [
6
+ ["Backlog", "backlog"],
7
+ ["Todo", "unstarted"],
8
+ ["In Progress", "started"],
9
+ ["Done", "completed"],
10
+ ["Canceled", "canceled"],
11
+ ];
12
+ const slug = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, "_");
13
+ export class LinearBackend {
14
+ world;
15
+ name = "linear";
16
+ mounts = [
17
+ { prefix: "/linear", strip: true },
18
+ { prefix: "/graphql", strip: false },
19
+ ];
20
+ teams = new Map();
21
+ states = new Map();
22
+ users = new Map();
23
+ labels = new Map();
24
+ issues = new Map();
25
+ botId = "user_agent";
26
+ constructor(world, seed = {}) {
27
+ this.world = world;
28
+ this.users.set(this.botId, { id: this.botId, name: "Agent", email: "agent@support.example" });
29
+ for (const u of seed.users ?? [])
30
+ this.users.set(u.id, { ...u });
31
+ const teams = seed.teams?.length ? seed.teams : [{ key: "ENG", name: "Engineering" }];
32
+ for (const t of teams) {
33
+ const key = String(t.key ?? "ENG").toUpperCase();
34
+ const team = { id: t.id ?? `team_${key.toLowerCase()}`, key, name: t.name ?? key };
35
+ this.teams.set(team.id, team);
36
+ }
37
+ for (const team of this.teams.values()) {
38
+ const custom = (seed.states ?? []).filter((s) => !s.team || this.findTeam(s.team)?.id === team.id);
39
+ const list = custom.length ? custom.map((s) => [s.name, s.type ?? "unstarted"]) : DEFAULT_STATES;
40
+ for (const [name, type] of list) {
41
+ const id = `state_${team.key.toLowerCase()}_${slug(name)}`;
42
+ this.states.set(id, { id, name, type, teamId: team.id });
43
+ }
44
+ }
45
+ for (const l of seed.labels ?? []) {
46
+ const id = l.id ?? `label_${slug(l.name)}`;
47
+ this.labels.set(id, { id, name: l.name });
48
+ }
49
+ for (const i of seed.issues ?? []) {
50
+ const team = i.team ? this.team(i.team) : [...this.teams.values()][0];
51
+ const number = i.identifier ? Number(i.identifier.split("-")[1]) : this.world.next(`linear.${team.key}`);
52
+ this.world.bumpCounter(`linear.${team.key}`, number);
53
+ const identifier = `${team.key}-${number}`;
54
+ const now = world.now();
55
+ this.issues.set(identifier, {
56
+ id: i.id ?? `issue_${identifier.toLowerCase().replace("-", "_")}`,
57
+ identifier,
58
+ number,
59
+ title: i.title,
60
+ description: i.description ?? "",
61
+ priority: i.priority ?? 0,
62
+ teamId: team.id,
63
+ stateId: this.state(team, i.state ?? "Todo").id,
64
+ assigneeId: i.assignee ? this.user(i.assignee).id : null,
65
+ labelIds: (i.labels ?? []).map((n) => this.label(n).id),
66
+ comments: (i.comments ?? []).map((c) => ({
67
+ id: `comment_${this.world.next("linear.comment")}`,
68
+ body: c.body,
69
+ userId: c.user ? this.user(c.user).id : this.botId,
70
+ createdAt: now,
71
+ })),
72
+ createdAt: now,
73
+ updatedAt: now,
74
+ });
75
+ }
76
+ }
77
+ findTeam(ref) {
78
+ return this.teams.get(ref) ?? [...this.teams.values()].find((t) => t.key.toLowerCase() === ref.toLowerCase() || t.name.toLowerCase() === ref.toLowerCase());
79
+ }
80
+ team(ref) {
81
+ const t = this.findTeam(String(ref));
82
+ if (!t)
83
+ throw new ApiError(400, "InvalidInput", `Team ${String(ref)} not found`);
84
+ return t;
85
+ }
86
+ state(team, ref) {
87
+ const key = String(ref).toLowerCase();
88
+ const s = this.states.get(String(ref)) ??
89
+ [...this.states.values()].find((x) => x.teamId === team.id && (x.name.toLowerCase() === key || x.type === key));
90
+ if (!s || s.teamId !== team.id)
91
+ throw new ApiError(400, "InvalidInput", `Workflow state ${String(ref)} not found in team ${team.key}`);
92
+ return s;
93
+ }
94
+ user(ref) {
95
+ const key = String(ref).toLowerCase();
96
+ const u = this.users.get(String(ref)) ?? [...this.users.values()].find((x) => x.email?.toLowerCase() === key || x.name.toLowerCase() === key);
97
+ if (!u)
98
+ throw new ApiError(400, "InvalidInput", `User ${String(ref)} not found`);
99
+ return u;
100
+ }
101
+ label(ref) {
102
+ const existing = this.labels.get(ref) ?? [...this.labels.values()].find((l) => l.name.toLowerCase() === ref.toLowerCase());
103
+ if (existing)
104
+ return existing;
105
+ const l = { id: `label_${slug(ref)}`, name: ref };
106
+ this.labels.set(l.id, l);
107
+ return l;
108
+ }
109
+ issue(ref) {
110
+ const key = String(ref);
111
+ const i = this.issues.get(key.toUpperCase()) ?? [...this.issues.values()].find((x) => x.id === key);
112
+ if (!i)
113
+ throw new ApiError(404, "EntityNotFound", `Issue ${key} not found`);
114
+ return i;
115
+ }
116
+ view(i) {
117
+ const team = this.teams.get(i.teamId);
118
+ const state = this.states.get(i.stateId);
119
+ const assignee = i.assigneeId ? this.users.get(i.assigneeId) : undefined;
120
+ return {
121
+ __typename: "Issue",
122
+ id: i.id,
123
+ identifier: i.identifier,
124
+ number: i.number,
125
+ title: i.title,
126
+ description: i.description,
127
+ priority: i.priority,
128
+ priorityLabel: PRIORITY_LABELS[i.priority] ?? "No priority",
129
+ url: `https://linear.example/issue/${i.identifier}`,
130
+ createdAt: i.createdAt,
131
+ updatedAt: i.updatedAt,
132
+ team: { __typename: "Team", ...team },
133
+ state: { __typename: "WorkflowState", id: state.id, name: state.name, type: state.type },
134
+ assignee: assignee ? { __typename: "User", ...assignee } : null,
135
+ labels: { nodes: i.labelIds.map((id) => ({ __typename: "IssueLabel", ...this.labels.get(id) })) },
136
+ comments: { nodes: i.comments.map((c) => this.commentView(c)) },
137
+ };
138
+ }
139
+ commentView(c) {
140
+ const u = this.users.get(c.userId);
141
+ return { __typename: "Comment", id: c.id, body: c.body, createdAt: c.createdAt, user: u ? { __typename: "User", ...u } : null };
142
+ }
143
+ applyFields(i, team, input) {
144
+ const changes = {};
145
+ const set = (k, v) => {
146
+ if (JSON.stringify(i[k]) !== JSON.stringify(v)) {
147
+ changes[k] = { from: i[k], to: v };
148
+ i[k] = v;
149
+ }
150
+ };
151
+ if (input.title !== undefined)
152
+ set("title", String(input.title));
153
+ if (input.description !== undefined)
154
+ set("description", String(input.description));
155
+ if (input.priority !== undefined) {
156
+ const p = Number(input.priority);
157
+ if (!Number.isInteger(p) || p < 0 || p > 4)
158
+ throw new ApiError(400, "InvalidInput", "priority must be an integer 0-4");
159
+ set("priority", p);
160
+ }
161
+ if (input.state !== undefined)
162
+ set("stateId", this.state(team, input.state).id);
163
+ if (input.assignee !== undefined)
164
+ set("assigneeId", input.assignee === null ? null : this.user(input.assignee).id);
165
+ if (input.labels !== undefined)
166
+ set("labelIds", stringList(input.labels).map((n) => this.label(n).id));
167
+ if (input.add_labels !== undefined)
168
+ set("labelIds", [...new Set([...i.labelIds, ...stringList(input.add_labels).map((n) => this.label(n).id)])]);
169
+ return changes;
170
+ }
171
+ operations() {
172
+ const b = "linear";
173
+ return [
174
+ {
175
+ id: "linear.issue.create",
176
+ backend: b,
177
+ write: true,
178
+ tool: {
179
+ name: "linear_create_issue",
180
+ description: "Create an issue in a Linear team.",
181
+ inputSchema: obj({
182
+ team: str("Team key, name or id"),
183
+ title: str("Title"),
184
+ description: str("Markdown description"),
185
+ priority: int("0 none, 1 urgent, 2 high, 3 medium, 4 low"),
186
+ state: str("Workflow state name or id"),
187
+ assignee: str("User id, email or name"),
188
+ labels: strList("Label names"),
189
+ idempotency_key: IDEMPOTENCY_KEY,
190
+ }, ["team", "title"]),
191
+ },
192
+ run: (input, ctx) => {
193
+ const team = this.team(required(input, "team", "teamId"));
194
+ const number = this.world.next(`linear.${team.key}`);
195
+ const identifier = `${team.key}-${number}`;
196
+ const issue = {
197
+ id: `issue_${team.key.toLowerCase()}_${number}`,
198
+ identifier,
199
+ number,
200
+ title: String(required(input, "title")),
201
+ description: "",
202
+ priority: 0,
203
+ teamId: team.id,
204
+ stateId: this.state(team, input.state ?? "Todo").id,
205
+ assigneeId: null,
206
+ labelIds: [],
207
+ comments: [],
208
+ createdAt: ctx.now(),
209
+ updatedAt: ctx.now(),
210
+ };
211
+ this.applyFields(issue, team, { ...input, title: undefined, state: undefined });
212
+ this.issues.set(identifier, issue);
213
+ const view = this.view(issue);
214
+ ctx.effect("linear.issue.create", { identifier, team: team.key, title: issue.title, description: issue.description, priority: issue.priority, state: view.state.name, labels: stringList(input.labels) }, `team:${team.key}`);
215
+ return view;
216
+ },
217
+ },
218
+ {
219
+ id: "linear.issue.update",
220
+ backend: b,
221
+ write: true,
222
+ tool: {
223
+ name: "linear_update_issue",
224
+ description: "Update an issue's title, description, priority, state, assignee or labels.",
225
+ inputSchema: obj({
226
+ issue: str("Issue identifier (ENG-12) or id"),
227
+ title: str("Title"),
228
+ description: str("Description"),
229
+ priority: int("0-4"),
230
+ state: str("Workflow state name or id"),
231
+ assignee: str("User id, email or name"),
232
+ labels: strList("Replace labels"),
233
+ add_labels: strList("Labels to add"),
234
+ idempotency_key: IDEMPOTENCY_KEY,
235
+ }, ["issue"]),
236
+ },
237
+ run: (input, ctx) => {
238
+ const issue = this.issue(required(input, "issue", "id"));
239
+ const changes = this.applyFields(issue, this.teams.get(issue.teamId), input);
240
+ if (Object.keys(changes).length) {
241
+ issue.updatedAt = ctx.now();
242
+ const view = this.view(issue);
243
+ ctx.effect("linear.issue.update", { identifier: issue.identifier, changes, state: view.state.name }, `issue:${issue.identifier}`);
244
+ }
245
+ return this.view(issue);
246
+ },
247
+ },
248
+ {
249
+ id: "linear.comment.create",
250
+ backend: b,
251
+ write: true,
252
+ tool: {
253
+ name: "linear_add_comment",
254
+ description: "Comment on an issue.",
255
+ inputSchema: obj({ issue: str("Issue identifier or id"), body: str("Markdown body"), idempotency_key: IDEMPOTENCY_KEY }, ["issue", "body"]),
256
+ },
257
+ run: (input, ctx) => {
258
+ const issue = this.issue(required(input, "issue", "issueId"));
259
+ const c = { id: `comment_${this.world.next("linear.comment")}`, body: String(required(input, "body")), userId: this.botId, createdAt: ctx.now() };
260
+ issue.comments.push(c);
261
+ issue.updatedAt = ctx.now();
262
+ ctx.effect("linear.comment.create", { identifier: issue.identifier, body: c.body }, `issue:${issue.identifier}`);
263
+ return { ...this.commentView(c), issue: { id: issue.id, identifier: issue.identifier } };
264
+ },
265
+ },
266
+ {
267
+ id: "linear.issue.get",
268
+ backend: b,
269
+ write: false,
270
+ tool: { name: "linear_get_issue", description: "Get an issue with its comments.", inputSchema: obj({ issue: str("Issue identifier or id") }, ["issue"]) },
271
+ run: (input) => this.view(this.issue(required(input, "issue", "id"))),
272
+ },
273
+ {
274
+ id: "linear.issue.list",
275
+ backend: b,
276
+ write: false,
277
+ tool: {
278
+ name: "linear_list_issues",
279
+ description: "List issues, optionally filtered by team, state, assignee or text query.",
280
+ inputSchema: obj({ team: str("Team key"), state: str("State name or type"), assignee: str("User id, email or name"), query: str("Text in title or description"), limit: int("Max results (default 50)") }),
281
+ },
282
+ run: (input = {}) => {
283
+ let list = [...this.issues.values()];
284
+ if (input.team)
285
+ list = list.filter((i) => i.teamId === this.team(input.team).id);
286
+ if (input.state) {
287
+ const k = String(input.state).toLowerCase();
288
+ list = list.filter((i) => {
289
+ const s = this.states.get(i.stateId);
290
+ return s.name.toLowerCase() === k || s.type === k || s.id === input.state;
291
+ });
292
+ }
293
+ if (input.assignee)
294
+ list = list.filter((i) => i.assigneeId === this.user(input.assignee).id);
295
+ if (input.query) {
296
+ const q = String(input.query).toLowerCase();
297
+ list = list.filter((i) => `${i.title} ${i.description}`.toLowerCase().includes(q));
298
+ }
299
+ return list.slice(0, Number(input.limit ?? 50)).map((i) => this.view(i));
300
+ },
301
+ },
302
+ {
303
+ id: "linear.team.list",
304
+ backend: b,
305
+ write: false,
306
+ tool: { name: "linear_list_teams", description: "List teams and their workflow states.", inputSchema: obj({}) },
307
+ run: () => [...this.teams.values()].map((t) => ({
308
+ __typename: "Team",
309
+ ...t,
310
+ states: { nodes: [...this.states.values()].filter((s) => s.teamId === t.id).map(({ teamId: _t, ...s }) => ({ __typename: "WorkflowState", ...s })) },
311
+ })),
312
+ },
313
+ ];
314
+ }
315
+ routes() {
316
+ return [];
317
+ }
318
+ async handleHttp(req, dispatch) {
319
+ if (req.method !== "POST" || !/^\/graphql\/?$/.test(req.path))
320
+ return undefined;
321
+ const { query, variables, operationName } = (req.body ?? {});
322
+ if (typeof query !== "string")
323
+ return { status: 400, body: { errors: [{ message: "Must provide query string", extensions: { code: "GRAPHQL_PARSE_FAILED" } }] } };
324
+ let op;
325
+ try {
326
+ op = parseOperation(query, variables ?? {}, operationName);
327
+ }
328
+ catch (err) {
329
+ if (err instanceof GraphQLSyntaxError)
330
+ return { status: 400, body: { errors: [{ message: `Syntax Error: ${err.message}`, extensions: { code: "GRAPHQL_PARSE_FAILED" } }] } };
331
+ throw err;
332
+ }
333
+ const data = {};
334
+ const errors = [];
335
+ for (const field of op.fields) {
336
+ const key = field.alias ?? field.name;
337
+ const mapped = this.mapField(op.type, field.name, field.args);
338
+ if (!mapped) {
339
+ if (field.name === "__typename") {
340
+ data[key] = op.type === "mutation" ? "Mutation" : "Query";
341
+ continue;
342
+ }
343
+ return { status: 400, body: { errors: [{ message: `Cannot query field "${field.name}" on type "${op.type === "mutation" ? "Mutation" : "Query"}". fakeplane supports: ${SUPPORTED.join(", ")}`, extensions: { code: "GRAPHQL_VALIDATION_FAILED" } }] } };
344
+ }
345
+ const res = await dispatch(mapped.op, mapped.input);
346
+ if (res.drop)
347
+ return { status: 0, body: null, drop: true };
348
+ if (res.error && (res.status === 429 || res.status >= 500)) {
349
+ return res.status === 429
350
+ ? { status: 400, body: { errors: [{ message: res.error.message, extensions: { code: "RATELIMITED", type: "Ratelimited" } }] }, headers: { "Retry-After": String(res.error.retryAfter ?? 1) } }
351
+ : { status: res.status, body: { errors: [{ message: res.error.message, extensions: { code: "INTERNAL_SERVER_ERROR" } }] } };
352
+ }
353
+ if (res.error) {
354
+ data[key] = null;
355
+ errors.push({ message: res.error.message, path: [key], extensions: { code: res.error.code === "EntityNotFound" ? "ENTITY_NOT_FOUND" : "INVALID_INPUT", type: res.error.code } });
356
+ continue;
357
+ }
358
+ data[key] = project(mapped.wrap(res.output), field.selection);
359
+ }
360
+ return { status: 200, body: errors.length ? { data, errors } : { data } };
361
+ }
362
+ mapField(type, name, args) {
363
+ const conn = (o) => ({ nodes: o, pageInfo: { hasNextPage: false, endCursor: null } });
364
+ const success = (field) => (o) => ({ success: true, lastSyncId: this.world.calls.length, [field]: o });
365
+ const fromInput = (inp = {}) => ({
366
+ team: inp.teamId,
367
+ title: inp.title,
368
+ description: inp.description,
369
+ priority: inp.priority,
370
+ state: inp.stateId,
371
+ assignee: inp.assigneeId,
372
+ labels: inp.labelIds,
373
+ });
374
+ if (type === "mutation") {
375
+ if (name === "issueCreate")
376
+ return { op: "linear.issue.create", input: fromInput(args.input), wrap: success("issue") };
377
+ if (name === "issueUpdate")
378
+ return { op: "linear.issue.update", input: { issue: args.id, ...fromInput(args.input) }, wrap: success("issue") };
379
+ if (name === "commentCreate")
380
+ return { op: "linear.comment.create", input: { issue: args.input?.issueId, body: args.input?.body }, wrap: success("comment") };
381
+ return undefined;
382
+ }
383
+ if (name === "issue")
384
+ return { op: "linear.issue.get", input: { issue: args.id }, wrap: (o) => o };
385
+ if (name === "issues" || name === "searchIssues" || name === "issueSearch") {
386
+ const f = args.filter ?? {};
387
+ return {
388
+ op: "linear.issue.list",
389
+ input: {
390
+ team: f.team?.key?.eq ?? f.team?.id?.eq,
391
+ state: f.state?.name?.eq ?? f.state?.type?.eq ?? f.state?.id?.eq,
392
+ assignee: f.assignee?.id?.eq ?? f.assignee?.email?.eq,
393
+ query: args.term ?? args.query,
394
+ limit: args.first,
395
+ },
396
+ wrap: conn,
397
+ };
398
+ }
399
+ if (name === "teams")
400
+ return { op: "linear.team.list", input: {}, wrap: conn };
401
+ if (name === "viewer")
402
+ return { op: "linear.team.list", input: {}, wrap: () => ({ __typename: "User", ...this.users.get(this.botId) }) };
403
+ return undefined;
404
+ }
405
+ errorResponse(err) {
406
+ if (err.status === 429)
407
+ return { status: 400, body: { errors: [{ message: err.message, extensions: { code: "RATELIMITED" } }] }, headers: { "Retry-After": String(err.retryAfter ?? 1) } };
408
+ return { status: err.status, body: { errors: [{ message: err.message, extensions: { code: err.code } }] } };
409
+ }
410
+ injectTurn(turn, { deliveryId }) {
411
+ if (turn.issue) {
412
+ const issue = this.issue(turn.issue);
413
+ const user = turn.user ? this.user(turn.user) : [...this.users.values()].find((u) => u.id !== this.botId) ?? this.users.get(this.botId);
414
+ const c = { id: `comment_${this.world.next("linear.comment")}`, body: String(turn.text ?? ""), userId: user.id, createdAt: this.world.now() };
415
+ issue.comments.push(c);
416
+ return { type: "Comment", action: "create", webhookId: deliveryId, data: { ...this.commentView(c), issue: { id: issue.id, identifier: issue.identifier } } };
417
+ }
418
+ const team = turn.team ? this.team(turn.team) : [...this.teams.values()][0];
419
+ const number = this.world.next(`linear.${team.key}`);
420
+ const identifier = `${team.key}-${number}`;
421
+ const issue = {
422
+ id: `issue_${team.key.toLowerCase()}_${number}`,
423
+ identifier,
424
+ number,
425
+ title: String(turn.title ?? String(turn.text ?? "").slice(0, 60)),
426
+ description: String(turn.text ?? ""),
427
+ priority: 0,
428
+ teamId: team.id,
429
+ stateId: this.state(team, "Todo").id,
430
+ assigneeId: null,
431
+ labelIds: [],
432
+ comments: [],
433
+ createdAt: this.world.now(),
434
+ updatedAt: this.world.now(),
435
+ };
436
+ this.issues.set(identifier, issue);
437
+ return { type: "Issue", action: "create", webhookId: deliveryId, data: this.view(issue) };
438
+ }
439
+ snapshot() {
440
+ const issues = {};
441
+ for (const [id, i] of this.issues)
442
+ issues[id] = this.view(i);
443
+ return {
444
+ issues,
445
+ teams: Object.fromEntries([...this.teams].map(([id, t]) => [id, { ...t }])),
446
+ users: Object.fromEntries([...this.users].map(([id, u]) => [id, { ...u }])),
447
+ };
448
+ }
449
+ }
450
+ const SUPPORTED = ["issue", "issues", "searchIssues", "teams", "viewer", "issueCreate", "issueUpdate", "commentCreate"];
451
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/backends/linear.ts"],"names":[],"mappings":"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"}