@useairfoil/producer-linear 0.0.0-stage → 0.0.2

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 (50) hide show
  1. package/README.md +70 -2
  2. package/dist/index.d.mts +4027 -0
  3. package/dist/index.mjs +3 -0
  4. package/dist/main.d.mts +1 -0
  5. package/dist/main.mjs +1303 -0
  6. package/dist/main.mjs.map +1 -0
  7. package/dist/manifest.d.mts +114 -0
  8. package/dist/manifest.mjs +161 -0
  9. package/dist/manifest.mjs.map +1 -0
  10. package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
  11. package/dist/src-Ci3_ltan.mjs +1691 -0
  12. package/dist/src-Ci3_ltan.mjs.map +1 -0
  13. package/package.json +48 -4
  14. package/src/client/client.ts +200 -0
  15. package/src/connector.ts +151 -0
  16. package/src/create-table.ts +5 -0
  17. package/src/demo/index.ts +137 -0
  18. package/src/demo/initiatives.ts +116 -0
  19. package/src/demo/issues.ts +320 -0
  20. package/src/demo/projects.ts +215 -0
  21. package/src/demo/setup.ts +151 -0
  22. package/src/demo/shared.ts +122 -0
  23. package/src/demo/teams.ts +173 -0
  24. package/src/index.ts +83 -0
  25. package/src/main.ts +22 -0
  26. package/src/manifest.ts +58 -0
  27. package/src/resources/comments.ts +32 -0
  28. package/src/resources/customers.ts +105 -0
  29. package/src/resources/documents.ts +31 -0
  30. package/src/resources/initiatives.ts +136 -0
  31. package/src/resources/issue-history.ts +119 -0
  32. package/src/resources/issues.ts +131 -0
  33. package/src/resources/pages.ts +264 -0
  34. package/src/resources/projects.ts +161 -0
  35. package/src/resources/releases.ts +114 -0
  36. package/src/resources/teams.ts +140 -0
  37. package/src/sandbox.ts +35 -0
  38. package/src/schemas/comments.ts +32 -0
  39. package/src/schemas/customers.ts +80 -0
  40. package/src/schemas/documents.ts +32 -0
  41. package/src/schemas/initiatives.ts +119 -0
  42. package/src/schemas/issues.ts +180 -0
  43. package/src/schemas/projects.ts +154 -0
  44. package/src/schemas/releases.ts +119 -0
  45. package/src/schemas/shared.ts +66 -0
  46. package/src/schemas/teams.ts +144 -0
  47. package/src/start.ts +47 -0
  48. package/src/tables.ts +83 -0
  49. package/src/webhook/route.ts +50 -0
  50. package/src/webhook/signature.ts +28 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.mjs","names":["ConnectorLayer","LinearConnector.layerConfig","TelemetryLayer","LinearConnector.LinearConnector","LinearConnector.layerConfig","LinearConnector.LinearConnector","packageJson.version"],"sources":["../package.json","../src/tables.ts","../src/create-table.ts","../src/demo/shared.ts","../src/demo/issues.ts","../src/demo/initiatives.ts","../src/demo/projects.ts","../src/demo/teams.ts","../src/demo/setup.ts","../src/demo/index.ts","../src/sandbox.ts","../src/start.ts","../src/main.ts"],"sourcesContent":["","import type { Schema } from \"effect\";\n\nimport { CommentSchema } from \"./schemas/comments\";\nimport {\n CustomerNeedSchema,\n CustomerSchema,\n CustomerStatusSchema,\n CustomerTierSchema,\n} from \"./schemas/customers\";\nimport { DocumentSchema } from \"./schemas/documents\";\nimport {\n InitiativeLabelSchema,\n InitiativeRelationSchema,\n InitiativeSchema,\n InitiativeToProjectSchema,\n InitiativeUpdateSchema,\n} from \"./schemas/initiatives\";\nimport {\n AttachmentSchema,\n IssueHistorySchema,\n IssueLabelSchema,\n IssueRelationSchema,\n IssueSchema,\n} from \"./schemas/issues\";\nimport {\n ProjectLabelSchema,\n ProjectMilestoneSchema,\n ProjectRelationSchema,\n ProjectSchema,\n ProjectStatusSchema,\n ProjectUpdateSchema,\n} from \"./schemas/projects\";\nimport {\n IssueToReleaseSchema,\n ReleaseNoteSchema,\n ReleasePipelineSchema,\n ReleaseSchema,\n ReleaseStageSchema,\n} from \"./schemas/releases\";\nimport {\n CycleSchema,\n ExternalUserSchema,\n TeamMembershipSchema,\n TeamSchema,\n UserSchema,\n WorkflowStateSchema,\n} from \"./schemas/teams\";\n\nexport const tableSchemas: Readonly<Record<string, Schema.Top>> = {\n issues: IssueSchema,\n issue_history: IssueHistorySchema,\n comments: CommentSchema,\n issue_relations: IssueRelationSchema,\n attachments: AttachmentSchema,\n issue_labels: IssueLabelSchema,\n workflow_states: WorkflowStateSchema,\n teams: TeamSchema,\n team_memberships: TeamMembershipSchema,\n users: UserSchema,\n external_users: ExternalUserSchema,\n cycles: CycleSchema,\n projects: ProjectSchema,\n project_milestones: ProjectMilestoneSchema,\n project_updates: ProjectUpdateSchema,\n project_statuses: ProjectStatusSchema,\n project_labels: ProjectLabelSchema,\n project_relations: ProjectRelationSchema,\n initiatives: InitiativeSchema,\n initiative_updates: InitiativeUpdateSchema,\n initiative_labels: InitiativeLabelSchema,\n initiative_relations: InitiativeRelationSchema,\n initiative_to_projects: InitiativeToProjectSchema,\n documents: DocumentSchema,\n customers: CustomerSchema,\n customer_needs: CustomerNeedSchema,\n customer_statuses: CustomerStatusSchema,\n customer_tiers: CustomerTierSchema,\n releases: ReleaseSchema,\n release_notes: ReleaseNoteSchema,\n release_pipelines: ReleasePipelineSchema,\n release_stages: ReleaseStageSchema,\n issue_to_releases: IssueToReleaseSchema,\n};\n","import { ConnectorApp } from \"@useairfoil/connector-kit\";\n\nimport { tableSchemas } from \"./tables\";\n\nexport const createTableCommand = ConnectorApp.makeCreateTableCommand(tableSchemas);\n","import type { Demo } from \"@useairfoil/connector-kit\";\n\nimport { DateTime, Duration } from \"effect\";\n\nimport type { Comment } from \"../schemas/comments\";\nimport type { CustomerNeed } from \"../schemas/customers\";\nimport type { Attachment, Issue, IssueHistory, IssueRelation } from \"../schemas/issues\";\nimport type { IssueToRelease } from \"../schemas/releases\";\n\nexport const hour = Duration.toMillis(Duration.hours(1));\nexport const day = Duration.toMillis(Duration.days(1));\nexport const workspace = \"https://linear.app/acme\";\n\n// Linear IDs are UUIDs. Each kind gets its own first block, and the index ends the ID.\nexport const uuid = (kind: number, index: number, part = 0) =>\n `${kind.toString(16).padStart(8, \"0\")}-${part.toString(16).padStart(4, \"0\")}-4000-8000-${index.toString(16).padStart(12, \"0\")}`;\n\nexport const dateOnly = (date: Date) => DateTime.formatIsoDateUtc(DateTime.fromDateUnsafe(date));\n\nexport const teams = [\n { key: \"ENG\", name: \"Engineering\", cycles: true, triage: false },\n { key: \"DES\", name: \"Design\", cycles: true, triage: false },\n { key: \"PRD\", name: \"Product\", cycles: false, triage: false },\n { key: \"SUP\", name: \"Support\", cycles: false, triage: true },\n] as const;\n\nexport const states = [\n { name: \"Triage\", type: \"triage\", color: \"#FC7840\" },\n { name: \"Backlog\", type: \"backlog\", color: \"#BEC2C8\" },\n { name: \"Todo\", type: \"unstarted\", color: \"#E2E2E2\" },\n { name: \"In Progress\", type: \"started\", color: \"#F2C94C\" },\n { name: \"In Review\", type: \"started\", color: \"#0F783C\" },\n { name: \"Done\", type: \"completed\", color: \"#5E6AD2\" },\n { name: \"Canceled\", type: \"canceled\", color: \"#95A2B3\" },\n] as const;\n\nexport const issueLabels = [\n { name: \"Bug\", color: \"#EB5757\" },\n { name: \"Feature\", color: \"#BB87FC\" },\n { name: \"Improvement\", color: \"#4EA7FC\" },\n { name: \"Docs\", color: \"#4CB782\" },\n] as const;\n\nexport const projectStatuses = [\n { name: \"Backlog\", type: \"backlog\", color: \"#bec2c8\" },\n { name: \"Planned\", type: \"planned\", color: \"#e2e2e2\" },\n { name: \"In Progress\", type: \"started\", color: \"#f2c94c\" },\n { name: \"Paused\", type: \"paused\", color: \"#95a2b3\" },\n { name: \"Completed\", type: \"completed\", color: \"#5e6ad2\" },\n { name: \"Canceled\", type: \"canceled\", color: \"#95a2b3\" },\n] as const;\n\nexport const projects = [\n \"Onboarding revamp\",\n \"Billing v2\",\n \"Mobile offline mode\",\n \"Search relevance\",\n \"SSO for enterprise\",\n \"Design system 2.0\",\n \"Usage analytics\",\n \"API rate limits\",\n] as const;\n\nexport const priorities = [\"No priority\", \"Urgent\", \"High\", \"Medium\", \"Low\"] as const;\nexport const userCount = 16;\nexport const customerCount = 12;\nexport const months = 12;\nexport const cycleWeeks = 2;\nexport const cyclesBack = 26;\n\nexport const teamId = (t: number) => uuid(1, t);\nexport const stateId = (t: number, s: number) => uuid(2, t, s);\nexport const userId = (u: number) => uuid(3, u);\nexport const labelId = (l: number) => uuid(4, l);\nexport const projectId = (p: number) => uuid(5, p);\nexport const milestoneId = (p: number, m: number) => uuid(6, p, m);\nexport const cycleId = (t: number, n: number) => uuid(7, t, n);\nexport const customerId = (c: number) => uuid(8, c);\nexport const pipelineId = uuid(9, 0);\nexport const releaseId = (m: number) => uuid(10, m);\nexport const initiativeId = (i: number) => uuid(11, i);\nexport const issueId = (index: number) => uuid(12, index);\n\n// Cycles end on the Monday nearest now, so the last one is current.\nexport const cycleStart = (now: Date, n: number) =>\n new Date(now.getTime() - (cyclesBack - n) * cycleWeeks * 7 * day);\n\nexport const stamp = (created: Date, updated: Date) => ({\n version: updated,\n created_at: created,\n updated_at: updated,\n archived_at: null,\n});\n\nexport const nameFor = (faker: Demo.DemoContext[\"faker\"]) => {\n const first = faker.person.firstName();\n const last = faker.person.lastName();\n\n return { first, last, name: `${first} ${last}` };\n};\n\n/** Date helpers for one run. `at` keeps a time from going past now. */\nexport const clock = ({ faker, now }: Demo.DemoContext) => {\n const at = (time: number) => new Date(Math.min(time, now.getTime()));\n\n const later = (from: Date, min: number, max: number) =>\n at(from.getTime() + faker.number.int({ min, max }));\n\n return { at, later };\n};\n\nexport type Rows = {\n readonly issues: Array<Issue>;\n readonly issue_history: Array<IssueHistory>;\n readonly comments: Array<Comment>;\n readonly issue_relations: Array<IssueRelation>;\n readonly attachments: Array<Attachment>;\n readonly customer_needs: Array<CustomerNeed>;\n readonly issue_to_releases: Array<IssueToRelease>;\n};\n\nexport const verbs = [\"Fix\", \"Add\", \"Improve\", \"Update\", \"Remove\", \"Support\"] as const;\n","import type { Demo } from \"@useairfoil/connector-kit\";\n\nimport type { Comment } from \"../schemas/comments\";\n\nimport {\n clock,\n customerCount,\n customerId,\n cycleId,\n cyclesBack,\n cycleWeeks,\n dateOnly,\n day,\n hour,\n issueId,\n issueLabels,\n labelId,\n milestoneId,\n months,\n priorities,\n projectId,\n projects,\n releaseId,\n type Rows,\n stamp,\n stateId,\n states,\n teamId,\n teams,\n userCount,\n userId,\n uuid,\n verbs,\n workspace,\n} from \"./shared\";\n\n/** One group is one issue, with its history, comments, and links. */\nexport const issueRows = (index: number, context: Demo.DemoContext): Rows => {\n const { faker, now } = context;\n const { at, later } = clock(context);\n\n const rows: Rows = {\n issues: [],\n issue_history: [],\n comments: [],\n issue_relations: [],\n attachments: [],\n customer_needs: [],\n issue_to_releases: [],\n };\n\n const t = index % teams.length;\n const team = teams[t] ?? teams[0];\n const number = Math.floor(index / teams.length) + 1;\n const identifier = `${team.key}-${number}`;\n const id = issueId(index);\n const title = `${faker.helpers.arrayElement(verbs)} ${faker.hacker.adjective()} ${faker.hacker.noun()}`;\n const slug = title.toLowerCase().replaceAll(\" \", \"-\");\n const url = `${workspace}/issue/${identifier}/${slug}`;\n\n const creator = faker.number.int({ max: userCount - 1 });\n\n const assignee = faker.helpers.maybe(() => faker.number.int({ max: userCount - 1 }), {\n probability: 0.85,\n });\n\n const created = at(now.getTime() - faker.number.int({ min: day, max: 360 * day }));\n\n const outcome = faker.helpers.weightedArrayElement([\n { weight: 55, value: \"Done\" },\n { weight: 8, value: \"Canceled\" },\n { weight: 12, value: \"In Progress\" },\n { weight: 5, value: \"In Review\" },\n { weight: 10, value: \"Todo\" },\n { weight: 10, value: \"Backlog\" },\n ] as const);\n\n const started =\n outcome === \"Done\" || outcome === \"In Progress\" || outcome === \"In Review\"\n ? later(created, hour, 20 * day)\n : null;\n\n const completed = outcome === \"Done\" && started ? later(started, hour, 14 * day) : null;\n const canceled = outcome === \"Canceled\" ? later(created, day, 30 * day) : null;\n const triaged = team.triage ? later(created, 60_000, day) : null;\n\n const project = faker.helpers.maybe(() => faker.number.int({ max: projects.length - 1 }), {\n probability: 0.6,\n });\n\n const cycleNumber =\n team.cycles && started\n ? Math.max(\n 0,\n Math.min(\n cyclesBack,\n cyclesBack - Math.ceil((now.getTime() - started.getTime()) / (cycleWeeks * 7 * day)),\n ),\n )\n : null;\n\n const label = faker.number.int({ max: issueLabels.length - 1 });\n\n const priority = faker.helpers.weightedArrayElement([\n { weight: 10, value: 0 },\n { weight: 5, value: 1 },\n { weight: 25, value: 2 },\n { weight: 40, value: 3 },\n { weight: 20, value: 4 },\n ]);\n\n const estimate = team.key === \"ENG\" ? faker.helpers.arrayElement([1, 2, 3, 5, 8]) : null;\n const stateIndex = states.findIndex((state) => state.name === outcome);\n\n // History: created, assigned, then each state change.\n const changes: Array<{ readonly at: Date; readonly from: number | null; readonly to: number }> = [\n { at: created, from: null, to: team.triage ? 0 : 1 },\n ];\n\n if (triaged) changes.push({ at: triaged, from: 0, to: 1 });\n if (started) changes.push({ at: started, from: 1, to: 3 });\n\n if (outcome === \"In Review\" && started)\n changes.push({ at: later(started, day, 5 * day), from: 3, to: 4 });\n\n if (completed) changes.push({ at: completed, from: 3, to: 5 });\n if (canceled) changes.push({ at: canceled, from: 1, to: 6 });\n if (outcome === \"Todo\") changes.push({ at: later(created, 60_000, 3 * day), from: 1, to: 2 });\n\n changes.forEach((change, h) => {\n rows.issue_history.push({\n id: uuid(30, index, h),\n ...stamp(change.at, change.at),\n issue_id: id,\n actor_id: userId(h === 0 ? creator : (assignee ?? creator)),\n from_state_id: change.from === null ? null : stateId(t, change.from),\n to_state_id: stateId(t, change.to),\n from_assignee_id: null,\n to_assignee_id: h === 0 && assignee !== undefined ? userId(assignee) : null,\n from_cycle_id: null,\n to_cycle_id: change.to === 3 && cycleNumber !== null ? cycleId(t, cycleNumber) : null,\n from_project_id: null,\n to_project_id: h === 0 && project !== undefined ? projectId(project) : null,\n from_parent_id: null,\n to_parent_id: null,\n from_team_id: null,\n to_team_id: null,\n from_priority: null,\n to_priority: h === 0 ? priority : null,\n from_estimate: null,\n to_estimate: h === 0 ? estimate : null,\n from_due_date: null,\n to_due_date: null,\n from_title: null,\n to_title: null,\n added_label_ids: h === 0 ? [labelId(label)] : null,\n removed_label_ids: null,\n attachment_id: null,\n customer_need_id: null,\n to_converted_project_id: null,\n updated_description: null,\n archived: null,\n trashed: null,\n auto_archived: null,\n auto_closed: null,\n });\n });\n\n const comments = Array.from({ length: faker.number.int({ max: 3 }) }, (_, c) => {\n const posted = later(created, 60_000, 10 * day);\n\n return {\n id: uuid(31, index, c),\n ...stamp(posted, posted),\n _deleted: false,\n body: faker.helpers.arrayElement([\n \"I can reproduce this on staging.\",\n \"Picking this up now.\",\n \"Added a fix behind a feature flag.\",\n \"Can we pair on this tomorrow?\",\n \"Customer confirmed it works now.\",\n ]),\n user_id: userId(faker.number.int({ max: userCount - 1 })),\n external_user_id: null,\n issue_id: id,\n project_id: null,\n project_update_id: null,\n initiative_id: null,\n initiative_update_id: null,\n document_content_id: null,\n parent_id: null,\n quoted_text: null,\n edited_at: null,\n resolved_at: null,\n resolving_user_id: null,\n url: `${url}#comment-${uuid(31, index, c).slice(-8)}`,\n } satisfies Comment;\n });\n\n rows.comments.push(...comments);\n\n if (index >= teams.length && faker.datatype.boolean({ probability: 0.1 })) {\n rows.issue_relations.push({\n id: uuid(32, index),\n ...stamp(created, created),\n issue_id: id,\n // The issue before this one in the same team.\n related_issue_id: issueId(index - teams.length),\n type: faker.helpers.arrayElement([\"blocks\", \"related\", \"duplicate\"]),\n });\n }\n\n if (team.key === \"ENG\" && started) {\n const prNumber = 1000 + index;\n\n rows.attachments.push({\n id: uuid(33, index),\n ...stamp(started, completed ?? started),\n _deleted: false,\n issue_id: id,\n creator_id: assignee === undefined ? null : userId(assignee),\n external_user_creator_id: null,\n title: `${title} #${prNumber}`,\n subtitle: completed ? \"Merged\" : \"Open\",\n url: `https://github.com/acme-labs/web/pull/${prNumber}`,\n source_type: \"github\",\n });\n }\n\n if (faker.datatype.boolean({ probability: 0.15 })) {\n const asked = later(created, 0, 5 * day);\n\n rows.customer_needs.push({\n id: uuid(34, index),\n ...stamp(asked, asked),\n _deleted: false,\n customer_id: customerId(faker.number.int({ max: customerCount - 1 })),\n issue_id: id,\n project_id: null,\n original_issue_id: id,\n comment_id: null,\n attachment_id: null,\n creator_id: userId(creator),\n body: \"Their team asked for this on the last call.\",\n priority: faker.helpers.arrayElement([0, 0, 1]),\n url: null,\n });\n }\n\n // Engineering work ships in the monthly release after it's done.\n if (team.key === \"ENG\" && completed) {\n const month = Math.floor((now.getTime() - completed.getTime()) / (30 * day));\n\n if (month < months) {\n rows.issue_to_releases.push({\n id: uuid(35, index),\n ...stamp(completed, completed),\n issue_id: id,\n release_id: releaseId(month),\n });\n }\n }\n\n const updated = new Date(\n Math.max(\n ...changes.map((change) => change.at.getTime()),\n ...comments.map((row) => row.created_at.getTime()),\n ),\n );\n\n rows.issues.push({\n id,\n ...stamp(created, updated),\n _deleted: false,\n identifier,\n number,\n title,\n description: `${faker.hacker.phrase()}\\n\\n**Steps**\\n\\n1. Open the page\\n2. Try the action\\n3. See the error`,\n url,\n branch_name: `${identifier.toLowerCase()}-${slug}`,\n priority,\n priority_label: priorities[priority] ?? \"No priority\",\n estimate,\n due_date: priority === 1 ? dateOnly(new Date(created.getTime() + 7 * day)) : null,\n creator_id: userId(creator),\n assignee_id: assignee === undefined ? null : userId(assignee),\n delegate_id: null,\n snoozed_by_id: null,\n state_id: stateId(t, stateIndex),\n team_id: teamId(t),\n project_id: project === undefined ? null : projectId(project),\n project_milestone_id:\n project === undefined ? null : milestoneId(project, faker.number.int({ max: 2 })),\n cycle_id: cycleNumber === null ? null : cycleId(t, cycleNumber),\n parent_id: null,\n source_comment_id: null,\n external_user_creator_id: null,\n label_ids: [labelId(label)],\n previous_identifiers: [],\n started_at: started,\n completed_at: completed,\n canceled_at: canceled,\n started_triage_at: team.triage ? created : null,\n triaged_at: triaged,\n auto_closed_at: null,\n auto_archived_at: null,\n added_to_cycle_at: cycleNumber === null ? null : started,\n added_to_project_at: project === undefined ? null : created,\n added_to_team_at: created,\n snoozed_until_at: null,\n sla_type: null,\n sla_started_at: null,\n sla_breaches_at: null,\n customer_ticket_count: BigInt(rows.customer_needs.length),\n integration_source_type: null,\n trashed: false,\n });\n\n return rows;\n};\n","import type { Demo } from \"@useairfoil/connector-kit\";\n\nimport type {\n Initiative,\n InitiativeLabel,\n InitiativeRelation,\n InitiativeToProject,\n InitiativeUpdate,\n} from \"../schemas/initiatives\";\n\nimport {\n dateOnly,\n day,\n initiativeId,\n projectId,\n projects,\n stamp,\n userId,\n uuid,\n workspace,\n} from \"./shared\";\n\n/** Initiatives with their labels, updates, relations, and projects. */\nexport const initiativeTables = ({ now }: Demo.DemoContext, founded: Date) => {\n const set = stamp(founded, founded);\n\n const initiatives = [\n \"Enterprise readiness\",\n \"Self-serve growth\",\n \"Platform reliability\",\n ] as const;\n\n const initiativeRows: Array<Initiative> = initiatives.map((name, i) => ({\n id: initiativeId(i),\n ...stamp(founded, now),\n _deleted: false,\n name,\n description: `${name} for this year`,\n content: null,\n url: `${workspace}/initiative/${name.toLowerCase().replaceAll(\" \", \"-\")}`,\n icon: null,\n color: null,\n status: \"Active\",\n health: \"onTrack\",\n health_updated_at: new Date(now.getTime() - 7 * day),\n priority: BigInt(i + 1),\n owner_id: userId(i),\n creator_id: userId(0),\n parent_initiative_id: null,\n target_date: dateOnly(new Date(now.getTime() + 90 * day)),\n started_at: founded,\n completed_at: null,\n canceled_at: null,\n label_ids: [uuid(20, i % 2)],\n visibility: \"workspace\",\n trashed: false,\n }));\n\n const initiativeLabels: Array<InitiativeLabel> = [\"Company goal\", \"Team goal\"].map((name, l) => ({\n id: uuid(20, l),\n ...set,\n name,\n description: null,\n color: \"#5E6AD2\",\n is_group: false,\n parent_id: null,\n creator_id: userId(0),\n retired_at: null,\n }));\n\n const initiativeUpdates: Array<InitiativeUpdate> = initiatives.flatMap((_, i) =>\n Array.from({ length: 6 }, (_, k) => {\n const posted = new Date(now.getTime() - (6 - k) * 30 * day);\n\n return {\n id: uuid(21, i, k),\n ...stamp(posted, posted),\n _deleted: false,\n initiative_id: initiativeId(i),\n user_id: userId(i),\n body: \"Monthly check-in: projects are moving and the main risks are covered.\",\n health: \"onTrack\",\n url: `${workspace}/initiative/${i}/updates#${k}`,\n edited_at: null,\n comment_count: 0n,\n };\n }),\n );\n\n const initiativeRelations: Array<InitiativeRelation> = [\n {\n id: uuid(22, 0),\n ...set,\n initiative_id: initiativeId(0),\n related_initiative_id: initiativeId(2),\n sort_order: 0,\n user_id: userId(0),\n },\n ];\n\n const initiativeProjects: Array<InitiativeToProject> = projects.map((_, p) => ({\n id: uuid(23, p),\n ...set,\n initiative_id: initiativeId(p % initiatives.length),\n project_id: projectId(p),\n sort_order: String(p),\n }));\n\n return {\n initiatives: initiativeRows,\n initiative_labels: initiativeLabels,\n initiative_updates: initiativeUpdates,\n initiative_relations: initiativeRelations,\n initiative_to_projects: initiativeProjects,\n };\n};\n","import type { Demo } from \"@useairfoil/connector-kit\";\n\nimport type { Document } from \"../schemas/documents\";\nimport type {\n Project,\n ProjectLabel,\n ProjectMilestone,\n ProjectRelation,\n ProjectStatus,\n ProjectUpdate,\n} from \"../schemas/projects\";\n\nimport {\n dateOnly,\n day,\n milestoneId,\n priorities,\n projectId,\n projects,\n projectStatuses,\n stamp,\n teamId,\n teams,\n userCount,\n userId,\n uuid,\n workspace,\n} from \"./shared\";\n\n/** Projects with their milestones, updates, specs, and relations. */\nexport const projectTables = ({ faker, now }: Demo.DemoContext, founded: Date) => {\n const set = stamp(founded, founded);\n\n const statusRows: Array<ProjectStatus> = projectStatuses.map((status, s) => ({\n id: uuid(15, s),\n ...set,\n name: status.name,\n type: status.type,\n color: status.color,\n description: null,\n position: s,\n }));\n\n const projectLabels: Array<ProjectLabel> = [\"Q1\", \"Q2\", \"Customer request\", \"Tech debt\"].map(\n (name, l) => ({\n id: uuid(16, l),\n ...set,\n _deleted: false,\n name,\n description: null,\n color: faker.color.rgb({ casing: \"upper\" }),\n is_group: false,\n parent_id: null,\n creator_id: userId(1),\n retired_at: null,\n }),\n );\n\n const projectRows: Array<Project> = [];\n const milestones: Array<ProjectMilestone> = [];\n const updates: Array<ProjectUpdate> = [];\n const documents: Array<Document> = [];\n\n projects.forEach((name, p) => {\n const started = new Date(now.getTime() - (360 - p * 40) * day);\n const target = new Date(started.getTime() + 120 * day);\n const completed = target < now;\n const status = completed ? 4 : p % 3 === 2 ? 1 : 2;\n const lead = (p * 3) % userCount;\n\n const health = completed\n ? null\n : faker.helpers.arrayElement([\"onTrack\", \"onTrack\", \"atRisk\", \"offTrack\"]);\n\n const updated = completed ? target : now;\n const slug = name.toLowerCase().replaceAll(\" \", \"-\");\n\n projectRows.push({\n id: projectId(p),\n ...stamp(started, updated),\n _deleted: false,\n name,\n description: `${name} for the ${teams[p % teams.length]?.name ?? \"Engineering\"} team`,\n content: `## Goal\\n\\nShip ${name.toLowerCase()} by ${dateOnly(target)}.`,\n url: `${workspace}/project/${slug}-${p.toString(16).padStart(12, \"0\")}`,\n icon: null,\n color: faker.color.rgb({ casing: \"upper\" }),\n status_id: uuid(15, status),\n priority: BigInt(1 + (p % 4)),\n priority_label: priorities[1 + (p % 4)] ?? \"Medium\",\n health,\n health_updated_at: health ? new Date(now.getTime() - 3 * day) : null,\n progress: completed ? 1 : faker.number.float({ min: 0.1, max: 0.8, fractionDigits: 2 }),\n scope: faker.number.int({ min: 20, max: 80 }),\n lead_id: userId(lead),\n creator_id: userId(lead),\n converted_from_issue_id: null,\n start_date: dateOnly(started),\n target_date: dateOnly(target),\n started_at: status === 1 ? null : started,\n completed_at: completed ? target : null,\n canceled_at: null,\n auto_archived_at: null,\n label_ids: [uuid(16, p % 4)],\n team_ids: [teamId(p % teams.length)],\n member_ids: [userId(lead), userId((lead + 1) % userCount)],\n trashed: false,\n });\n\n [\"Alpha\", \"Beta\", \"GA\"].forEach((stage, m) => {\n const milestoneTarget = new Date(started.getTime() + (m + 1) * 40 * day);\n\n milestones.push({\n id: milestoneId(p, m),\n ...stamp(started, started),\n name: stage,\n description: null,\n project_id: projectId(p),\n target_date: dateOnly(milestoneTarget),\n status:\n milestoneTarget <= now\n ? \"done\"\n : m === 0 || milestoneTarget.getTime() - now.getTime() < 40 * day\n ? \"next\"\n : \"unstarted\",\n progress: milestoneTarget <= now ? 1 : 0,\n sort_order: m,\n });\n });\n\n // A weekly update while the project runs.\n for (\n let week = started.getTime() + 7 * day;\n week <= Math.min(updated.getTime(), now.getTime());\n week += 7 * day\n ) {\n const posted = new Date(week);\n\n updates.push({\n id: uuid(17, p, updates.length),\n ...stamp(posted, posted),\n _deleted: false,\n project_id: projectId(p),\n user_id: userId(lead),\n body: faker.helpers.arrayElement([\n \"Good week. The main flows are done and we're testing edge cases.\",\n \"We hit a snag with the migration. It may slip a few days.\",\n \"On track. Design review is done and we start the rollout next week.\",\n ]),\n health: faker.helpers.arrayElement([\"onTrack\", \"onTrack\", \"atRisk\"]),\n url: `${workspace}/project/${slug}/updates#${updates.length}`,\n edited_at: null,\n comment_count: 0n,\n });\n }\n\n documents.push({\n id: uuid(18, p),\n ...stamp(started, started),\n _deleted: false,\n title: `${name} spec`,\n content: `# ${name}\\n\\n## Problem\\n\\nCustomers asked for this.\\n\\n## Plan\\n\\nShip it in three milestones.`,\n url: `${workspace}/document/${slug}-spec-${p.toString(16).padStart(12, \"0\")}`,\n icon: null,\n color: null,\n creator_id: userId(lead),\n updated_by_id: userId(lead),\n project_id: projectId(p),\n initiative_id: null,\n issue_id: null,\n cycle_id: null,\n team_id: null,\n parent_document_id: null,\n hidden_at: null,\n trashed: false,\n });\n });\n\n const projectRelations: Array<ProjectRelation> = [\n {\n id: uuid(19, 0),\n ...set,\n type: \"dependency\",\n project_id: projectId(4),\n project_milestone_id: null,\n anchor_type: \"start\",\n related_project_id: projectId(1),\n related_project_milestone_id: null,\n related_anchor_type: \"end\",\n user_id: userId(0),\n },\n {\n id: uuid(19, 1),\n ...set,\n type: \"dependency\",\n project_id: projectId(6),\n project_milestone_id: null,\n anchor_type: \"start\",\n related_project_id: projectId(3),\n related_project_milestone_id: null,\n related_anchor_type: \"end\",\n user_id: userId(1),\n },\n ];\n\n return {\n project_statuses: statusRows,\n project_labels: projectLabels,\n projects: projectRows,\n project_milestones: milestones,\n project_updates: updates,\n project_relations: projectRelations,\n documents,\n };\n};\n","import type { Demo } from \"@useairfoil/connector-kit\";\n\nimport type { IssueLabel } from \"../schemas/issues\";\nimport type {\n Cycle,\n ExternalUser,\n Team,\n TeamMembership,\n User,\n WorkflowState,\n} from \"../schemas/teams\";\n\nimport {\n cycleId,\n cyclesBack,\n cycleStart,\n cycleWeeks,\n day,\n issueLabels,\n labelId,\n nameFor,\n stamp,\n stateId,\n states,\n teamId,\n teams,\n userCount,\n userId,\n uuid,\n workspace,\n} from \"./shared\";\n\n/** Teams with their workflow states, users, labels, and cycles. */\nexport const teamTables = ({ faker, now }: Demo.DemoContext, founded: Date) => {\n const set = stamp(founded, founded);\n\n const teamRows: Array<Team> = teams.map((team, t) => ({\n id: teamId(t),\n ...set,\n name: team.name,\n key: team.key,\n display_name: team.name,\n description: null,\n visibility: \"public\",\n parent_id: null,\n timezone: \"America/New_York\",\n cycles_enabled: team.cycles,\n cycle_duration: cycleWeeks,\n cycle_cooldown_time: 0,\n cycle_start_day: 1,\n triage_enabled: team.triage,\n issue_estimation_type: team.key === \"ENG\" ? \"fibonacci\" : \"notUsed\",\n default_issue_estimate: team.key === \"ENG\" ? 1 : 0,\n auto_archive_period: 6,\n auto_close_period: 6,\n retired_at: null,\n }));\n\n const stateRows: Array<WorkflowState> = teams.flatMap((team, t) =>\n states\n .filter((state) => state.type !== \"triage\" || team.triage)\n .map((state, s) => ({\n id: stateId(t, states.indexOf(state)),\n ...set,\n name: state.name,\n type: state.type,\n color: state.color,\n description: null,\n position: s,\n team_id: teamId(t),\n })),\n );\n\n const users: Array<User> = Array.from({ length: userCount }, (_, u) => {\n const person = nameFor(faker);\n const joined = new Date(founded.getTime() + u * 20 * day);\n\n return {\n id: userId(u),\n ...stamp(joined, joined),\n _deleted: false,\n name: person.name,\n display_name: person.first.toLowerCase(),\n email: faker.internet\n .exampleEmail({ firstName: person.first, lastName: person.last })\n .toLowerCase(),\n avatar_url: null,\n title: faker.person.jobTitle(),\n timezone: faker.helpers.arrayElement([\"America/New_York\", \"Europe/London\", \"Europe/Berlin\"]),\n active: true,\n admin: u < 2,\n owner: u === 0,\n guest: false,\n app: false,\n last_seen: new Date(now.getTime() - faker.number.int({ min: 60_000, max: 3 * day })),\n url: `${workspace}/profiles/${person.first.toLowerCase()}`,\n };\n });\n\n // Each user is on one team; the first user of each team owns it.\n const memberships: Array<TeamMembership> = users.map((user, u) => ({\n id: uuid(13, u),\n ...stamp(user.created_at, user.created_at),\n team_id: teamId(u % teams.length),\n user_id: user.id,\n owner: u < teams.length,\n }));\n\n const externalUsers: Array<ExternalUser> = [\"Slack\", \"Intercom\", \"Zendesk\"].map((source, e) => {\n const person = nameFor(faker);\n\n return {\n id: uuid(14, e),\n ...set,\n name: person.name,\n display_name: `${person.name} (${source})`,\n email: faker.internet\n .exampleEmail({ firstName: person.first, lastName: person.last })\n .toLowerCase(),\n avatar_url: null,\n last_seen: new Date(now.getTime() - faker.number.int({ min: day, max: 30 * day })),\n };\n });\n\n const labelRows: Array<IssueLabel> = issueLabels.map((label, l) => ({\n id: labelId(l),\n ...set,\n _deleted: false,\n name: label.name,\n description: null,\n color: label.color,\n is_group: false,\n parent_id: null,\n team_id: null,\n creator_id: userId(0),\n retired_at: null,\n }));\n\n const cycles: Array<Cycle> = teams.flatMap((team, t) =>\n team.cycles\n ? Array.from({ length: cyclesBack + 1 }, (_, n) => {\n const starts = cycleStart(now, n);\n const ends = new Date(starts.getTime() + cycleWeeks * 7 * day);\n const done = ends <= now;\n\n return {\n id: cycleId(t, n),\n ...stamp(starts, done ? ends : now),\n _deleted: false,\n number: n + 1,\n name: null,\n description: null,\n team_id: teamId(t),\n starts_at: starts,\n ends_at: ends,\n completed_at: done ? ends : null,\n auto_archived_at: null,\n progress: done ? 1 : 0.4,\n };\n })\n : [],\n );\n\n return {\n teams: teamRows,\n workflow_states: stateRows,\n users,\n team_memberships: memberships,\n external_users: externalUsers,\n issue_labels: labelRows,\n cycles,\n };\n};\n","import type { Demo } from \"@useairfoil/connector-kit\";\n\nimport type { Customer, CustomerStatus, CustomerTier } from \"../schemas/customers\";\nimport type { Release, ReleaseNote, ReleasePipeline, ReleaseStage } from \"../schemas/releases\";\n\nimport { initiativeTables } from \"./initiatives\";\nimport { projectTables } from \"./projects\";\nimport {\n customerCount,\n customerId,\n dateOnly,\n day,\n months,\n pipelineId,\n releaseId,\n stamp,\n userCount,\n userId,\n uuid,\n workspace,\n} from \"./shared\";\nimport { teamTables } from \"./teams\";\n\n/** The workspace, written once before any issue. */\nexport const setupRows = (context: Demo.DemoContext) => {\n const { faker, now } = context;\n const founded = new Date(now.getTime() - 900 * day);\n const set = stamp(founded, founded);\n\n const teamSetup = teamTables(context, founded);\n const projectSetup = projectTables(context, founded);\n const initiativeSetup = initiativeTables(context, founded);\n\n const customerStatuses: Array<CustomerStatus> = [\"Active\", \"Trial\", \"Churned\"].map((name, s) => ({\n id: uuid(24, s),\n ...set,\n name: name.toLowerCase(),\n display_name: name,\n description: null,\n color: [\"#4CB782\", \"#F2C94C\", \"#95A2B3\"][s] ?? \"#95A2B3\",\n position: s,\n }));\n\n const customerTiers: Array<CustomerTier> = [\"Enterprise\", \"Growth\", \"Starter\"].map((name, s) => ({\n id: uuid(25, s),\n ...set,\n name: name.toLowerCase(),\n display_name: name,\n description: null,\n color: [\"#5E6AD2\", \"#4EA7FC\", \"#BEC2C8\"][s] ?? \"#BEC2C8\",\n position: s,\n }));\n\n const customers: Array<Customer> = Array.from({ length: customerCount }, (_, c) => {\n const name = faker.company.name();\n const domain = `${name.toLowerCase().replaceAll(/[^a-z]+/g, \"\")}.example.com`;\n const tier = c % 3;\n\n return {\n id: customerId(c),\n ...stamp(founded, now),\n _deleted: false,\n name,\n domains: [domain],\n external_ids: [],\n logo_url: null,\n owner_id: userId(c % userCount),\n status_id: uuid(24, c === customerCount - 1 ? 2 : c % 5 === 4 ? 1 : 0),\n tier_id: uuid(25, tier),\n revenue: BigInt([250_000, 60_000, 12_000][tier] ?? 12_000),\n size: [2_000, 300, 40][tier] ?? 40,\n approximate_need_count: 0,\n url: `${workspace}/customer/${name.toLowerCase().replaceAll(/[^a-z]+/g, \"-\")}`,\n };\n });\n\n const pipeline: Array<ReleasePipeline> = [\n {\n id: pipelineId,\n ...set,\n name: \"Web app\",\n type: \"scheduled\",\n is_production: true,\n url: `${workspace}/releases/web-app`,\n include_path_patterns: [\"apps/web/**\"],\n approximate_release_count: BigInt(months),\n trashed: false,\n },\n ];\n\n const stages: Array<ReleaseStage> = [\"Planned\", \"In progress\", \"Released\"].map((name, s) => ({\n id: uuid(26, s),\n ...set,\n name,\n type: [\"planned\", \"started\", \"completed\"][s] ?? \"completed\",\n color: [\"#BEC2C8\", \"#F2C94C\", \"#5E6AD2\"][s] ?? \"#5E6AD2\",\n position: s,\n frozen: false,\n pipeline_id: pipelineId,\n }));\n\n // One release a month. The newest one is still in progress.\n const releases: Array<Release> = Array.from({ length: months }, (_, m) => {\n const released = new Date(now.getTime() - m * 30 * day);\n const current = m === 0;\n\n return {\n id: releaseId(m),\n ...stamp(new Date(released.getTime() - 30 * day), current ? now : released),\n name: `Release 2.${months - m}.0`,\n description: null,\n release_version: `2.${months - m}.0`,\n url: `${workspace}/releases/web-app/2.${months - m}.0`,\n commit_sha: current ? null : faker.git.commitSha(),\n pipeline_id: pipelineId,\n stage_id: uuid(26, current ? 1 : 2),\n creator_id: userId(0),\n start_date: dateOnly(new Date(released.getTime() - 30 * day)),\n target_date: dateOnly(released),\n started_at: new Date(released.getTime() - 30 * day),\n completed_at: current ? null : released,\n canceled_at: null,\n trashed: false,\n };\n });\n\n const releaseNotes: Array<ReleaseNote> = releases\n .filter((release) => release.completed_at !== null)\n .map((release, k) => ({\n id: uuid(27, k),\n ...stamp(release.completed_at ?? now, release.completed_at ?? now),\n title: `What's new in ${release.release_version}`,\n content: \"Faster search, clearer billing pages, and many small fixes.\",\n url: `${release.url}/notes`,\n pipeline_id: pipelineId,\n release_ids: [release.id],\n }));\n\n return {\n ...teamSetup,\n ...projectSetup,\n ...initiativeSetup,\n customer_statuses: customerStatuses,\n customer_tiers: customerTiers,\n customers,\n release_pipelines: pipeline,\n release_stages: stages,\n releases,\n release_notes: releaseNotes,\n };\n};\n","import { ConnectorApp, Demo, RuntimeConfig } from \"@useairfoil/connector-kit\";\nimport { Command } from \"effect/cli\";\n\nimport { CommentSchema } from \"../schemas/comments\";\nimport {\n CustomerNeedSchema,\n CustomerSchema,\n CustomerStatusSchema,\n CustomerTierSchema,\n} from \"../schemas/customers\";\nimport { DocumentSchema } from \"../schemas/documents\";\nimport {\n InitiativeLabelSchema,\n InitiativeRelationSchema,\n InitiativeSchema,\n InitiativeToProjectSchema,\n InitiativeUpdateSchema,\n} from \"../schemas/initiatives\";\nimport {\n AttachmentSchema,\n IssueHistorySchema,\n IssueLabelSchema,\n IssueRelationSchema,\n IssueSchema,\n} from \"../schemas/issues\";\nimport {\n ProjectLabelSchema,\n ProjectMilestoneSchema,\n ProjectRelationSchema,\n ProjectSchema,\n ProjectStatusSchema,\n ProjectUpdateSchema,\n} from \"../schemas/projects\";\nimport {\n IssueToReleaseSchema,\n ReleaseNoteSchema,\n ReleasePipelineSchema,\n ReleaseSchema,\n ReleaseStageSchema,\n} from \"../schemas/releases\";\nimport {\n CycleSchema,\n ExternalUserSchema,\n TeamMembershipSchema,\n TeamSchema,\n UserSchema,\n WorkflowStateSchema,\n} from \"../schemas/teams\";\nimport { issueRows } from \"./issues\";\nimport { setupRows } from \"./setup\";\n\nexport const demo = Demo.define({\n name: \"producer-linear\",\n setup: {\n tables: [\n Demo.table({ name: \"teams\", rowSchema: TeamSchema, version: \"version\" }),\n Demo.table({ name: \"workflow_states\", rowSchema: WorkflowStateSchema, version: \"version\" }),\n Demo.table({ name: \"users\", rowSchema: UserSchema, version: \"version\" }),\n Demo.table({ name: \"team_memberships\", rowSchema: TeamMembershipSchema, version: \"version\" }),\n Demo.table({ name: \"external_users\", rowSchema: ExternalUserSchema, version: \"version\" }),\n Demo.table({ name: \"issue_labels\", rowSchema: IssueLabelSchema, version: \"version\" }),\n Demo.table({ name: \"cycles\", rowSchema: CycleSchema, version: \"version\" }),\n Demo.table({ name: \"project_statuses\", rowSchema: ProjectStatusSchema, version: \"version\" }),\n Demo.table({ name: \"project_labels\", rowSchema: ProjectLabelSchema, version: \"version\" }),\n Demo.table({ name: \"projects\", rowSchema: ProjectSchema, version: \"version\" }),\n Demo.table({\n name: \"project_milestones\",\n rowSchema: ProjectMilestoneSchema,\n version: \"version\",\n }),\n Demo.table({ name: \"project_updates\", rowSchema: ProjectUpdateSchema, version: \"version\" }),\n Demo.table({\n name: \"project_relations\",\n rowSchema: ProjectRelationSchema,\n version: \"version\",\n }),\n Demo.table({ name: \"documents\", rowSchema: DocumentSchema, version: \"version\" }),\n Demo.table({ name: \"initiatives\", rowSchema: InitiativeSchema, version: \"version\" }),\n Demo.table({\n name: \"initiative_labels\",\n rowSchema: InitiativeLabelSchema,\n version: \"version\",\n }),\n Demo.table({\n name: \"initiative_updates\",\n rowSchema: InitiativeUpdateSchema,\n version: \"version\",\n }),\n Demo.table({\n name: \"initiative_relations\",\n rowSchema: InitiativeRelationSchema,\n version: \"version\",\n }),\n Demo.table({\n name: \"initiative_to_projects\",\n rowSchema: InitiativeToProjectSchema,\n version: \"version\",\n }),\n Demo.table({\n name: \"customer_statuses\",\n rowSchema: CustomerStatusSchema,\n version: \"version\",\n }),\n Demo.table({ name: \"customer_tiers\", rowSchema: CustomerTierSchema, version: \"version\" }),\n Demo.table({ name: \"customers\", rowSchema: CustomerSchema, version: \"version\" }),\n Demo.table({\n name: \"release_pipelines\",\n rowSchema: ReleasePipelineSchema,\n version: \"version\",\n }),\n Demo.table({ name: \"release_stages\", rowSchema: ReleaseStageSchema, version: \"version\" }),\n Demo.table({ name: \"releases\", rowSchema: ReleaseSchema, version: \"version\" }),\n Demo.table({ name: \"release_notes\", rowSchema: ReleaseNoteSchema, version: \"version\" }),\n ],\n rows: setupRows,\n },\n group: {\n tables: [\n Demo.table({ name: \"issues\", rowSchema: IssueSchema, version: \"version\" }),\n Demo.table({ name: \"issue_history\", rowSchema: IssueHistorySchema, version: \"version\" }),\n Demo.table({ name: \"comments\", rowSchema: CommentSchema, version: \"version\" }),\n Demo.table({ name: \"issue_relations\", rowSchema: IssueRelationSchema, version: \"version\" }),\n Demo.table({ name: \"attachments\", rowSchema: AttachmentSchema, version: \"version\" }),\n Demo.table({ name: \"customer_needs\", rowSchema: CustomerNeedSchema, version: \"version\" }),\n Demo.table({\n name: \"issue_to_releases\",\n rowSchema: IssueToReleaseSchema,\n version: \"version\",\n }),\n ],\n rows: issueRows,\n },\n});\n\nexport const demoCommand = ConnectorApp.makeDemoCommand(demo).pipe(\n Command.provide(RuntimeConfig.layerHosted()),\n);\n","import {\n ConnectorApp,\n Ingestor,\n RuntimeConfig,\n StateStore,\n Telemetry,\n} from \"@useairfoil/connector-kit\";\nimport { Effect, Layer, Logger } from \"effect\";\nimport { Command } from \"effect/cli\";\n\nimport { LinearConnector } from \"./index\";\n\nconst ConnectorLayer = LinearConnector.layerConfig(LinearConnector.LinearConfigDef.config);\n\nconst TelemetryLayer = Layer.mergeAll(Telemetry.layerOtlp(), Telemetry.layerMetricsConsoleDump());\n\nexport const sandboxCommand = Command.make(\"sandbox\", {}, () =>\n Effect.gen(function* () {\n const port = yield* RuntimeConfig.httpPort;\n const entrypoint = yield* LinearConnector.LinearConnector;\n\n return yield* ConnectorApp.start(entrypoint, { port });\n }).pipe(\n Effect.annotateLogs({ component: \"linear\" }),\n Effect.provide(\n Layer.mergeAll(\n StateStore.layerMemory,\n Ingestor.layerConsole,\n ConnectorLayer,\n Logger.layer([Logger.consolePretty()]),\n TelemetryLayer,\n ),\n ),\n ),\n).pipe(Command.withDescription(\"Run the connector locally and log ingested data\"));\n","import { PgClient } from \"@effect/sql-pg\";\nimport {\n ConnectorApp,\n Ingestor,\n RuntimeConfig,\n StateStore,\n Telemetry,\n} from \"@useairfoil/connector-kit\";\nimport { Config, Effect, Layer, Logger, Schema } from \"effect\";\nimport { Command } from \"effect/cli\";\n\nimport { LinearConnector } from \"./index\";\n\nconst ConnectorLayer = LinearConnector.layerConfig(LinearConnector.LinearConfigDef.config);\nconst TelemetryLayer = Telemetry.layerOtlp();\nconst PostgresLayer = PgClient.layerConfig({\n url: Config.schema(\n Schema.Redacted(Schema.NonEmptyString),\n RuntimeConfig.PlatformRuntimeKey.postgresConnectionString,\n ),\n maxConnections: Config.succeed(2),\n connectTimeout: Config.succeed(\"5 seconds\"),\n applicationName: Config.succeed(\"airfoil-producer-linear\"),\n});\nconst StateStoreLayer = StateStore.layerSql().pipe(Layer.provide(PostgresLayer));\n\nexport const startCommand = Command.make(\"start\", {}, () =>\n Effect.gen(function* () {\n const port = yield* RuntimeConfig.httpPort;\n const entrypoint = yield* LinearConnector.LinearConnector;\n\n return yield* ConnectorApp.start(entrypoint, { port }).pipe(\n Effect.provide(Ingestor.layerWingsConfig(entrypoint)),\n );\n }).pipe(\n Effect.annotateLogs({ component: \"linear\" }),\n Effect.provide(\n Layer.mergeAll(\n StateStoreLayer,\n ConnectorLayer,\n Logger.layer([Logger.consolePretty()]),\n TelemetryLayer,\n ),\n ),\n Effect.provide(RuntimeConfig.layerHosted()),\n ),\n).pipe(Command.withDescription(\"Run the production connector against Wings\"));\n","#!/usr/bin/env node\n\nimport { NodeRuntime, NodeServices } from \"@effect/platform-node\";\nimport { Effect, Layer } from \"effect\";\nimport { Command } from \"effect/cli\";\nimport { FetchHttpClient } from \"effect/http\";\n\nimport packageJson from \"../package.json\";\nimport { createTableCommand } from \"./create-table\";\nimport { demoCommand } from \"./demo\";\nimport { sandboxCommand } from \"./sandbox\";\nimport { startCommand } from \"./start\";\n\nconst BootstrapLayer = Layer.mergeAll(FetchHttpClient.layer, NodeServices.layer);\n\nconst program = Command.make(\"producer-linear\", {}, () => Effect.void).pipe(\n Command.withSubcommands([startCommand, sandboxCommand, createTableCommand, demoCommand]),\n);\n\nconst cli = Command.run(program, { version: packageJson.version });\n\nNodeRuntime.runMain(cli.pipe(Effect.provide(BootstrapLayer), Effect.scoped));\n"],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ import * as Manifest from "@useairfoil/connector-kit/manifest";
2
+ //#region src/manifest.d.ts
3
+ export declare const LinearConfigDef: Manifest.ConnectorConfigDef<{
4
+ readonly apiKey: Manifest.ConfigField<import("effect/Redacted").Redacted<string>>;
5
+ readonly webhookSecret: Manifest.ConfigField<import("effect/Redacted").Redacted<string>>;
6
+ }>;
7
+ export type LinearConfig = Manifest.ConfigValuesOf<typeof LinearConfigDef>;
8
+ export declare const manifest: {
9
+ readonly name: "producer-linear";
10
+ readonly title: "Linear";
11
+ readonly config: readonly Manifest.ConfigFieldSpec[];
12
+ readonly resources: readonly [{
13
+ readonly name: "issues";
14
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
15
+ }, {
16
+ readonly name: "issue_history";
17
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
18
+ }, {
19
+ readonly name: "comments";
20
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
21
+ }, {
22
+ readonly name: "issue_relations";
23
+ readonly capabilities: readonly ["backfill", "changes"];
24
+ }, {
25
+ readonly name: "attachments";
26
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
27
+ }, {
28
+ readonly name: "issue_labels";
29
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
30
+ }, {
31
+ readonly name: "workflow_states";
32
+ readonly capabilities: readonly ["backfill", "changes"];
33
+ }, {
34
+ readonly name: "teams";
35
+ readonly capabilities: readonly ["backfill", "changes"];
36
+ }, {
37
+ readonly name: "team_memberships";
38
+ readonly capabilities: readonly ["backfill", "changes"];
39
+ }, {
40
+ readonly name: "users";
41
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
42
+ }, {
43
+ readonly name: "external_users";
44
+ readonly capabilities: readonly ["backfill", "changes"];
45
+ }, {
46
+ readonly name: "cycles";
47
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
48
+ }, {
49
+ readonly name: "projects";
50
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
51
+ }, {
52
+ readonly name: "project_milestones";
53
+ readonly capabilities: readonly ["backfill", "changes"];
54
+ }, {
55
+ readonly name: "project_updates";
56
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
57
+ }, {
58
+ readonly name: "project_statuses";
59
+ readonly capabilities: readonly ["backfill", "changes"];
60
+ }, {
61
+ readonly name: "project_labels";
62
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
63
+ }, {
64
+ readonly name: "project_relations";
65
+ readonly capabilities: readonly ["backfill", "changes"];
66
+ }, {
67
+ readonly name: "initiatives";
68
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
69
+ }, {
70
+ readonly name: "initiative_updates";
71
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
72
+ }, {
73
+ readonly name: "initiative_labels";
74
+ readonly capabilities: readonly ["backfill", "changes"];
75
+ }, {
76
+ readonly name: "initiative_relations";
77
+ readonly capabilities: readonly ["backfill", "changes"];
78
+ }, {
79
+ readonly name: "initiative_to_projects";
80
+ readonly capabilities: readonly ["backfill", "changes"];
81
+ }, {
82
+ readonly name: "documents";
83
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
84
+ }, {
85
+ readonly name: "customers";
86
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
87
+ }, {
88
+ readonly name: "customer_needs";
89
+ readonly capabilities: readonly ["backfill", "changes", "webhook"];
90
+ }, {
91
+ readonly name: "customer_statuses";
92
+ readonly capabilities: readonly ["backfill", "changes"];
93
+ }, {
94
+ readonly name: "customer_tiers";
95
+ readonly capabilities: readonly ["backfill", "changes"];
96
+ }, {
97
+ readonly name: "releases";
98
+ readonly capabilities: readonly ["backfill", "changes"];
99
+ }, {
100
+ readonly name: "release_notes";
101
+ readonly capabilities: readonly ["backfill", "changes"];
102
+ }, {
103
+ readonly name: "release_pipelines";
104
+ readonly capabilities: readonly ["backfill", "changes"];
105
+ }, {
106
+ readonly name: "release_stages";
107
+ readonly capabilities: readonly ["backfill", "changes"];
108
+ }, {
109
+ readonly name: "issue_to_releases";
110
+ readonly capabilities: readonly ["backfill", "changes"];
111
+ }];
112
+ };
113
+ //#endregion
114
+ //# sourceMappingURL=manifest.d.mts.map
@@ -0,0 +1,161 @@
1
+ import * as Manifest from "@useairfoil/connector-kit/manifest";
2
+ //#region src/manifest.ts
3
+ const LinearConfigDef = Manifest.defineConfig({
4
+ apiKey: Manifest.secret({
5
+ runtimeKey: "LINEAR_API_KEY",
6
+ description: "Linear personal API key with Read permission, for example lin_api_..."
7
+ }),
8
+ webhookSecret: Manifest.secret({
9
+ runtimeKey: "LINEAR_WEBHOOK_SECRET",
10
+ description: "Signing secret of the Linear webhook."
11
+ })
12
+ });
13
+ const capabilities = ["backfill", "changes"];
14
+ const withWebhook = [
15
+ "backfill",
16
+ "changes",
17
+ "webhook"
18
+ ];
19
+ const manifest = Manifest.define({
20
+ name: "producer-linear",
21
+ title: "Linear",
22
+ config: LinearConfigDef.spec,
23
+ resources: [
24
+ {
25
+ name: "issues",
26
+ capabilities: withWebhook
27
+ },
28
+ {
29
+ name: "issue_history",
30
+ capabilities: withWebhook
31
+ },
32
+ {
33
+ name: "comments",
34
+ capabilities: withWebhook
35
+ },
36
+ {
37
+ name: "issue_relations",
38
+ capabilities
39
+ },
40
+ {
41
+ name: "attachments",
42
+ capabilities: withWebhook
43
+ },
44
+ {
45
+ name: "issue_labels",
46
+ capabilities: withWebhook
47
+ },
48
+ {
49
+ name: "workflow_states",
50
+ capabilities
51
+ },
52
+ {
53
+ name: "teams",
54
+ capabilities
55
+ },
56
+ {
57
+ name: "team_memberships",
58
+ capabilities
59
+ },
60
+ {
61
+ name: "users",
62
+ capabilities: withWebhook
63
+ },
64
+ {
65
+ name: "external_users",
66
+ capabilities
67
+ },
68
+ {
69
+ name: "cycles",
70
+ capabilities: withWebhook
71
+ },
72
+ {
73
+ name: "projects",
74
+ capabilities: withWebhook
75
+ },
76
+ {
77
+ name: "project_milestones",
78
+ capabilities
79
+ },
80
+ {
81
+ name: "project_updates",
82
+ capabilities: withWebhook
83
+ },
84
+ {
85
+ name: "project_statuses",
86
+ capabilities
87
+ },
88
+ {
89
+ name: "project_labels",
90
+ capabilities: withWebhook
91
+ },
92
+ {
93
+ name: "project_relations",
94
+ capabilities
95
+ },
96
+ {
97
+ name: "initiatives",
98
+ capabilities: withWebhook
99
+ },
100
+ {
101
+ name: "initiative_updates",
102
+ capabilities: withWebhook
103
+ },
104
+ {
105
+ name: "initiative_labels",
106
+ capabilities
107
+ },
108
+ {
109
+ name: "initiative_relations",
110
+ capabilities
111
+ },
112
+ {
113
+ name: "initiative_to_projects",
114
+ capabilities
115
+ },
116
+ {
117
+ name: "documents",
118
+ capabilities: withWebhook
119
+ },
120
+ {
121
+ name: "customers",
122
+ capabilities: withWebhook
123
+ },
124
+ {
125
+ name: "customer_needs",
126
+ capabilities: withWebhook
127
+ },
128
+ {
129
+ name: "customer_statuses",
130
+ capabilities
131
+ },
132
+ {
133
+ name: "customer_tiers",
134
+ capabilities
135
+ },
136
+ {
137
+ name: "releases",
138
+ capabilities
139
+ },
140
+ {
141
+ name: "release_notes",
142
+ capabilities
143
+ },
144
+ {
145
+ name: "release_pipelines",
146
+ capabilities
147
+ },
148
+ {
149
+ name: "release_stages",
150
+ capabilities
151
+ },
152
+ {
153
+ name: "issue_to_releases",
154
+ capabilities
155
+ }
156
+ ]
157
+ });
158
+ //#endregion
159
+ export { LinearConfigDef, manifest };
160
+
161
+ //# sourceMappingURL=manifest.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.mjs","names":[],"sources":["../src/manifest.ts"],"sourcesContent":["import * as Manifest from \"@useairfoil/connector-kit/manifest\";\n\nexport const LinearConfigDef = Manifest.defineConfig({\n apiKey: Manifest.secret({\n runtimeKey: \"LINEAR_API_KEY\",\n description: \"Linear personal API key with Read permission, for example lin_api_...\",\n }),\n webhookSecret: Manifest.secret({\n runtimeKey: \"LINEAR_WEBHOOK_SECRET\",\n description: \"Signing secret of the Linear webhook.\",\n }),\n});\n\nexport type LinearConfig = Manifest.ConfigValuesOf<typeof LinearConfigDef>;\n\nconst capabilities = [\"backfill\", \"changes\"] as const;\nconst withWebhook = [\"backfill\", \"changes\", \"webhook\"] as const;\n\nexport const manifest = Manifest.define({\n name: \"producer-linear\",\n title: \"Linear\",\n config: LinearConfigDef.spec,\n resources: [\n { name: \"issues\", capabilities: withWebhook },\n { name: \"issue_history\", capabilities: withWebhook },\n { name: \"comments\", capabilities: withWebhook },\n { name: \"issue_relations\", capabilities },\n { name: \"attachments\", capabilities: withWebhook },\n { name: \"issue_labels\", capabilities: withWebhook },\n { name: \"workflow_states\", capabilities },\n { name: \"teams\", capabilities },\n { name: \"team_memberships\", capabilities },\n { name: \"users\", capabilities: withWebhook },\n { name: \"external_users\", capabilities },\n { name: \"cycles\", capabilities: withWebhook },\n { name: \"projects\", capabilities: withWebhook },\n { name: \"project_milestones\", capabilities },\n { name: \"project_updates\", capabilities: withWebhook },\n { name: \"project_statuses\", capabilities },\n { name: \"project_labels\", capabilities: withWebhook },\n { name: \"project_relations\", capabilities },\n { name: \"initiatives\", capabilities: withWebhook },\n { name: \"initiative_updates\", capabilities: withWebhook },\n { name: \"initiative_labels\", capabilities },\n { name: \"initiative_relations\", capabilities },\n { name: \"initiative_to_projects\", capabilities },\n { name: \"documents\", capabilities: withWebhook },\n { name: \"customers\", capabilities: withWebhook },\n { name: \"customer_needs\", capabilities: withWebhook },\n { name: \"customer_statuses\", capabilities },\n { name: \"customer_tiers\", capabilities },\n { name: \"releases\", capabilities },\n { name: \"release_notes\", capabilities },\n { name: \"release_pipelines\", capabilities },\n { name: \"release_stages\", capabilities },\n { name: \"issue_to_releases\", capabilities },\n ],\n});\n"],"mappings":";;AAEA,MAAa,kBAAkB,SAAS,aAAa;CACnD,QAAQ,SAAS,OAAO;EACtB,YAAY;EACZ,aAAa;CACf,CAAC;CACD,eAAe,SAAS,OAAO;EAC7B,YAAY;EACZ,aAAa;CACf,CAAC;AACH,CAAC;AAID,MAAM,eAAe,CAAC,YAAY,SAAS;AAC3C,MAAM,cAAc;CAAC;CAAY;CAAW;AAAS;AAErD,MAAa,WAAW,SAAS,OAAO;CACtC,MAAM;CACN,OAAO;CACP,QAAQ,gBAAgB;CACxB,WAAW;EACT;GAAE,MAAM;GAAU,cAAc;EAAY;EAC5C;GAAE,MAAM;GAAiB,cAAc;EAAY;EACnD;GAAE,MAAM;GAAY,cAAc;EAAY;EAC9C;GAAE,MAAM;GAAmB;EAAa;EACxC;GAAE,MAAM;GAAe,cAAc;EAAY;EACjD;GAAE,MAAM;GAAgB,cAAc;EAAY;EAClD;GAAE,MAAM;GAAmB;EAAa;EACxC;GAAE,MAAM;GAAS;EAAa;EAC9B;GAAE,MAAM;GAAoB;EAAa;EACzC;GAAE,MAAM;GAAS,cAAc;EAAY;EAC3C;GAAE,MAAM;GAAkB;EAAa;EACvC;GAAE,MAAM;GAAU,cAAc;EAAY;EAC5C;GAAE,MAAM;GAAY,cAAc;EAAY;EAC9C;GAAE,MAAM;GAAsB;EAAa;EAC3C;GAAE,MAAM;GAAmB,cAAc;EAAY;EACrD;GAAE,MAAM;GAAoB;EAAa;EACzC;GAAE,MAAM;GAAkB,cAAc;EAAY;EACpD;GAAE,MAAM;GAAqB;EAAa;EAC1C;GAAE,MAAM;GAAe,cAAc;EAAY;EACjD;GAAE,MAAM;GAAsB,cAAc;EAAY;EACxD;GAAE,MAAM;GAAqB;EAAa;EAC1C;GAAE,MAAM;GAAwB;EAAa;EAC7C;GAAE,MAAM;GAA0B;EAAa;EAC/C;GAAE,MAAM;GAAa,cAAc;EAAY;EAC/C;GAAE,MAAM;GAAa,cAAc;EAAY;EAC/C;GAAE,MAAM;GAAkB,cAAc;EAAY;EACpD;GAAE,MAAM;GAAqB;EAAa;EAC1C;GAAE,MAAM;GAAkB;EAAa;EACvC;GAAE,MAAM;GAAY;EAAa;EACjC;GAAE,MAAM;GAAiB;EAAa;EACtC;GAAE,MAAM;GAAqB;EAAa;EAC1C;GAAE,MAAM;GAAkB;EAAa;EACvC;GAAE,MAAM;GAAqB;EAAa;CAC5C;AACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true
8
+ });
9
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
10
+ return target;
11
+ };
12
+ //#endregion
13
+ export { __exportAll as t };