@useairfoil/producer-linear 0.0.1 → 0.0.3
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.
- package/LICENSE.txt +201 -0
- package/README.md +71 -0
- package/dist/index.d.mts +4027 -0
- package/dist/index.mjs +3 -0
- package/dist/main.d.mts +1 -0
- package/dist/main.mjs +1305 -0
- package/dist/main.mjs.map +1 -0
- package/dist/manifest.d.mts +114 -0
- package/dist/manifest.mjs +161 -0
- package/dist/manifest.mjs.map +1 -0
- package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
- package/dist/src-BbzySPR7.mjs +1688 -0
- package/dist/src-BbzySPR7.mjs.map +1 -0
- package/package.json +46 -8
- package/src/client/client.ts +200 -0
- package/src/connector.ts +151 -0
- package/src/create-table.ts +10 -0
- package/src/demo/index.ts +137 -0
- package/src/demo/initiatives.ts +116 -0
- package/src/demo/issues.ts +320 -0
- package/src/demo/projects.ts +215 -0
- package/src/demo/setup.ts +151 -0
- package/src/demo/shared.ts +122 -0
- package/src/demo/teams.ts +173 -0
- package/src/index.ts +83 -0
- package/src/main.ts +28 -0
- package/src/manifest.ts +58 -0
- package/src/resources/comments.ts +32 -0
- package/src/resources/customers.ts +105 -0
- package/src/resources/documents.ts +31 -0
- package/src/resources/initiatives.ts +136 -0
- package/src/resources/issue-history.ts +119 -0
- package/src/resources/issues.ts +131 -0
- package/src/resources/pages.ts +264 -0
- package/src/resources/projects.ts +161 -0
- package/src/resources/releases.ts +114 -0
- package/src/resources/teams.ts +140 -0
- package/src/sandbox.ts +35 -0
- package/src/schemas/comments.ts +52 -0
- package/src/schemas/customers.ts +96 -0
- package/src/schemas/documents.ts +40 -0
- package/src/schemas/initiatives.ts +155 -0
- package/src/schemas/issues.ts +262 -0
- package/src/schemas/projects.ts +210 -0
- package/src/schemas/releases.ts +132 -0
- package/src/schemas/shared.ts +68 -0
- package/src/schemas/teams.ts +177 -0
- package/src/start.ts +47 -0
- package/src/tables.ts +83 -0
- package/src/webhook/route.ts +50 -0
- package/src/webhook/signature.ts +28 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-BbzySPR7.mjs","names":["make","layer","layerConfig","Str","Arr","levelFields","LinearClient.LinearClient","LinearClient.layer"],"sources":["../src/client/client.ts","../src/schemas/shared.ts","../src/schemas/comments.ts","../src/resources/pages.ts","../src/resources/comments.ts","../src/schemas/customers.ts","../src/resources/customers.ts","../src/schemas/documents.ts","../src/resources/documents.ts","../src/schemas/initiatives.ts","../src/resources/initiatives.ts","../src/schemas/issues.ts","../src/resources/issue-history.ts","../src/resources/issues.ts","../src/schemas/projects.ts","../src/resources/projects.ts","../src/schemas/releases.ts","../src/resources/releases.ts","../src/schemas/teams.ts","../src/resources/teams.ts","../src/webhook/signature.ts","../src/webhook/route.ts","../src/connector.ts"],"sourcesContent":["import { ConnectorError, Metrics, Telemetry } from \"@useairfoil/connector-kit\";\nimport {\n Config,\n Context,\n Data,\n Duration,\n Effect,\n Layer,\n Option,\n Redacted,\n Schedule,\n Schema,\n} from \"effect\";\nimport { HttpClient, HttpClientRequest, HttpClientResponse } from \"effect/http\";\n\nimport { type LinearConfig, manifest } from \"../manifest\";\n\nconst endpoint = \"https://api.linear.app/graphql\";\nconst maxRetries = 5;\nconst retryBaseDelay = Duration.seconds(1);\nconst requestTimeout = Duration.minutes(2);\n// Keep retrying rate limits; a failed source stays stopped until restart.\nconst limitRetry = Schedule.min([Schedule.exponential(\"1 minute\"), Schedule.spaced(\"10 minutes\")]);\n\ntype Variables = Readonly<Record<string, unknown>>;\n\nexport type LinearClientService = {\n readonly query: <A>(\n schema: Schema.Decoder<A>,\n document: string,\n variables?: Variables,\n ) => Effect.Effect<A, ConnectorError>;\n /** Like `query`, but \"Entity not found\" gives `None`. */\n readonly find: <A>(\n schema: Schema.Decoder<A>,\n document: string,\n variables?: Variables,\n ) => Effect.Effect<Option.Option<A>, ConnectorError>;\n};\n\nexport class LinearClient extends Context.Service<LinearClient, LinearClientService>()(\n \"@useairfoil/producer-linear/LinearClient\",\n) {}\n\nconst ResponseSchema = Schema.Struct({\n data: Schema.optional(Schema.Unknown),\n errors: Schema.optional(\n Schema.Array(\n Schema.Struct({\n message: Schema.String,\n extensions: Schema.optional(Schema.Struct({ code: Schema.optional(Schema.String) })),\n }),\n ),\n ),\n});\n\nclass RateLimited extends Data.TaggedError(\"RateLimited\")<{ readonly message: string }> {}\n\nconst isNotFound = (message: string) => message.startsWith(\"Entity not found\");\n\nconst operationName = (document: string) => /^\\s*query\\s+(\\w+)/.exec(document)?.[1] ?? \"query\";\n\nexport const make = Effect.fnUntraced(function* (config: Pick<LinearConfig, \"apiKey\">) {\n const client = (yield* HttpClient.HttpClient).pipe(\n HttpClient.mapRequest((request) =>\n request.pipe(\n HttpClientRequest.acceptJson,\n // Personal API keys go in the header as they are, without `Bearer`.\n HttpClientRequest.setHeader(\"Authorization\", Redacted.value(config.apiKey)),\n ),\n ),\n HttpClient.retryTransient({\n schedule: Metrics.retrySchedule({\n connector: manifest.name,\n baseDelay: retryBaseDelay,\n times: maxRetries,\n }),\n }),\n );\n\n const execute = <A>(\n schema: Schema.Decoder<A>,\n document: string,\n variables: Variables = {},\n ): Effect.Effect<Option.Option<A>, ConnectorError> => {\n const operation = operationName(document);\n return Effect.gen(function* () {\n const response = yield* client\n .execute(\n HttpClientRequest.post(endpoint).pipe(\n HttpClientRequest.bodyJsonUnsafe({ query: document, variables }),\n ),\n )\n .pipe(\n Effect.tapError((error) => Telemetry.annotateError(\"api_http\", error)),\n Effect.mapError(\n (error) =>\n new ConnectorError({\n message: `Linear API request failed for ${operation}`,\n cause: error,\n }),\n ),\n );\n // GraphQL errors come with 200 or 400, so read the body first.\n const body = yield* HttpClientResponse.schemaBodyJson(ResponseSchema)(response).pipe(\n Effect.tapError((error) => Telemetry.annotateError(\"api_status\", error)),\n Effect.mapError(\n (error) =>\n new ConnectorError({\n message: `Linear API returned ${response.status} for ${operation}`,\n cause: error,\n }),\n ),\n );\n const errors = body.errors ?? [];\n if (errors.some((error) => error.extensions?.code === \"RATELIMITED\")) {\n return yield* new RateLimited({ message: `Linear rate limit reached for ${operation}` });\n }\n if (response.status === 401) {\n return yield* new ConnectorError({ message: \"Linear rejected the API key\" });\n }\n if (errors.length > 0 && errors.every((error) => isNotFound(error.message))) {\n return Option.none();\n }\n const [first] = errors;\n if (first !== undefined || response.status < 200 || response.status >= 300) {\n const error = new ConnectorError({\n message: `Linear API returned ${response.status} for ${operation}${first ? `: ${first.message}` : \"\"}`,\n cause: errors,\n });\n yield* Telemetry.annotateError(\"api_graphql\", error);\n return yield* error;\n }\n return Option.some(\n yield* Schema.decodeUnknownEffect(schema)(body.data).pipe(\n Effect.tapError((error) => Telemetry.annotateError(\"api_decode\", error)),\n Effect.mapError(\n (error) =>\n new ConnectorError({\n message: `Linear API response for ${operation} does not match the schema`,\n cause: error,\n }),\n ),\n ),\n );\n }).pipe(\n Effect.timeoutOrElse({\n duration: requestTimeout,\n orElse: () =>\n Effect.fail(\n new ConnectorError({ message: `Linear API request timed out for ${operation}` }),\n ),\n }),\n Effect.retry({\n schedule: limitRetry.pipe(\n Schedule.tap(({ duration }) =>\n Effect.logWarning(\"Linear rate limit reached, waiting to try again\").pipe(\n Effect.annotateLogs({ operation, waitMillis: Duration.toMillis(duration) }),\n ),\n ),\n ),\n while: (error) => error._tag === \"RateLimited\",\n }),\n Effect.catchTag(\"RateLimited\", (error) =>\n Effect.fail(new ConnectorError({ message: error.message })),\n ),\n Effect.withSpan(Telemetry.SpanName.apiFetch, {\n kind: \"client\",\n attributes: { [Telemetry.Attr.apiPath]: `graphql:${operation}` },\n }),\n );\n };\n\n const query = <A>(schema: Schema.Decoder<A>, document: string, variables?: Variables) =>\n execute(schema, document, variables).pipe(\n Effect.flatMap(\n Option.match({\n onNone: () =>\n Effect.fail(\n new ConnectorError({\n message: `Linear API found nothing for ${operationName(document)}`,\n }),\n ),\n onSome: Effect.succeed,\n }),\n ),\n );\n\n return LinearClient.of({ query, find: execute });\n});\n\nexport const layer = (\n config: Pick<LinearConfig, \"apiKey\">,\n): Layer.Layer<LinearClient, never, HttpClient.HttpClient> =>\n Layer.effect(LinearClient)(make(config));\n\nexport const layerConfig = (\n config: Config.Wrap<LinearConfig>,\n): Layer.Layer<LinearClient, Config.ConfigError, HttpClient.HttpClient> =>\n Layer.unwrap(Config.unwrap(config).pipe(Effect.map(layer)));\n","import { Schema, SchemaTransformation } from \"effect\";\n\nexport const Timestamp = Schema.DateFromString;\n\n/** Decodes a GraphQL Int as bigint for an Iceberg long. */\nexport const Long = Schema.Int.pipe(\n Schema.decodeTo(\n Schema.BigInt,\n SchemaTransformation.transform({\n decode: (value) => BigInt(value),\n encode: (value) => Number(value),\n }),\n ),\n);\n\n/** Decodes a linked object such as `assignee { id }` as its ID. */\nexport const Ref = Schema.Struct({ id: Schema.String }).pipe(\n Schema.decodeTo(\n Schema.String,\n SchemaTransformation.transform({\n decode: (ref) => ref.id,\n encode: (id) => ({ id }),\n }),\n ),\n);\n\nexport const OptionalRef = Schema.NullOr(Ref);\n\nexport const OptionalTimestamp = Schema.NullOr(Timestamp);\n\nexport const OptionalString = Schema.NullOr(Schema.String);\n\nconst RefConnection = Schema.Struct({ nodes: Schema.Array(Schema.Struct({ id: Schema.String })) });\n\n/** Decodes connection nodes as IDs. The query must fetch any extra pages. */\nexport const RefList = RefConnection.pipe(\n Schema.decodeTo(\n Schema.Array(Schema.String),\n SchemaTransformation.transform<ReadonlyArray<string>, typeof RefConnection.Type>({\n decode: (connection) => connection.nodes.map((node) => node.id),\n encode: (ids) => ({ nodes: ids.map((id) => ({ id })) }),\n }),\n ),\n);\n\n/** Rows use updated_at as version; lifecycle webhooks use the webhook time. */\nexport const common = (object: string) => ({\n id: Schema.String.pipe(Schema.annotateKey({ description: `${object} ID.` })),\n version: Schema.Date.pipe(\n Schema.annotateKey({ description: `Time Linear last changed the ${object.toLowerCase()}.` }),\n ),\n created_at: Timestamp.pipe(\n Schema.annotateKey({ description: `Time the ${object.toLowerCase()} was created.` }),\n ),\n updated_at: Timestamp.pipe(\n Schema.annotateKey({ description: `Time the ${object.toLowerCase()} was last updated.` }),\n ),\n archived_at: Schema.NullOr(Timestamp).pipe(\n Schema.annotateKey({\n description: `Time the ${object.toLowerCase()} was archived or trashed.`,\n }),\n ),\n});\n\nexport const deleted = (object: string) =>\n Schema.optional(Schema.Boolean).pipe(\n Schema.annotateKey({ description: `Whether the ${object} was deleted in Linear.` }),\n );\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { Schema, Struct } from \"effect\";\n\nimport { OptionalRef, OptionalString, OptionalTimestamp, common, deleted } from \"./shared\";\n\nexport const CommentSchema = Schema.Struct({\n ...common(\"Comment\"),\n _deleted: deleted(\"comment\"),\n body: Schema.String.pipe(Schema.annotateKey({ description: \"Comment text in markdown.\" })),\n user_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who wrote the comment.\" })),\n external_user_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"External user who wrote the comment.\" }),\n ),\n issue_id: OptionalString.pipe(Schema.annotateKey({ description: \"Issue the comment is on.\" })),\n project_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Project the comment is on.\" }),\n ),\n project_update_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Project update the comment is on.\" }),\n ),\n initiative_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Initiative the comment is on.\" }),\n ),\n initiative_update_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Initiative update the comment is on.\" }),\n ),\n document_content_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Document content the comment is on.\" }),\n ),\n parent_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Comment this one replies to.\" }),\n ),\n quoted_text: OptionalString.pipe(Schema.annotateKey({ description: \"Text the comment quotes.\" })),\n edited_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the comment was last edited.\" }),\n ),\n resolved_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the thread was resolved.\" }),\n ),\n resolving_user_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"User who resolved the thread.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Comment URL.\" })),\n})\n .annotate({ description: \"Linear comments on issues, projects, initiatives, and updates.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Comment = Schema.Schema.Type<typeof CommentSchema>;\n\nexport const CommentObjectSchema = CommentSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n","import { ConnectorError, Cursor, Fetch } from \"@useairfoil/connector-kit\";\nimport {\n Array as Arr,\n DateTime,\n Duration,\n Effect,\n Option,\n Schema,\n SchemaTransformation,\n Stream,\n String as Str,\n} from \"effect\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nconst changesInterval = Duration.minutes(5);\nconst hourly = Duration.hours(1);\n// A run stops after this many pages and the next one starts right away.\nconst maxPagesPerRun = 20;\n// Updates can show up in a list late, so each changes read starts a bit early.\nconst changesOverlap = Duration.minutes(1);\n\ntype ListSpec<Item, Row> = {\n /** List query, such as `issues`. */\n readonly connection: string;\n /** Single-item query for webhooks, such as `issue`. */\n readonly single?: string;\n /** GraphQL fields, aliased to match the schema. */\n readonly fields: string;\n readonly item: Schema.Decoder<Item>;\n /** Page size. Lower it for queries with nested lists. */\n readonly first?: number;\n readonly updatedAt: (item: Item) => Date;\n /** Builds rows and may fetch more nested pages. */\n readonly rows: (items: ReadonlyArray<Item>) => Effect.Effect<ReadonlyArray<Row>, ConnectorError>;\n};\n\n/** Keeps item types inferred in the callbacks. */\nexport const listSpec = <Item, Row>(spec: ListSpec<Item, Row>) => spec;\n\nexport const rowsOf =\n <Item, Row>(toRow: (item: Item) => Row) =>\n (items: ReadonlyArray<Item>) =>\n Effect.succeed(items.map(toRow));\n\ntype Page<Item> = {\n readonly items: ReadonlyArray<Item>;\n readonly next: Option.Option<string>;\n};\n\nconst PageInfoSchema = Schema.Struct({\n hasNextPage: Schema.Boolean,\n endCursor: Schema.NullOr(Schema.String),\n});\n\nconst readPage = <Item, Row>(\n client: LinearClientService,\n spec: ListSpec<Item, Row>,\n options: {\n readonly orderBy: \"createdAt\" | \"updatedAt\";\n readonly after: Option.Option<string>;\n readonly first?: number;\n },\n): Effect.Effect<Page<Item>, ConnectorError> =>\n client\n .query(\n Schema.Struct({\n page: Schema.Struct({ nodes: Schema.Array(spec.item), pageInfo: PageInfoSchema }),\n }).pipe(Schema.encodeKeys({ page: spec.connection })),\n `query ${Str.capitalize(spec.connection)}($first: Int!, $after: String, $orderBy: PaginationOrderBy) {\n ${spec.connection}(first: $first, after: $after, orderBy: $orderBy, includeArchived: true) {\n nodes { ${spec.fields} }\n pageInfo { hasNextPage endCursor }\n }\n}`,\n {\n first: options.first ?? spec.first ?? 250,\n after: Option.getOrNull(options.after),\n orderBy: options.orderBy,\n },\n )\n .pipe(\n Effect.map(({ page }) => ({\n items: page.nodes,\n next: page.pageInfo.hasNextPage\n ? Option.fromNullishOr(page.pageInfo.endCursor)\n : Option.none(),\n })),\n );\n\nconst listAll = <Item, Row>(\n client: LinearClientService,\n spec: ListSpec<Item, Row>,\n): Effect.Effect<ReadonlyArray<Item>, ConnectorError> =>\n Stream.paginate(Option.none<string>(), (after) =>\n readPage(client, spec, { orderBy: \"createdAt\", after }).pipe(\n Effect.map(({ items, next }) => [items, Option.map(next, Option.some)] as const),\n ),\n ).pipe(Stream.runCollect);\n\nexport const checkList = <Item, Row>(client: LinearClientService, spec: ListSpec<Item, Row>) =>\n readPage(client, spec, { orderBy: \"createdAt\", after: Option.none(), first: 1 }).pipe(\n Effect.flatMap(({ items }) => spec.rows(items)),\n Effect.asVoid,\n );\n\n/** Small lists are read in full every hour. */\nexport const listSources = <Item, Row extends object>(\n client: LinearClientService,\n spec: ListSpec<Item, Row>,\n) => {\n const read = listAll(client, spec).pipe(Effect.flatMap(spec.rows));\n return {\n check: checkList(client, spec),\n backfill: Fetch.page({\n pageCursor: Cursor.string(),\n cutoff: Cursor.isoDateTime(),\n fetch: () => read.pipe(Effect.map((rows) => ({ rows, hasMore: false }))),\n }),\n changes: Fetch.changes({\n cursor: Cursor.string(),\n interval: hourly,\n fetch: () =>\n Effect.all([read, DateTime.now]).pipe(\n Effect.map(([rows, now]) => ({ rows, cursor: DateTime.formatIso(now) })),\n ),\n }),\n };\n};\n\n/** Changes pick up items created during backfill. */\nexport const backfillList = <Item, Row extends object>(\n client: LinearClientService,\n spec: ListSpec<Item, Row>,\n) =>\n Fetch.page({\n pageCursor: Cursor.string(),\n cutoff: Cursor.isoDateTime(),\n fetch: ({ pageCursor }) =>\n Effect.gen(function* () {\n const page = yield* readPage(client, spec, {\n orderBy: \"createdAt\",\n after: Option.fromNullishOr(typeof pageCursor === \"string\" ? pageCursor : undefined),\n });\n return {\n rows: yield* spec.rows(page.items),\n hasMore: Option.isSome(page.next),\n ...Option.match(page.next, {\n onNone: () => ({}),\n onSome: (nextPageCursor) => ({ nextPageCursor }),\n }),\n };\n }),\n });\n\n/**\n * `since` is when the last run started. `pending` is set while a run is split:\n * `until` is the start of that run, and `after` the page to go on from.\n */\nconst ChangesCursorSchema = Schema.Struct({\n since: Schema.DateTimeUtcFromString,\n pending: Schema.optional(\n Schema.Struct({ until: Schema.DateTimeUtcFromString, after: Schema.String }),\n ),\n});\n\ntype ChangesCursor = Schema.Schema.Type<typeof ChangesCursorSchema>;\n\nconst ChangesCursorCodec = Schema.Union([\n Schema.fromJsonString(ChangesCursorSchema),\n // The first cursor is the backfill cutoff, a plain ISO time.\n Schema.DateTimeUtcFromString.pipe(\n Schema.decodeTo(\n Schema.toType(ChangesCursorSchema),\n SchemaTransformation.transform({\n decode: (since): ChangesCursor => ({ since }),\n encode: (cursor) => cursor.since,\n }),\n ),\n ),\n]);\n\nconst cursorError = (cause: Schema.SchemaError) =>\n new ConnectorError({ message: \"Invalid Linear changes cursor\", cause });\n\n/**\n * Newest first: an edit during paging is read again on the next run.\n */\nexport const changesList = <Item, Row extends object>(\n client: LinearClientService,\n spec: ListSpec<Item, Row>,\n) =>\n Fetch.changes({\n cursor: Cursor.string(),\n interval: changesInterval,\n fetch: ({ cursor }) =>\n Effect.gen(function* () {\n const state = yield* Schema.decodeUnknownEffect(ChangesCursorCodec)(String(cursor)).pipe(\n Effect.mapError(cursorError),\n );\n const until = state.pending?.until ?? (yield* DateTime.now);\n const from = DateTime.toDateUtc(DateTime.subtractDuration(state.since, changesOverlap));\n const isRecent = (item: Item) => spec.updatedAt(item).getTime() >= from.getTime();\n\n const pages = yield* Stream.paginate(Option.fromNullishOr(state.pending?.after), (after) =>\n Effect.gen(function* () {\n const page = yield* readPage(client, spec, { orderBy: \"updatedAt\", after });\n const recent = page.items.filter(isRecent);\n const next = recent.length === page.items.length ? page.next : Option.none();\n const rows = yield* spec.rows(recent);\n return [[{ rows, next }], Option.map(next, Option.some)] as const;\n }),\n ).pipe(Stream.take(maxPagesPerRun), Stream.runCollect);\n\n const rows = pages.flatMap((page) => page.rows);\n const after = Option.flatMap(Arr.last(pages), (page) => page.next);\n const next: ChangesCursor =\n pages.length === maxPagesPerRun && Option.isSome(after)\n ? { since: state.since, pending: { until, after: after.value } }\n : { since: until };\n return {\n rows,\n cursor: yield* Schema.encodeEffect(Schema.fromJsonString(ChangesCursorSchema))(next).pipe(\n Effect.mapError(cursorError),\n ),\n hasMore: next.pending !== undefined,\n };\n }),\n });\n\nconst WebhookPayloadSchema = Schema.Struct({\n data: Schema.Struct({ id: Schema.String }),\n webhookTimestamp: Schema.Number,\n});\n\ntype WebhookPayload = Schema.Schema.Type<typeof WebhookPayloadSchema>;\n\n/**\n * Archive and trash also send `remove`, without changing `updatedAt`.\n * Read the item again; delete only if it's gone. Use the webhook time as the version.\n */\nexport const webhookList = <Item, Row extends object>(\n client: LinearClientService,\n spec: ListSpec<Item, Row>,\n) => ({\n schema: WebhookPayloadSchema,\n handler: ({ payload }: { readonly payload: WebhookPayload }) =>\n Effect.gen(function* () {\n const version = new Date(payload.webhookTimestamp);\n const single = spec.single ?? spec.connection;\n const found = yield* client.find(\n Schema.Struct({ item: spec.item }).pipe(Schema.encodeKeys({ item: single })),\n `query ${Str.capitalize(single)}($id: String!) {\n ${single}(id: $id) { ${spec.fields} }\n}`,\n { id: payload.data.id },\n );\n return yield* Option.match(found, {\n onNone: () => Effect.succeed([{ id: payload.data.id, version, _deleted: true as const }]),\n onSome: ({ item }) =>\n spec.rows([item]).pipe(Effect.map((rows) => rows.map((row) => ({ ...row, version })))),\n });\n }),\n});\n","import { Resource } from \"@useairfoil/connector-kit\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport { CommentObjectSchema, CommentSchema } from \"../schemas/comments\";\nimport { backfillList, changesList, checkList, listSpec, rowsOf, webhookList } from \"./pages\";\n\nexport const commentSpec = listSpec({\n connection: \"comments\",\n single: \"comment\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n body user_id: user { id } external_user_id: externalUser { id }\n issue_id: issueId project_id: projectId project_update_id: projectUpdateId\n initiative_id: initiativeId initiative_update_id: initiativeUpdateId\n document_content_id: documentContentId parent_id: parentId quoted_text: quotedText\n edited_at: editedAt resolved_at: resolvedAt resolving_user_id: resolvingUser { id } url`,\n item: CommentObjectSchema,\n updatedAt: (comment) => comment.updated_at,\n rows: rowsOf((comment) => ({ ...comment, version: comment.updated_at, _deleted: false })),\n});\n\nexport const makeComments = (client: LinearClientService) =>\n Resource.entity({\n name: \"comments\",\n rowSchema: CommentSchema,\n version: \"version\",\n\n check: checkList(client, commentSpec),\n backfill: backfillList(client, commentSpec),\n changes: changesList(client, commentSpec),\n webhook: webhookList(client, commentSpec),\n });\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { Schema, Struct } from \"effect\";\n\nimport { Long, OptionalRef, OptionalString, Ref, common, deleted } from \"./shared\";\n\nexport const CustomerSchema = Schema.Struct({\n ...common(\"Customer\"),\n _deleted: deleted(\"customer\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Customer name.\" })),\n domains: Schema.Array(Schema.String).pipe(\n Schema.annotateKey({ description: \"Email domains of the customer.\" }),\n ),\n external_ids: Schema.Array(Schema.String).pipe(\n Schema.annotateKey({ description: \"IDs in other systems.\" }),\n ),\n logo_url: OptionalString.pipe(Schema.annotateKey({ description: \"Logo URL.\" })),\n owner_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who owns the customer.\" })),\n status_id: Ref.pipe(Schema.annotateKey({ description: \"Customer status.\" })),\n tier_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Customer tier.\" })),\n revenue: Schema.NullOr(Long).pipe(Schema.annotateKey({ description: \"Annual revenue.\" })),\n size: Schema.NullOr(Schema.Finite).pipe(Schema.annotateKey({ description: \"Company size.\" })),\n approximate_need_count: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"About how many requests it has.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Customer URL.\" })),\n})\n .annotate({ description: \"Linear customers.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Customer = Schema.Schema.Type<typeof CustomerSchema>;\n\nexport const CustomerObjectSchema = CustomerSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const CustomerNeedSchema = Schema.Struct({\n ...common(\"Request\"),\n _deleted: deleted(\"request\"),\n customer_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Customer.\" })),\n issue_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Issue the request is linked to.\" }),\n ),\n project_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Project the request is linked to.\" }),\n ),\n original_issue_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Issue the request was first linked to.\" }),\n ),\n comment_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Comment the request came from.\" }),\n ),\n attachment_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Attachment the request came from.\" }),\n ),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who added the request.\" })),\n body: OptionalString.pipe(Schema.annotateKey({ description: \"Request text in markdown.\" })),\n priority: Schema.Finite.pipe(Schema.annotateKey({ description: \"0 normal, 1 important.\" })),\n url: OptionalString.pipe(Schema.annotateKey({ description: \"Source URL.\" })),\n})\n .annotate({ description: \"Linear customer requests, linked to issues or projects.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type CustomerNeed = Schema.Schema.Type<typeof CustomerNeedSchema>;\n\nexport const CustomerNeedObjectSchema = CustomerNeedSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nconst levelFields = (object: string) => ({\n ...common(object),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Name.\" })),\n display_name: Schema.String.pipe(Schema.annotateKey({ description: \"Name shown in Linear.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Description.\" })),\n color: Schema.String.pipe(Schema.annotateKey({ description: \"Color, as hex.\" })),\n position: Schema.Finite.pipe(Schema.annotateKey({ description: \"Order in the list.\" })),\n});\n\nexport const CustomerStatusSchema = Schema.Struct(levelFields(\"Status\"))\n .annotate({ description: \"Linear customer statuses. Names the IDs in `customers.status_id`.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type CustomerStatus = Schema.Schema.Type<typeof CustomerStatusSchema>;\n\nexport const CustomerStatusObjectSchema = CustomerStatusSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const CustomerTierSchema = Schema.Struct(levelFields(\"Tier\"))\n .annotate({ description: \"Linear customer tiers. Names the IDs in `customers.tier_id`.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type CustomerTier = Schema.Schema.Type<typeof CustomerTierSchema>;\n\nexport const CustomerTierObjectSchema = CustomerTierSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n","import { Resource } from \"@useairfoil/connector-kit\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport {\n CustomerNeedObjectSchema,\n CustomerNeedSchema,\n CustomerObjectSchema,\n CustomerSchema,\n CustomerStatusObjectSchema,\n CustomerStatusSchema,\n CustomerTierObjectSchema,\n CustomerTierSchema,\n} from \"../schemas/customers\";\nimport {\n backfillList,\n changesList,\n checkList,\n listSources,\n listSpec,\n rowsOf,\n webhookList,\n} from \"./pages\";\n\nconst customerSpec = listSpec({\n connection: \"customers\",\n single: \"customer\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name domains external_ids: externalIds logo_url: logoUrl owner_id: owner { id }\n status_id: status { id } tier_id: tier { id } revenue size\n approximate_need_count: approximateNeedCount url`,\n item: CustomerObjectSchema,\n updatedAt: (customer) => customer.updated_at,\n rows: rowsOf((customer) => ({ ...customer, version: customer.updated_at, _deleted: false })),\n});\n\nexport const makeCustomers = (client: LinearClientService) =>\n Resource.entity({\n name: \"customers\",\n rowSchema: CustomerSchema,\n version: \"version\",\n\n check: checkList(client, customerSpec),\n backfill: backfillList(client, customerSpec),\n changes: changesList(client, customerSpec),\n webhook: webhookList(client, customerSpec),\n });\n\nconst customerNeedSpec = listSpec({\n connection: \"customerNeeds\",\n single: \"customerNeed\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n customer_id: customer { id } issue_id: issue { id } project_id: project { id }\n original_issue_id: originalIssue { id } comment_id: comment { id }\n attachment_id: attachment { id } creator_id: creator { id } body priority url`,\n item: CustomerNeedObjectSchema,\n updatedAt: (need) => need.updated_at,\n rows: rowsOf((need) => ({ ...need, version: need.updated_at, _deleted: false })),\n});\n\nexport const makeCustomerNeeds = (client: LinearClientService) =>\n Resource.entity({\n name: \"customer_needs\",\n rowSchema: CustomerNeedSchema,\n version: \"version\",\n\n check: checkList(client, customerNeedSpec),\n backfill: backfillList(client, customerNeedSpec),\n changes: changesList(client, customerNeedSpec),\n webhook: webhookList(client, customerNeedSpec),\n });\n\nconst levelFields = `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt name display_name: displayName description color position`;\n\nconst customerStatusSpec = listSpec({\n connection: \"customerStatuses\",\n fields: levelFields,\n item: CustomerStatusObjectSchema,\n updatedAt: (status) => status.updated_at,\n rows: rowsOf((status) => ({ ...status, version: status.updated_at })),\n});\n\nexport const makeCustomerStatuses = (client: LinearClientService) =>\n Resource.entity({\n name: \"customer_statuses\",\n rowSchema: CustomerStatusSchema,\n version: \"version\",\n ...listSources(client, customerStatusSpec),\n });\n\nconst customerTierSpec = listSpec({\n connection: \"customerTiers\",\n fields: levelFields,\n item: CustomerTierObjectSchema,\n updatedAt: (tier) => tier.updated_at,\n rows: rowsOf((tier) => ({ ...tier, version: tier.updated_at })),\n});\n\nexport const makeCustomerTiers = (client: LinearClientService) =>\n Resource.entity({\n name: \"customer_tiers\",\n rowSchema: CustomerTierSchema,\n version: \"version\",\n ...listSources(client, customerTierSpec),\n });\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { Schema, Struct } from \"effect\";\n\nimport { OptionalRef, OptionalString, OptionalTimestamp, common, deleted } from \"./shared\";\n\nexport const DocumentSchema = Schema.Struct({\n ...common(\"Document\"),\n _deleted: deleted(\"document\"),\n title: Schema.String.pipe(Schema.annotateKey({ description: \"Title.\" })),\n content: OptionalString.pipe(Schema.annotateKey({ description: \"Content in markdown.\" })),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Document URL.\" })),\n icon: OptionalString.pipe(Schema.annotateKey({ description: \"Icon.\" })),\n color: OptionalString.pipe(Schema.annotateKey({ description: \"Icon color.\" })),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who made the document.\" })),\n updated_by_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"User who last changed the document.\" }),\n ),\n project_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Project the document is in.\" })),\n initiative_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Initiative the document is in.\" }),\n ),\n issue_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Issue the document is in.\" })),\n cycle_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Cycle the document is in.\" })),\n team_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Team the document is in.\" })),\n parent_document_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Parent document.\" })),\n hidden_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the document was hidden.\" }),\n ),\n trashed: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the document is in the trash.\" }),\n ),\n})\n .annotate({ description: \"Linear documents, including archived and trashed ones.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Document = Schema.Schema.Type<typeof DocumentSchema>;\n\nexport const DocumentObjectSchema = DocumentSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n","import { Resource } from \"@useairfoil/connector-kit\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport { DocumentObjectSchema, DocumentSchema } from \"../schemas/documents\";\nimport { backfillList, changesList, checkList, listSpec, rowsOf, webhookList } from \"./pages\";\n\nconst documentSpec = listSpec({\n connection: \"documents\",\n single: \"document\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n title content url icon color creator_id: creator { id } updated_by_id: updatedBy { id }\n project_id: project { id } initiative_id: initiative { id } issue_id: issue { id }\n cycle_id: cycle { id } team_id: team { id } parent_document_id: parentDocument { id }\n hidden_at: hiddenAt trashed`,\n item: DocumentObjectSchema,\n updatedAt: (document) => document.updated_at,\n rows: rowsOf((document) => ({ ...document, version: document.updated_at, _deleted: false })),\n});\n\nexport const makeDocuments = (client: LinearClientService) =>\n Resource.entity({\n name: \"documents\",\n rowSchema: DocumentSchema,\n version: \"version\",\n\n check: checkList(client, documentSpec),\n backfill: backfillList(client, documentSpec),\n changes: changesList(client, documentSpec),\n webhook: webhookList(client, documentSpec),\n });\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { Schema, Struct } from \"effect\";\n\nimport {\n Long,\n OptionalRef,\n OptionalString,\n OptionalTimestamp,\n Ref,\n common,\n deleted,\n} from \"./shared\";\n\nexport const InitiativeSchema = Schema.Struct({\n ...common(\"Initiative\"),\n _deleted: deleted(\"initiative\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Initiative name.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Short summary.\" })),\n content: OptionalString.pipe(\n Schema.annotateKey({ description: \"Initiative overview in markdown.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Initiative URL.\" })),\n icon: OptionalString.pipe(Schema.annotateKey({ description: \"Icon.\" })),\n color: OptionalString.pipe(Schema.annotateKey({ description: \"Color, as hex.\" })),\n status: Schema.String.pipe(\n Schema.annotateKey({ description: \"Status: Planned, Active, or Completed.\" }),\n ),\n health: OptionalString.pipe(\n Schema.annotateKey({ description: \"Health from the latest update.\" }),\n ),\n health_updated_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the health last changed.\" }),\n ),\n priority: Long.pipe(\n Schema.annotateKey({ description: \"0 none, 1 urgent, 2 high, 3 medium, 4 low.\" }),\n ),\n owner_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Initiative owner.\" })),\n creator_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"User who made the initiative.\" }),\n ),\n parent_initiative_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Parent initiative.\" })),\n target_date: OptionalString.pipe(\n Schema.annotateKey({ description: \"Target date, as YYYY-MM-DD.\" }),\n ),\n started_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the initiative started.\" }),\n ),\n completed_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the initiative was completed.\" }),\n ),\n canceled_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the initiative was canceled.\" }),\n ),\n label_ids: Schema.Array(Schema.String).pipe(\n Schema.annotateKey({ description: \"Initiative labels.\" }),\n ),\n visibility: Schema.String.pipe(\n Schema.annotateKey({ description: \"Who can see the initiative.\" }),\n ),\n trashed: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the initiative is in the trash.\" }),\n ),\n})\n .annotate({ description: \"Linear initiatives, including archived and trashed ones.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Initiative = Schema.Schema.Type<typeof InitiativeSchema>;\n\nexport const InitiativeObjectSchema = InitiativeSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const InitiativeUpdateSchema = Schema.Struct({\n ...common(\"Update\"),\n _deleted: deleted(\"update\"),\n initiative_id: Ref.pipe(Schema.annotateKey({ description: \"Initiative.\" })),\n user_id: Ref.pipe(Schema.annotateKey({ description: \"User who posted the update.\" })),\n body: Schema.String.pipe(Schema.annotateKey({ description: \"Update text in markdown.\" })),\n health: Schema.String.pipe(\n Schema.annotateKey({ description: \"Health: onTrack, atRisk, or offTrack.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Update URL.\" })),\n edited_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the update was last edited.\" }),\n ),\n comment_count: Long.pipe(Schema.annotateKey({ description: \"Comments on the update.\" })),\n})\n .annotate({ description: \"Linear initiative updates: status posts with a health.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type InitiativeUpdate = Schema.Schema.Type<typeof InitiativeUpdateSchema>;\n\nexport const InitiativeUpdateObjectSchema = InitiativeUpdateSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const InitiativeLabelSchema = Schema.Struct({\n ...common(\"Label\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Label name.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Label description.\" })),\n color: Schema.String.pipe(Schema.annotateKey({ description: \"Label color, as hex.\" })),\n is_group: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether the label groups other labels.\" }),\n ),\n parent_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Label group.\" })),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who made the label.\" })),\n retired_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the label was retired.\" }),\n ),\n})\n .annotate({ description: \"Linear initiative labels. Names the IDs in `initiatives.label_ids`.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type InitiativeLabel = Schema.Schema.Type<typeof InitiativeLabelSchema>;\n\nexport const InitiativeLabelObjectSchema = InitiativeLabelSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const InitiativeRelationSchema = Schema.Struct({\n ...common(\"Relation\"),\n initiative_id: Ref.pipe(\n Schema.annotateKey({ description: \"Initiative the relation starts from.\" }),\n ),\n related_initiative_id: Ref.pipe(Schema.annotateKey({ description: \"Related initiative.\" })),\n sort_order: Schema.Finite.pipe(Schema.annotateKey({ description: \"Order.\" })),\n user_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who made the relation.\" })),\n})\n .annotate({ description: \"Linear initiative relations. Deleted relations aren't seen.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type InitiativeRelation = Schema.Schema.Type<typeof InitiativeRelationSchema>;\n\nexport const InitiativeRelationObjectSchema = InitiativeRelationSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const InitiativeToProjectSchema = Schema.Struct({\n ...common(\"Link\"),\n initiative_id: Ref.pipe(Schema.annotateKey({ description: \"Initiative.\" })),\n project_id: Ref.pipe(Schema.annotateKey({ description: \"Project.\" })),\n sort_order: Schema.String.pipe(\n Schema.annotateKey({ description: \"Order within the initiative.\" }),\n ),\n})\n .annotate({\n description: \"Links between Linear initiatives and projects. Removed links aren't seen.\",\n })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type InitiativeToProject = Schema.Schema.Type<typeof InitiativeToProjectSchema>;\n\nexport const InitiativeToProjectObjectSchema = InitiativeToProjectSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n","import { Resource } from \"@useairfoil/connector-kit\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport {\n InitiativeLabelObjectSchema,\n InitiativeLabelSchema,\n InitiativeObjectSchema,\n InitiativeRelationObjectSchema,\n InitiativeRelationSchema,\n InitiativeSchema,\n InitiativeToProjectObjectSchema,\n InitiativeToProjectSchema,\n InitiativeUpdateObjectSchema,\n InitiativeUpdateSchema,\n} from \"../schemas/initiatives\";\nimport {\n backfillList,\n changesList,\n checkList,\n listSources,\n listSpec,\n rowsOf,\n webhookList,\n} from \"./pages\";\n\nconst initiativeSpec = listSpec({\n connection: \"initiatives\",\n single: \"initiative\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name description content url icon color status health\n health_updated_at: healthUpdatedAt priority owner_id: owner { id } creator_id: creator { id }\n parent_initiative_id: parentInitiative { id } target_date: targetDate\n started_at: startedAt completed_at: completedAt canceled_at: canceledAt\n label_ids: labelIds visibility trashed`,\n item: InitiativeObjectSchema,\n updatedAt: (initiative) => initiative.updated_at,\n rows: rowsOf((initiative) => ({\n ...initiative,\n version: initiative.updated_at,\n _deleted: false,\n })),\n});\n\nexport const makeInitiatives = (client: LinearClientService) =>\n Resource.entity({\n name: \"initiatives\",\n rowSchema: InitiativeSchema,\n version: \"version\",\n\n check: checkList(client, initiativeSpec),\n backfill: backfillList(client, initiativeSpec),\n changes: changesList(client, initiativeSpec),\n webhook: webhookList(client, initiativeSpec),\n });\n\nconst initiativeUpdateSpec = listSpec({\n connection: \"initiativeUpdates\",\n single: \"initiativeUpdate\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n initiative_id: initiative { id } user_id: user { id } body health url\n edited_at: editedAt comment_count: commentCount`,\n item: InitiativeUpdateObjectSchema,\n updatedAt: (update) => update.updated_at,\n rows: rowsOf((update) => ({ ...update, version: update.updated_at, _deleted: false })),\n});\n\nexport const makeInitiativeUpdates = (client: LinearClientService) =>\n Resource.entity({\n name: \"initiative_updates\",\n rowSchema: InitiativeUpdateSchema,\n version: \"version\",\n\n check: checkList(client, initiativeUpdateSpec),\n backfill: backfillList(client, initiativeUpdateSpec),\n changes: changesList(client, initiativeUpdateSpec),\n webhook: webhookList(client, initiativeUpdateSpec),\n });\n\nconst initiativeLabelSpec = listSpec({\n connection: \"initiativeLabels\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name description color is_group: isGroup parent_id: parent { id }\n creator_id: creator { id } retired_at: retiredAt`,\n item: InitiativeLabelObjectSchema,\n updatedAt: (label) => label.updated_at,\n rows: rowsOf((label) => ({ ...label, version: label.updated_at })),\n});\n\nexport const makeInitiativeLabels = (client: LinearClientService) =>\n Resource.entity({\n name: \"initiative_labels\",\n rowSchema: InitiativeLabelSchema,\n version: \"version\",\n ...listSources(client, initiativeLabelSpec),\n });\n\nconst initiativeRelationSpec = listSpec({\n connection: \"initiativeRelations\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n initiative_id: initiative { id } related_initiative_id: relatedInitiative { id }\n sort_order: sortOrder user_id: user { id }`,\n item: InitiativeRelationObjectSchema,\n updatedAt: (relation) => relation.updated_at,\n rows: rowsOf((relation) => ({ ...relation, version: relation.updated_at })),\n});\n\nexport const makeInitiativeRelations = (client: LinearClientService) =>\n Resource.entity({\n name: \"initiative_relations\",\n rowSchema: InitiativeRelationSchema,\n version: \"version\",\n\n check: checkList(client, initiativeRelationSpec),\n backfill: backfillList(client, initiativeRelationSpec),\n changes: changesList(client, initiativeRelationSpec),\n });\n\nconst initiativeToProjectSpec = listSpec({\n connection: \"initiativeToProjects\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt initiative_id: initiative { id } project_id: project { id } sort_order: sortOrder`,\n item: InitiativeToProjectObjectSchema,\n updatedAt: (link) => link.updated_at,\n rows: rowsOf((link) => ({ ...link, version: link.updated_at })),\n});\n\nexport const makeInitiativeToProjects = (client: LinearClientService) =>\n Resource.entity({\n name: \"initiative_to_projects\",\n rowSchema: InitiativeToProjectSchema,\n version: \"version\",\n\n check: checkList(client, initiativeToProjectSpec),\n backfill: backfillList(client, initiativeToProjectSpec),\n changes: changesList(client, initiativeToProjectSpec),\n });\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { Schema, Struct } from \"effect\";\n\nimport {\n Long,\n OptionalRef,\n OptionalString,\n OptionalTimestamp,\n Ref,\n common,\n deleted,\n} from \"./shared\";\n\nexport const IssueSchema = Schema.Struct({\n ...common(\"Issue\"),\n _deleted: deleted(\"issue\"),\n identifier: Schema.String.pipe(\n Schema.annotateKey({ description: \"Readable ID, such as ENG-123.\" }),\n ),\n number: Schema.Finite.pipe(Schema.annotateKey({ description: \"Issue number within its team.\" })),\n title: Schema.String.pipe(Schema.annotateKey({ description: \"Issue title.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Description in markdown.\" })),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Issue URL.\" })),\n branch_name: Schema.String.pipe(\n Schema.annotateKey({ description: \"Suggested Git branch name.\" }),\n ),\n priority: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"0 none, 1 urgent, 2 high, 3 medium, 4 low.\" }),\n ),\n priority_label: Schema.String.pipe(Schema.annotateKey({ description: \"Priority name.\" })),\n estimate: Schema.NullOr(Schema.Finite).pipe(\n Schema.annotateKey({ description: \"Estimate, on the team's scale.\" }),\n ),\n due_date: OptionalString.pipe(Schema.annotateKey({ description: \"Due date, as YYYY-MM-DD.\" })),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who created the issue.\" })),\n assignee_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Assigned user.\" })),\n delegate_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Agent user working on the issue.\" }),\n ),\n snoozed_by_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"User who snoozed the issue.\" }),\n ),\n state_id: Ref.pipe(Schema.annotateKey({ description: \"Workflow state.\" })),\n team_id: Ref.pipe(Schema.annotateKey({ description: \"Team the issue belongs to.\" })),\n project_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Project.\" })),\n project_milestone_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Project milestone.\" })),\n cycle_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Cycle.\" })),\n parent_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Parent issue.\" })),\n source_comment_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Comment the issue was made from.\" }),\n ),\n external_user_creator_id: OptionalRef.pipe(\n Schema.annotateKey({\n description: \"External user who created the issue through an integration.\",\n }),\n ),\n label_ids: Schema.Array(Schema.String).pipe(Schema.annotateKey({ description: \"Labels.\" })),\n previous_identifiers: Schema.Array(Schema.String).pipe(\n Schema.annotateKey({ description: \"Earlier readable IDs, from before the issue moved team.\" }),\n ),\n started_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue moved to a started state.\" }),\n ),\n completed_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue was completed.\" }),\n ),\n canceled_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue was canceled.\" }),\n ),\n started_triage_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue entered triage.\" }),\n ),\n triaged_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue left triage.\" }),\n ),\n auto_closed_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue was closed automatically.\" }),\n ),\n auto_archived_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue was archived automatically.\" }),\n ),\n added_to_cycle_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue was added to its cycle.\" }),\n ),\n added_to_project_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue was added to its project.\" }),\n ),\n added_to_team_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue was added to its team.\" }),\n ),\n snoozed_until_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the issue is snoozed until.\" }),\n ),\n sla_type: OptionalString.pipe(Schema.annotateKey({ description: \"SLA type.\" })),\n sla_started_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the SLA started.\" }),\n ),\n sla_breaches_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the SLA breaches.\" }),\n ),\n customer_ticket_count: Long.pipe(Schema.annotateKey({ description: \"Linked support tickets.\" })),\n integration_source_type: OptionalString.pipe(\n Schema.annotateKey({ description: \"Integration that created the issue.\" }),\n ),\n trashed: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the issue is in the trash.\" }),\n ),\n})\n .annotate({ description: \"Linear issues, including archived and trashed ones.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Issue = Schema.Schema.Type<typeof IssueSchema>;\n\nexport const IssueObjectSchema = IssueSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const IssueHistorySchema = Schema.Struct({\n ...common(\"History entry\"),\n issue_id: Schema.String.pipe(Schema.annotateKey({ description: \"Issue that changed.\" })),\n actor_id: OptionalString.pipe(Schema.annotateKey({ description: \"User who made the change.\" })),\n from_state_id: OptionalString.pipe(Schema.annotateKey({ description: \"Workflow state before.\" })),\n to_state_id: OptionalString.pipe(Schema.annotateKey({ description: \"Workflow state after.\" })),\n from_assignee_id: OptionalString.pipe(Schema.annotateKey({ description: \"Assignee before.\" })),\n to_assignee_id: OptionalString.pipe(Schema.annotateKey({ description: \"Assignee after.\" })),\n from_cycle_id: OptionalString.pipe(Schema.annotateKey({ description: \"Cycle before.\" })),\n to_cycle_id: OptionalString.pipe(Schema.annotateKey({ description: \"Cycle after.\" })),\n from_project_id: OptionalString.pipe(Schema.annotateKey({ description: \"Project before.\" })),\n to_project_id: OptionalString.pipe(Schema.annotateKey({ description: \"Project after.\" })),\n from_parent_id: OptionalString.pipe(Schema.annotateKey({ description: \"Parent issue before.\" })),\n to_parent_id: OptionalString.pipe(Schema.annotateKey({ description: \"Parent issue after.\" })),\n from_team_id: OptionalString.pipe(Schema.annotateKey({ description: \"Team before.\" })),\n to_team_id: OptionalString.pipe(Schema.annotateKey({ description: \"Team after.\" })),\n from_priority: Schema.NullOr(Schema.Finite).pipe(\n Schema.annotateKey({ description: \"Priority before.\" }),\n ),\n to_priority: Schema.NullOr(Schema.Finite).pipe(\n Schema.annotateKey({ description: \"Priority after.\" }),\n ),\n from_estimate: Schema.NullOr(Schema.Finite).pipe(\n Schema.annotateKey({ description: \"Estimate before.\" }),\n ),\n to_estimate: Schema.NullOr(Schema.Finite).pipe(\n Schema.annotateKey({ description: \"Estimate after.\" }),\n ),\n from_due_date: OptionalString.pipe(\n Schema.annotateKey({ description: \"Due date before, as YYYY-MM-DD.\" }),\n ),\n to_due_date: OptionalString.pipe(\n Schema.annotateKey({ description: \"Due date after, as YYYY-MM-DD.\" }),\n ),\n from_title: OptionalString.pipe(Schema.annotateKey({ description: \"Title before.\" })),\n to_title: OptionalString.pipe(Schema.annotateKey({ description: \"Title after.\" })),\n added_label_ids: Schema.NullOr(Schema.Array(Schema.String)).pipe(\n Schema.annotateKey({ description: \"Labels added.\" }),\n ),\n removed_label_ids: Schema.NullOr(Schema.Array(Schema.String)).pipe(\n Schema.annotateKey({ description: \"Labels removed.\" }),\n ),\n attachment_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Attachment linked or unlinked.\" }),\n ),\n customer_need_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Customer request linked or unlinked.\" }),\n ),\n to_converted_project_id: OptionalString.pipe(\n Schema.annotateKey({ description: \"Project the issue became.\" }),\n ),\n updated_description: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the description changed.\" }),\n ),\n archived: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the issue was archived.\" }),\n ),\n trashed: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the issue was trashed.\" }),\n ),\n auto_archived: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the issue was archived automatically.\" }),\n ),\n auto_closed: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the issue was closed automatically.\" }),\n ),\n})\n .annotate({ description: \"Linear issue history. One row per change to an issue.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type IssueHistory = Schema.Schema.Type<typeof IssueHistorySchema>;\n\nexport const IssueHistoryObjectSchema = IssueHistorySchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"issue_id\"]),\n);\n\nexport const IssueRelationSchema = Schema.Struct({\n ...common(\"Relation\"),\n issue_id: Ref.pipe(Schema.annotateKey({ description: \"Issue the relation starts from.\" })),\n related_issue_id: Ref.pipe(Schema.annotateKey({ description: \"Related issue.\" })),\n type: Schema.String.pipe(\n Schema.annotateKey({ description: \"Relation type: blocks, duplicate, related, or similar.\" }),\n ),\n})\n .annotate({ description: \"Linear issue relations. Deleted relations aren't seen.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type IssueRelation = Schema.Schema.Type<typeof IssueRelationSchema>;\n\nexport const IssueRelationObjectSchema = IssueRelationSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const AttachmentSchema = Schema.Struct({\n ...common(\"Attachment\"),\n _deleted: deleted(\"attachment\"),\n issue_id: Ref.pipe(Schema.annotateKey({ description: \"Issue the attachment is on.\" })),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who added it.\" })),\n external_user_creator_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"External user who added it.\" }),\n ),\n title: Schema.String.pipe(Schema.annotateKey({ description: \"Title.\" })),\n subtitle: OptionalString.pipe(Schema.annotateKey({ description: \"Subtitle.\" })),\n url: Schema.String.pipe(\n Schema.annotateKey({ description: \"Linked URL, such as a pull request or ticket.\" }),\n ),\n source_type: OptionalString.pipe(\n Schema.annotateKey({ description: \"Source, such as github or zendesk.\" }),\n ),\n})\n .annotate({ description: \"Linear issue attachments: links to pull requests, tickets, and more.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Attachment = Schema.Schema.Type<typeof AttachmentSchema>;\n\nexport const AttachmentObjectSchema = AttachmentSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const IssueLabelSchema = Schema.Struct({\n ...common(\"Label\"),\n _deleted: deleted(\"label\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Label name.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Label description.\" })),\n color: Schema.String.pipe(Schema.annotateKey({ description: \"Label color, as hex.\" })),\n is_group: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether the label groups other labels.\" }),\n ),\n parent_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Label group.\" })),\n team_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Team, or null for a workspace label.\" }),\n ),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who made the label.\" })),\n retired_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the label was retired.\" }),\n ),\n})\n .annotate({ description: \"Linear issue labels. Names the IDs in `issues.label_ids`.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type IssueLabel = Schema.Schema.Type<typeof IssueLabelSchema>;\n\nexport const IssueLabelObjectSchema = IssueLabelSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n","import { type ConnectorError, Resource } from \"@useairfoil/connector-kit\";\nimport { Effect, Option, Schema, Stream } from \"effect\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport { type IssueHistory, IssueHistoryObjectSchema, IssueHistorySchema } from \"../schemas/issues\";\nimport { Timestamp } from \"../schemas/shared\";\nimport { backfillList, changesList, checkList, listSpec } from \"./pages\";\n\nconst historyFields = `\n id created_at: createdAt updated_at: updatedAt archived_at: archivedAt actor_id: actorId\n from_state_id: fromStateId to_state_id: toStateId\n from_assignee_id: fromAssigneeId to_assignee_id: toAssigneeId\n from_cycle_id: fromCycleId to_cycle_id: toCycleId\n from_project_id: fromProjectId to_project_id: toProjectId\n from_parent_id: fromParentId to_parent_id: toParentId from_team_id: fromTeamId to_team_id: toTeamId\n from_priority: fromPriority to_priority: toPriority\n from_estimate: fromEstimate to_estimate: toEstimate\n from_due_date: fromDueDate to_due_date: toDueDate from_title: fromTitle to_title: toTitle\n added_label_ids: addedLabelIds removed_label_ids: removedLabelIds\n attachment_id: attachmentId customer_need_id: customerNeedId\n to_converted_project_id: toConvertedProjectId updated_description: updatedDescription\n archived trashed auto_archived: autoArchived auto_closed: autoClosed`;\n\nconst HistoryPageSchema = Schema.Struct({\n nodes: Schema.Array(IssueHistoryObjectSchema),\n pageInfo: Schema.Struct({ hasNextPage: Schema.Boolean, endCursor: Schema.NullOr(Schema.String) }),\n});\n\ntype HistoryPage = typeof HistoryPageSchema.Type;\n\nconst IssueWithHistorySchema = Schema.Struct({\n id: Schema.String,\n updated_at: Timestamp,\n history: HistoryPageSchema,\n});\n\nconst nextCursor = ({ pageInfo }: HistoryPage) =>\n pageInfo.hasNextPage ? Option.fromNullishOr(pageInfo.endCursor) : Option.none();\n\n/** Returns the history after the first page, without repeating that page. */\nconst readMore = (\n client: LinearClientService,\n issueId: string,\n first: HistoryPage,\n): Effect.Effect<HistoryPage[\"nodes\"], ConnectorError> =>\n Option.match(nextCursor(first), {\n onNone: () => Effect.succeed([]),\n onSome: (cursor) =>\n Stream.paginate(cursor, (after) =>\n client\n .query(\n Schema.Struct({ issue: Schema.Struct({ history: HistoryPageSchema }) }),\n `query IssueHistory($id: String!, $after: String) {\n issue(id: $id) { history(first: 250, after: $after) { nodes { ${historyFields} } pageInfo { hasNextPage endCursor } } }\n}`,\n { id: issueId, after },\n )\n .pipe(\n Effect.map(({ issue }) => [issue.history.nodes, nextCursor(issue.history)] as const),\n ),\n ).pipe(Stream.runCollect),\n });\n\n/** Linear has no top-level history query. */\nconst historySpec = (client: LinearClientService) =>\n listSpec({\n connection: \"issues\",\n fields: `id updated_at: updatedAt history(first: 50) { nodes { ${historyFields} } pageInfo { hasNextPage endCursor } }`,\n item: IssueWithHistorySchema,\n // Each issue reads up to 50 history entries, so pages stay under the cost limit.\n first: 25,\n updatedAt: (issue) => issue.updated_at,\n rows: (issues): Effect.Effect<ReadonlyArray<IssueHistory>, ConnectorError> =>\n Effect.forEach(issues, (issue) =>\n readMore(client, issue.id, issue.history).pipe(\n Effect.map((more) =>\n [...issue.history.nodes, ...more].map((entry) => ({\n ...entry,\n issue_id: issue.id,\n version: entry.updated_at,\n })),\n ),\n ),\n ).pipe(Effect.map((rows) => rows.flat())),\n });\n\nexport const makeIssueHistory = (client: LinearClientService) => {\n const spec = historySpec(client);\n return Resource.entity({\n name: \"issue_history\",\n rowSchema: IssueHistorySchema,\n version: \"version\",\n\n check: checkList(client, spec),\n backfill: backfillList(client, spec),\n changes: changesList(client, spec),\n webhook: {\n schema: Schema.Struct({ data: Schema.Struct({ id: Schema.String }) }),\n handler: ({ payload }) =>\n client\n .find(\n Schema.Struct({ issue: IssueWithHistorySchema }),\n `query IssueHistory($id: String!) {\n issue(id: $id) { ${spec.fields} }\n}`,\n { id: payload.data.id },\n )\n .pipe(\n Effect.flatMap(\n Option.match({\n onNone: () => Effect.succeed([]),\n onSome: ({ issue }) => spec.rows([issue]),\n }),\n ),\n ),\n },\n });\n};\n","import { Resource } from \"@useairfoil/connector-kit\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport {\n AttachmentObjectSchema,\n AttachmentSchema,\n IssueLabelObjectSchema,\n IssueLabelSchema,\n IssueObjectSchema,\n IssueRelationObjectSchema,\n IssueRelationSchema,\n IssueSchema,\n} from \"../schemas/issues\";\nimport {\n backfillList,\n changesList,\n checkList,\n listSources,\n listSpec,\n rowsOf,\n webhookList,\n} from \"./pages\";\n\nconst issueFields = `\n id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n identifier number title description url branch_name: branchName\n priority priority_label: priorityLabel estimate due_date: dueDate\n creator_id: creator { id } assignee_id: assignee { id } delegate_id: delegate { id }\n snoozed_by_id: snoozedBy { id } state_id: state { id } team_id: team { id }\n project_id: project { id } project_milestone_id: projectMilestone { id }\n cycle_id: cycle { id } parent_id: parent { id } source_comment_id: sourceComment { id }\n external_user_creator_id: externalUserCreator { id }\n label_ids: labelIds previous_identifiers: previousIdentifiers\n started_at: startedAt completed_at: completedAt canceled_at: canceledAt\n started_triage_at: startedTriageAt triaged_at: triagedAt auto_closed_at: autoClosedAt\n auto_archived_at: autoArchivedAt added_to_cycle_at: addedToCycleAt\n added_to_project_at: addedToProjectAt added_to_team_at: addedToTeamAt\n snoozed_until_at: snoozedUntilAt sla_type: slaType sla_started_at: slaStartedAt\n sla_breaches_at: slaBreachesAt customer_ticket_count: customerTicketCount\n integration_source_type: integrationSourceType trashed`;\n\nconst issueSpec = listSpec({\n connection: \"issues\",\n single: \"issue\",\n fields: issueFields,\n item: IssueObjectSchema,\n updatedAt: (issue) => issue.updated_at,\n rows: rowsOf((issue) => ({ ...issue, version: issue.updated_at, _deleted: false })),\n});\n\nexport const makeIssues = (client: LinearClientService) =>\n Resource.entity({\n name: \"issues\",\n rowSchema: IssueSchema,\n version: \"version\",\n\n check: checkList(client, issueSpec),\n backfill: backfillList(client, issueSpec),\n changes: changesList(client, issueSpec),\n webhook: webhookList(client, issueSpec),\n });\n\nconst issueRelationSpec = listSpec({\n connection: \"issueRelations\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n issue_id: issue { id } related_issue_id: relatedIssue { id } type`,\n item: IssueRelationObjectSchema,\n updatedAt: (relation) => relation.updated_at,\n rows: rowsOf((relation) => ({ ...relation, version: relation.updated_at })),\n});\n\nexport const makeIssueRelations = (client: LinearClientService) =>\n Resource.entity({\n name: \"issue_relations\",\n rowSchema: IssueRelationSchema,\n version: \"version\",\n\n check: checkList(client, issueRelationSpec),\n backfill: backfillList(client, issueRelationSpec),\n changes: changesList(client, issueRelationSpec),\n });\n\nconst attachmentSpec = listSpec({\n connection: \"attachments\",\n single: \"attachment\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n issue_id: issue { id } creator_id: creator { id }\n external_user_creator_id: externalUserCreator { id }\n title subtitle url source_type: sourceType`,\n item: AttachmentObjectSchema,\n updatedAt: (attachment) => attachment.updated_at,\n rows: rowsOf((attachment) => ({\n ...attachment,\n version: attachment.updated_at,\n _deleted: false,\n })),\n});\n\nexport const makeAttachments = (client: LinearClientService) =>\n Resource.entity({\n name: \"attachments\",\n rowSchema: AttachmentSchema,\n version: \"version\",\n\n check: checkList(client, attachmentSpec),\n backfill: backfillList(client, attachmentSpec),\n changes: changesList(client, attachmentSpec),\n webhook: webhookList(client, attachmentSpec),\n });\n\nconst issueLabelSpec = listSpec({\n connection: \"issueLabels\",\n single: \"issueLabel\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name description color is_group: isGroup parent_id: parent { id } team_id: team { id }\n creator_id: creator { id } retired_at: retiredAt`,\n item: IssueLabelObjectSchema,\n updatedAt: (label) => label.updated_at,\n rows: rowsOf((label) => ({ ...label, version: label.updated_at, _deleted: false })),\n});\n\nexport const makeIssueLabels = (client: LinearClientService) =>\n Resource.entity({\n name: \"issue_labels\",\n rowSchema: IssueLabelSchema,\n version: \"version\",\n\n ...listSources(client, issueLabelSpec),\n webhook: webhookList(client, issueLabelSpec),\n });\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { Schema, Struct } from \"effect\";\n\nimport {\n Long,\n OptionalRef,\n OptionalString,\n OptionalTimestamp,\n Ref,\n RefList,\n common,\n deleted,\n} from \"./shared\";\n\nexport const ProjectSchema = Schema.Struct({\n ...common(\"Project\"),\n _deleted: deleted(\"project\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Project name.\" })),\n description: Schema.String.pipe(Schema.annotateKey({ description: \"Short summary.\" })),\n content: OptionalString.pipe(\n Schema.annotateKey({ description: \"Project overview in markdown.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Project URL.\" })),\n icon: OptionalString.pipe(Schema.annotateKey({ description: \"Icon.\" })),\n color: Schema.String.pipe(Schema.annotateKey({ description: \"Color, as hex.\" })),\n status_id: Ref.pipe(Schema.annotateKey({ description: \"Project status.\" })),\n priority: Long.pipe(\n Schema.annotateKey({ description: \"0 none, 1 urgent, 2 high, 3 medium, 4 low.\" }),\n ),\n priority_label: Schema.String.pipe(Schema.annotateKey({ description: \"Priority name.\" })),\n health: OptionalString.pipe(\n Schema.annotateKey({ description: \"Health from the latest update.\" }),\n ),\n health_updated_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the health last changed.\" }),\n ),\n progress: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"Share of the scope completed, from 0 to 1.\" }),\n ),\n scope: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"Total estimate of the project's issues.\" }),\n ),\n lead_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Project lead.\" })),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who made the project.\" })),\n converted_from_issue_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Issue the project was made from.\" }),\n ),\n start_date: OptionalString.pipe(\n Schema.annotateKey({ description: \"Start date, as YYYY-MM-DD.\" }),\n ),\n target_date: OptionalString.pipe(\n Schema.annotateKey({ description: \"Target date, as YYYY-MM-DD.\" }),\n ),\n started_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the project started.\" }),\n ),\n completed_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the project was completed.\" }),\n ),\n canceled_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the project was canceled.\" }),\n ),\n auto_archived_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the project was archived automatically.\" }),\n ),\n label_ids: Schema.Array(Schema.String).pipe(\n Schema.annotateKey({ description: \"Project labels.\" }),\n ),\n team_ids: RefList.pipe(\n Schema.annotateKey({ description: \"Teams the project belongs to. Reads up to 50.\" }),\n ),\n member_ids: RefList.pipe(\n Schema.annotateKey({ description: \"Project members. Reads up to 100.\" }),\n ),\n trashed: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the project is in the trash.\" }),\n ),\n})\n .annotate({ description: \"Linear projects, including archived and trashed ones.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Project = Schema.Schema.Type<typeof ProjectSchema>;\n\nexport const ProjectObjectSchema = ProjectSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const ProjectMilestoneSchema = Schema.Struct({\n ...common(\"Milestone\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Milestone name.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Description in markdown.\" })),\n project_id: Ref.pipe(Schema.annotateKey({ description: \"Project.\" })),\n target_date: OptionalString.pipe(\n Schema.annotateKey({ description: \"Target date, as YYYY-MM-DD.\" }),\n ),\n status: Schema.String.pipe(\n Schema.annotateKey({ description: \"Status: unstarted, next, overdue, or done.\" }),\n ),\n progress: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"Share of the scope completed, from 0 to 1.\" }),\n ),\n sort_order: Schema.Finite.pipe(Schema.annotateKey({ description: \"Order within the project.\" })),\n})\n .annotate({ description: \"Linear project milestones. Deleted milestones aren't seen.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ProjectMilestone = Schema.Schema.Type<typeof ProjectMilestoneSchema>;\n\nexport const ProjectMilestoneObjectSchema = ProjectMilestoneSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const ProjectUpdateSchema = Schema.Struct({\n ...common(\"Update\"),\n _deleted: deleted(\"update\"),\n project_id: Ref.pipe(Schema.annotateKey({ description: \"Project.\" })),\n user_id: Ref.pipe(Schema.annotateKey({ description: \"User who posted the update.\" })),\n body: Schema.String.pipe(Schema.annotateKey({ description: \"Update text in markdown.\" })),\n health: Schema.String.pipe(\n Schema.annotateKey({ description: \"Health: onTrack, atRisk, or offTrack.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Update URL.\" })),\n edited_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the update was last edited.\" }),\n ),\n comment_count: Long.pipe(Schema.annotateKey({ description: \"Comments on the update.\" })),\n})\n .annotate({ description: \"Linear project updates: status posts with a health.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ProjectUpdate = Schema.Schema.Type<typeof ProjectUpdateSchema>;\n\nexport const ProjectUpdateObjectSchema = ProjectUpdateSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const ProjectStatusSchema = Schema.Struct({\n ...common(\"Status\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Status name.\" })),\n type: Schema.String.pipe(\n Schema.annotateKey({\n description: \"Status type: backlog, planned, started, paused, completed, or canceled.\",\n }),\n ),\n color: Schema.String.pipe(Schema.annotateKey({ description: \"Color, as hex.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Description.\" })),\n position: Schema.Finite.pipe(Schema.annotateKey({ description: \"Order in the list.\" })),\n})\n .annotate({ description: \"Linear project statuses. Names the IDs in `projects.status_id`.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ProjectStatus = Schema.Schema.Type<typeof ProjectStatusSchema>;\n\nexport const ProjectStatusObjectSchema = ProjectStatusSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const ProjectLabelSchema = Schema.Struct({\n ...common(\"Label\"),\n _deleted: deleted(\"label\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Label name.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Label description.\" })),\n color: Schema.String.pipe(Schema.annotateKey({ description: \"Label color, as hex.\" })),\n is_group: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether the label groups other labels.\" }),\n ),\n parent_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Label group.\" })),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who made the label.\" })),\n retired_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the label was retired.\" }),\n ),\n})\n .annotate({ description: \"Linear project labels. Names the IDs in `projects.label_ids`.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ProjectLabel = Schema.Schema.Type<typeof ProjectLabelSchema>;\n\nexport const ProjectLabelObjectSchema = ProjectLabelSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const ProjectRelationSchema = Schema.Struct({\n ...common(\"Relation\"),\n type: Schema.String.pipe(\n Schema.annotateKey({ description: \"Relation type, such as dependency.\" }),\n ),\n project_id: Ref.pipe(Schema.annotateKey({ description: \"Project the relation starts from.\" })),\n project_milestone_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Milestone the relation starts from.\" }),\n ),\n anchor_type: Schema.String.pipe(\n Schema.annotateKey({ description: \"Which end of the project it starts from.\" }),\n ),\n related_project_id: Ref.pipe(Schema.annotateKey({ description: \"Related project.\" })),\n related_project_milestone_id: OptionalRef.pipe(\n Schema.annotateKey({ description: \"Related milestone.\" }),\n ),\n related_anchor_type: Schema.String.pipe(\n Schema.annotateKey({ description: \"Which end of the related project.\" }),\n ),\n user_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who made the relation.\" })),\n})\n .annotate({ description: \"Linear project dependencies. Deleted relations aren't seen.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ProjectRelation = Schema.Schema.Type<typeof ProjectRelationSchema>;\n\nexport const ProjectRelationObjectSchema = ProjectRelationSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n","import { Resource } from \"@useairfoil/connector-kit\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport {\n ProjectLabelObjectSchema,\n ProjectLabelSchema,\n ProjectMilestoneObjectSchema,\n ProjectMilestoneSchema,\n ProjectObjectSchema,\n ProjectRelationObjectSchema,\n ProjectRelationSchema,\n ProjectSchema,\n ProjectStatusObjectSchema,\n ProjectStatusSchema,\n ProjectUpdateObjectSchema,\n ProjectUpdateSchema,\n} from \"../schemas/projects\";\nimport {\n backfillList,\n changesList,\n checkList,\n listSources,\n listSpec,\n rowsOf,\n webhookList,\n} from \"./pages\";\n\nconst projectSpec = listSpec({\n connection: \"projects\",\n single: \"project\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name description content url icon color status_id: status { id } priority\n priority_label: priorityLabel health health_updated_at: healthUpdatedAt progress scope\n lead_id: lead { id } creator_id: creator { id }\n converted_from_issue_id: convertedFromIssue { id } start_date: startDate\n target_date: targetDate started_at: startedAt completed_at: completedAt\n canceled_at: canceledAt auto_archived_at: autoArchivedAt label_ids: labelIds\n team_ids: teams(first: 50) { nodes { id } } member_ids: members(first: 100) { nodes { id } }\n trashed`,\n item: ProjectObjectSchema,\n // Each project reads up to 150 teams and members, so pages stay under the cost limit.\n first: 50,\n updatedAt: (project) => project.updated_at,\n rows: rowsOf((project) => ({ ...project, version: project.updated_at, _deleted: false })),\n});\n\nexport const makeProjects = (client: LinearClientService) =>\n Resource.entity({\n name: \"projects\",\n rowSchema: ProjectSchema,\n version: \"version\",\n\n check: checkList(client, projectSpec),\n backfill: backfillList(client, projectSpec),\n changes: changesList(client, projectSpec),\n webhook: webhookList(client, projectSpec),\n });\n\nconst projectMilestoneSpec = listSpec({\n connection: \"projectMilestones\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name description project_id: project { id } target_date: targetDate status progress\n sort_order: sortOrder`,\n item: ProjectMilestoneObjectSchema,\n updatedAt: (milestone) => milestone.updated_at,\n rows: rowsOf((milestone) => ({ ...milestone, version: milestone.updated_at })),\n});\n\nexport const makeProjectMilestones = (client: LinearClientService) =>\n Resource.entity({\n name: \"project_milestones\",\n rowSchema: ProjectMilestoneSchema,\n version: \"version\",\n\n check: checkList(client, projectMilestoneSpec),\n backfill: backfillList(client, projectMilestoneSpec),\n changes: changesList(client, projectMilestoneSpec),\n });\n\nconst projectUpdateSpec = listSpec({\n connection: \"projectUpdates\",\n single: \"projectUpdate\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n project_id: project { id } user_id: user { id } body health url edited_at: editedAt\n comment_count: commentCount`,\n item: ProjectUpdateObjectSchema,\n updatedAt: (update) => update.updated_at,\n rows: rowsOf((update) => ({ ...update, version: update.updated_at, _deleted: false })),\n});\n\nexport const makeProjectUpdates = (client: LinearClientService) =>\n Resource.entity({\n name: \"project_updates\",\n rowSchema: ProjectUpdateSchema,\n version: \"version\",\n\n check: checkList(client, projectUpdateSpec),\n backfill: backfillList(client, projectUpdateSpec),\n changes: changesList(client, projectUpdateSpec),\n webhook: webhookList(client, projectUpdateSpec),\n });\n\nconst projectStatusSpec = listSpec({\n connection: \"projectStatuses\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt name type color description position`,\n item: ProjectStatusObjectSchema,\n updatedAt: (status) => status.updated_at,\n rows: rowsOf((status) => ({ ...status, version: status.updated_at })),\n});\n\nexport const makeProjectStatuses = (client: LinearClientService) =>\n Resource.entity({\n name: \"project_statuses\",\n rowSchema: ProjectStatusSchema,\n version: \"version\",\n ...listSources(client, projectStatusSpec),\n });\n\nconst projectLabelSpec = listSpec({\n connection: \"projectLabels\",\n single: \"projectLabel\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name description color is_group: isGroup parent_id: parent { id }\n creator_id: creator { id } retired_at: retiredAt`,\n item: ProjectLabelObjectSchema,\n updatedAt: (label) => label.updated_at,\n rows: rowsOf((label) => ({ ...label, version: label.updated_at, _deleted: false })),\n});\n\nexport const makeProjectLabels = (client: LinearClientService) =>\n Resource.entity({\n name: \"project_labels\",\n rowSchema: ProjectLabelSchema,\n version: \"version\",\n ...listSources(client, projectLabelSpec),\n webhook: webhookList(client, projectLabelSpec),\n });\n\nconst projectRelationSpec = listSpec({\n connection: \"projectRelations\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n type project_id: project { id } project_milestone_id: projectMilestone { id }\n anchor_type: anchorType related_project_id: relatedProject { id }\n related_project_milestone_id: relatedProjectMilestone { id }\n related_anchor_type: relatedAnchorType user_id: user { id }`,\n item: ProjectRelationObjectSchema,\n updatedAt: (relation) => relation.updated_at,\n rows: rowsOf((relation) => ({ ...relation, version: relation.updated_at })),\n});\n\nexport const makeProjectRelations = (client: LinearClientService) =>\n Resource.entity({\n name: \"project_relations\",\n rowSchema: ProjectRelationSchema,\n version: \"version\",\n\n check: checkList(client, projectRelationSpec),\n backfill: backfillList(client, projectRelationSpec),\n changes: changesList(client, projectRelationSpec),\n });\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { Schema, SchemaTransformation, Struct } from \"effect\";\n\nimport { Long, OptionalRef, OptionalString, OptionalTimestamp, Ref, common } from \"./shared\";\n\nexport const ReleaseSchema = Schema.Struct({\n ...common(\"Release\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Release name.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Description.\" })),\n // `version` is the row version, so the release's own version is renamed.\n release_version: OptionalString.pipe(\n Schema.annotateKey({ description: \"Version, such as 1.2.0.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Release URL.\" })),\n commit_sha: OptionalString.pipe(Schema.annotateKey({ description: \"Commit SHA.\" })),\n pipeline_id: Ref.pipe(Schema.annotateKey({ description: \"Release pipeline.\" })),\n stage_id: Ref.pipe(Schema.annotateKey({ description: \"Release stage.\" })),\n creator_id: OptionalRef.pipe(Schema.annotateKey({ description: \"User who made the release.\" })),\n start_date: OptionalString.pipe(\n Schema.annotateKey({ description: \"Start date, as YYYY-MM-DD.\" }),\n ),\n target_date: OptionalString.pipe(\n Schema.annotateKey({ description: \"Target date, as YYYY-MM-DD.\" }),\n ),\n started_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the release started.\" }),\n ),\n completed_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the release was completed.\" }),\n ),\n canceled_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the release was canceled.\" }),\n ),\n trashed: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the release is in the trash.\" }),\n ),\n})\n .annotate({ description: \"Linear releases. Needs the Business plan.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Release = Schema.Schema.Type<typeof ReleaseSchema>;\n\nexport const ReleaseObjectSchema = ReleaseSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const ReleaseNoteSchema = Schema.Struct({\n ...common(\"Release note\"),\n title: OptionalString.pipe(Schema.annotateKey({ description: \"Release note title.\" })),\n content: Schema.NullOr(Schema.Struct({ content: OptionalString })).pipe(\n Schema.decodeTo(\n OptionalString,\n SchemaTransformation.transform({\n decode: (document) => document?.content ?? null,\n encode: (content) => (content === null ? null : { content }),\n }),\n ),\n Schema.annotateKey({ description: \"Release note body in markdown.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Release note URL.\" })),\n pipeline_id: Ref.pipe(Schema.annotateKey({ description: \"Release pipeline.\" })),\n release_ids: Schema.Array(Ref).pipe(\n Schema.annotateKey({ description: \"Releases covered by the note.\" }),\n ),\n})\n .annotate({ description: \"Linear release notes. Needs the Business plan.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ReleaseNote = Schema.Schema.Type<typeof ReleaseNoteSchema>;\n\nexport const ReleaseNoteObjectSchema = ReleaseNoteSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const ReleasePipelineSchema = Schema.Struct({\n ...common(\"Pipeline\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Pipeline name.\" })),\n type: Schema.String.pipe(Schema.annotateKey({ description: \"Pipeline type.\" })),\n is_production: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether it releases to production.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Pipeline URL.\" })),\n include_path_patterns: Schema.Array(Schema.String).pipe(\n Schema.annotateKey({ description: \"File paths that count toward the pipeline.\" }),\n ),\n approximate_release_count: Long.pipe(\n Schema.annotateKey({ description: \"About how many releases it has.\" }),\n ),\n trashed: Schema.NullOr(Schema.Boolean).pipe(\n Schema.annotateKey({ description: \"Whether the pipeline is in the trash.\" }),\n ),\n})\n .annotate({ description: \"Linear release pipelines. Needs the Business plan.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ReleasePipeline = Schema.Schema.Type<typeof ReleasePipelineSchema>;\n\nexport const ReleasePipelineObjectSchema = ReleasePipelineSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const ReleaseStageSchema = Schema.Struct({\n ...common(\"Stage\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Stage name.\" })),\n type: Schema.String.pipe(Schema.annotateKey({ description: \"Stage type.\" })),\n color: Schema.String.pipe(Schema.annotateKey({ description: \"Color, as hex.\" })),\n position: Schema.Finite.pipe(Schema.annotateKey({ description: \"Order in the pipeline.\" })),\n frozen: Schema.Boolean.pipe(Schema.annotateKey({ description: \"Whether the stage is frozen.\" })),\n pipeline_id: Ref.pipe(Schema.annotateKey({ description: \"Release pipeline.\" })),\n})\n .annotate({ description: \"Linear release stages. Needs the Business plan.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ReleaseStage = Schema.Schema.Type<typeof ReleaseStageSchema>;\n\nexport const ReleaseStageObjectSchema = ReleaseStageSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const IssueToReleaseSchema = Schema.Struct({\n ...common(\"Link\"),\n issue_id: Ref.pipe(Schema.annotateKey({ description: \"Issue.\" })),\n release_id: Ref.pipe(Schema.annotateKey({ description: \"Release.\" })),\n})\n .annotate({ description: \"Links between Linear issues and releases. Needs the Business plan.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type IssueToRelease = Schema.Schema.Type<typeof IssueToReleaseSchema>;\n\nexport const IssueToReleaseObjectSchema = IssueToReleaseSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n","import { Resource } from \"@useairfoil/connector-kit\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport {\n IssueToReleaseObjectSchema,\n IssueToReleaseSchema,\n ReleaseNoteObjectSchema,\n ReleaseNoteSchema,\n ReleaseObjectSchema,\n ReleasePipelineObjectSchema,\n ReleasePipelineSchema,\n ReleaseSchema,\n ReleaseStageObjectSchema,\n ReleaseStageSchema,\n} from \"../schemas/releases\";\nimport { backfillList, changesList, checkList, listSources, listSpec, rowsOf } from \"./pages\";\n\nconst releaseSpec = listSpec({\n connection: \"releases\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name description release_version: version url commit_sha: commitSha\n pipeline_id: pipeline { id } stage_id: stage { id } creator_id: creator { id }\n start_date: startDate target_date: targetDate started_at: startedAt\n completed_at: completedAt canceled_at: canceledAt trashed`,\n item: ReleaseObjectSchema,\n updatedAt: (release) => release.updated_at,\n rows: rowsOf((release) => ({ ...release, version: release.updated_at })),\n});\n\nexport const makeReleases = (client: LinearClientService) =>\n Resource.entity({\n name: \"releases\",\n rowSchema: ReleaseSchema,\n version: \"version\",\n\n check: checkList(client, releaseSpec),\n backfill: backfillList(client, releaseSpec),\n changes: changesList(client, releaseSpec),\n });\n\nconst releaseNoteSpec = listSpec({\n connection: \"releaseNotes\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n title content: documentContent { content } url pipeline_id: pipeline { id }\n release_ids: releases { id }`,\n item: ReleaseNoteObjectSchema,\n updatedAt: (note) => note.updated_at,\n rows: rowsOf((note) => ({ ...note, version: note.updated_at })),\n});\n\nexport const makeReleaseNotes = (client: LinearClientService) =>\n Resource.entity({\n name: \"release_notes\",\n rowSchema: ReleaseNoteSchema,\n version: \"version\",\n\n check: checkList(client, releaseNoteSpec),\n backfill: backfillList(client, releaseNoteSpec),\n changes: changesList(client, releaseNoteSpec),\n });\n\nconst releasePipelineSpec = listSpec({\n connection: \"releasePipelines\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name type is_production: isProduction url include_path_patterns: includePathPatterns\n approximate_release_count: approximateReleaseCount trashed`,\n item: ReleasePipelineObjectSchema,\n updatedAt: (pipeline) => pipeline.updated_at,\n rows: rowsOf((pipeline) => ({ ...pipeline, version: pipeline.updated_at })),\n});\n\nexport const makeReleasePipelines = (client: LinearClientService) =>\n Resource.entity({\n name: \"release_pipelines\",\n rowSchema: ReleasePipelineSchema,\n version: \"version\",\n ...listSources(client, releasePipelineSpec),\n });\n\nconst releaseStageSpec = listSpec({\n connection: \"releaseStages\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt name type color position frozen pipeline_id: pipeline { id }`,\n item: ReleaseStageObjectSchema,\n updatedAt: (stage) => stage.updated_at,\n rows: rowsOf((stage) => ({ ...stage, version: stage.updated_at })),\n});\n\nexport const makeReleaseStages = (client: LinearClientService) =>\n Resource.entity({\n name: \"release_stages\",\n rowSchema: ReleaseStageSchema,\n version: \"version\",\n ...listSources(client, releaseStageSpec),\n });\n\nconst issueToReleaseSpec = listSpec({\n connection: \"issueToReleases\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt issue_id: issue { id } release_id: release { id }`,\n item: IssueToReleaseObjectSchema,\n updatedAt: (link) => link.updated_at,\n rows: rowsOf((link) => ({ ...link, version: link.updated_at })),\n});\n\nexport const makeIssueToReleases = (client: LinearClientService) =>\n Resource.entity({\n name: \"issue_to_releases\",\n rowSchema: IssueToReleaseSchema,\n version: \"version\",\n\n check: checkList(client, issueToReleaseSpec),\n backfill: backfillList(client, issueToReleaseSpec),\n changes: changesList(client, issueToReleaseSpec),\n });\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { Schema, Struct } from \"effect\";\n\nimport {\n OptionalRef,\n OptionalString,\n OptionalTimestamp,\n Ref,\n Timestamp,\n common,\n deleted,\n} from \"./shared\";\n\nexport const TeamSchema = Schema.Struct({\n ...common(\"Team\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Team name.\" })),\n key: Schema.String.pipe(\n Schema.annotateKey({ description: \"Team key, used in issue IDs such as ENG-123.\" }),\n ),\n display_name: Schema.String.pipe(Schema.annotateKey({ description: \"Name shown in Linear.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Team description.\" })),\n visibility: Schema.String.pipe(Schema.annotateKey({ description: \"Who can see the team.\" })),\n parent_id: OptionalRef.pipe(Schema.annotateKey({ description: \"Parent team.\" })),\n timezone: Schema.String.pipe(Schema.annotateKey({ description: \"Team timezone.\" })),\n cycles_enabled: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether the team uses cycles.\" }),\n ),\n cycle_duration: Schema.Finite.pipe(Schema.annotateKey({ description: \"Cycle length in weeks.\" })),\n cycle_cooldown_time: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"Weeks between cycles.\" }),\n ),\n cycle_start_day: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"Day cycles start, 0 for Sunday.\" }),\n ),\n triage_enabled: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether the team uses triage.\" }),\n ),\n issue_estimation_type: Schema.String.pipe(Schema.annotateKey({ description: \"Estimate scale.\" })),\n default_issue_estimate: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"Default estimate.\" }),\n ),\n auto_archive_period: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"Months before closed issues are archived.\" }),\n ),\n auto_close_period: Schema.NullOr(Schema.Finite).pipe(\n Schema.annotateKey({ description: \"Months before stale issues are closed.\" }),\n ),\n retired_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the team was retired.\" }),\n ),\n})\n .annotate({ description: \"Linear teams.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Team = Schema.Schema.Type<typeof TeamSchema>;\n\nexport const TeamObjectSchema = TeamSchema.mapFields((fields) => Struct.omit(fields, [\"version\"]));\n\nexport const TeamMembershipSchema = Schema.Struct({\n ...common(\"Membership\"),\n team_id: Ref.pipe(Schema.annotateKey({ description: \"Team.\" })),\n user_id: Ref.pipe(Schema.annotateKey({ description: \"User.\" })),\n owner: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether the user owns the team.\" }),\n ),\n})\n .annotate({ description: \"Linear team members. Removed members aren't seen.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type TeamMembership = Schema.Schema.Type<typeof TeamMembershipSchema>;\n\nexport const TeamMembershipObjectSchema = TeamMembershipSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const WorkflowStateSchema = Schema.Struct({\n ...common(\"Workflow state\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"State name.\" })),\n type: Schema.String.pipe(\n Schema.annotateKey({\n description: \"State type: triage, backlog, unstarted, started, completed, or canceled.\",\n }),\n ),\n color: Schema.String.pipe(Schema.annotateKey({ description: \"State color, as hex.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"State description.\" })),\n position: Schema.Finite.pipe(Schema.annotateKey({ description: \"Order within the team.\" })),\n team_id: Ref.pipe(Schema.annotateKey({ description: \"Team.\" })),\n})\n .annotate({ description: \"Linear workflow states. Names the IDs in `issues.state_id`.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type WorkflowState = Schema.Schema.Type<typeof WorkflowStateSchema>;\n\nexport const WorkflowStateObjectSchema = WorkflowStateSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const UserSchema = Schema.Struct({\n ...common(\"User\"),\n _deleted: deleted(\"user\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Full name.\" })),\n display_name: Schema.String.pipe(Schema.annotateKey({ description: \"Display name.\" })),\n email: Schema.String.pipe(Schema.annotateKey({ description: \"Email address.\" })),\n avatar_url: OptionalString.pipe(Schema.annotateKey({ description: \"Avatar image URL.\" })),\n title: OptionalString.pipe(Schema.annotateKey({ description: \"Job title.\" })),\n timezone: OptionalString.pipe(Schema.annotateKey({ description: \"Timezone.\" })),\n active: Schema.Boolean.pipe(Schema.annotateKey({ description: \"Whether the user is active.\" })),\n admin: Schema.Boolean.pipe(Schema.annotateKey({ description: \"Whether the user is an admin.\" })),\n owner: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether the user owns the workspace.\" }),\n ),\n guest: Schema.Boolean.pipe(Schema.annotateKey({ description: \"Whether the user is a guest.\" })),\n app: Schema.Boolean.pipe(\n Schema.annotateKey({ description: \"Whether the user is an app or agent.\" }),\n ),\n last_seen: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the user was last online.\" }),\n ),\n url: Schema.String.pipe(Schema.annotateKey({ description: \"Profile URL.\" })),\n})\n .annotate({ description: \"Linear users.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type User = Schema.Schema.Type<typeof UserSchema>;\n\nexport const UserObjectSchema = UserSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n\nexport const ExternalUserSchema = Schema.Struct({\n ...common(\"External user\"),\n name: Schema.String.pipe(Schema.annotateKey({ description: \"Name.\" })),\n display_name: Schema.String.pipe(Schema.annotateKey({ description: \"Display name.\" })),\n email: OptionalString.pipe(Schema.annotateKey({ description: \"Email address.\" })),\n avatar_url: OptionalString.pipe(Schema.annotateKey({ description: \"Avatar image URL.\" })),\n last_seen: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the user was last seen.\" }),\n ),\n})\n .annotate({\n description: \"People from integrations, such as Slack, who create issues and comments.\",\n })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ExternalUser = Schema.Schema.Type<typeof ExternalUserSchema>;\n\nexport const ExternalUserObjectSchema = ExternalUserSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\"]),\n);\n\nexport const CycleSchema = Schema.Struct({\n ...common(\"Cycle\"),\n _deleted: deleted(\"cycle\"),\n number: Schema.Finite.pipe(Schema.annotateKey({ description: \"Cycle number within its team.\" })),\n name: OptionalString.pipe(Schema.annotateKey({ description: \"Cycle name.\" })),\n description: OptionalString.pipe(Schema.annotateKey({ description: \"Cycle description.\" })),\n team_id: Ref.pipe(Schema.annotateKey({ description: \"Team.\" })),\n starts_at: Timestamp.pipe(Schema.annotateKey({ description: \"Time the cycle starts.\" })),\n ends_at: Timestamp.pipe(Schema.annotateKey({ description: \"Time the cycle ends.\" })),\n completed_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the cycle was completed.\" }),\n ),\n auto_archived_at: OptionalTimestamp.pipe(\n Schema.annotateKey({ description: \"Time the cycle was archived automatically.\" }),\n ),\n progress: Schema.Finite.pipe(\n Schema.annotateKey({ description: \"Share of the scope completed, from 0 to 1.\" }),\n ),\n})\n .annotate({ description: \"Linear cycles.\" })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Cycle = Schema.Schema.Type<typeof CycleSchema>;\n\nexport const CycleObjectSchema = CycleSchema.mapFields((fields) =>\n Struct.omit(fields, [\"version\", \"_deleted\"]),\n);\n","import { Resource } from \"@useairfoil/connector-kit\";\n\nimport type { LinearClientService } from \"../client/client\";\n\nimport {\n CycleObjectSchema,\n CycleSchema,\n ExternalUserObjectSchema,\n ExternalUserSchema,\n TeamMembershipObjectSchema,\n TeamMembershipSchema,\n TeamObjectSchema,\n TeamSchema,\n UserObjectSchema,\n UserSchema,\n WorkflowStateObjectSchema,\n WorkflowStateSchema,\n} from \"../schemas/teams\";\nimport {\n backfillList,\n changesList,\n checkList,\n listSources,\n listSpec,\n rowsOf,\n webhookList,\n} from \"./pages\";\n\nconst teamSpec = listSpec({\n connection: \"teams\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name key display_name: displayName description visibility parent_id: parent { id }\n timezone cycles_enabled: cyclesEnabled cycle_duration: cycleDuration\n cycle_cooldown_time: cycleCooldownTime cycle_start_day: cycleStartDay\n triage_enabled: triageEnabled issue_estimation_type: issueEstimationType\n default_issue_estimate: defaultIssueEstimate auto_archive_period: autoArchivePeriod\n auto_close_period: autoClosePeriod retired_at: retiredAt`,\n item: TeamObjectSchema,\n updatedAt: (team) => team.updated_at,\n rows: rowsOf((team) => ({ ...team, version: team.updated_at })),\n});\n\nexport const makeTeams = (client: LinearClientService) =>\n Resource.entity({\n name: \"teams\",\n rowSchema: TeamSchema,\n version: \"version\",\n ...listSources(client, teamSpec),\n });\n\nconst teamMembershipSpec = listSpec({\n connection: \"teamMemberships\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt team_id: team { id } user_id: user { id } owner`,\n item: TeamMembershipObjectSchema,\n updatedAt: (membership) => membership.updated_at,\n rows: rowsOf((membership) => ({ ...membership, version: membership.updated_at })),\n});\n\nexport const makeTeamMemberships = (client: LinearClientService) =>\n Resource.entity({\n name: \"team_memberships\",\n rowSchema: TeamMembershipSchema,\n version: \"version\",\n ...listSources(client, teamMembershipSpec),\n });\n\nconst workflowStateSpec = listSpec({\n connection: \"workflowStates\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt name type color description position team_id: team { id }`,\n item: WorkflowStateObjectSchema,\n updatedAt: (state) => state.updated_at,\n rows: rowsOf((state) => ({ ...state, version: state.updated_at })),\n});\n\nexport const makeWorkflowStates = (client: LinearClientService) =>\n Resource.entity({\n name: \"workflow_states\",\n rowSchema: WorkflowStateSchema,\n version: \"version\",\n ...listSources(client, workflowStateSpec),\n });\n\nconst userSpec = listSpec({\n connection: \"users\",\n single: \"user\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n name display_name: displayName email avatar_url: avatarUrl title timezone\n active admin owner guest app last_seen: lastSeen url`,\n item: UserObjectSchema,\n updatedAt: (user) => user.updated_at,\n rows: rowsOf((user) => ({ ...user, version: user.updated_at, _deleted: false })),\n});\n\nexport const makeUsers = (client: LinearClientService) =>\n Resource.entity({\n name: \"users\",\n rowSchema: UserSchema,\n version: \"version\",\n ...listSources(client, userSpec),\n webhook: webhookList(client, userSpec),\n });\n\nconst externalUserSpec = listSpec({\n connection: \"externalUsers\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt name display_name: displayName email avatar_url: avatarUrl last_seen: lastSeen`,\n item: ExternalUserObjectSchema,\n updatedAt: (user) => user.updated_at,\n rows: rowsOf((user) => ({ ...user, version: user.updated_at })),\n});\n\nexport const makeExternalUsers = (client: LinearClientService) =>\n Resource.entity({\n name: \"external_users\",\n rowSchema: ExternalUserSchema,\n version: \"version\",\n ...listSources(client, externalUserSpec),\n });\n\nconst cycleSpec = listSpec({\n connection: \"cycles\",\n single: \"cycle\",\n fields: `id created_at: createdAt updated_at: updatedAt archived_at: archivedAt\n number name description team_id: team { id } starts_at: startsAt ends_at: endsAt\n completed_at: completedAt auto_archived_at: autoArchivedAt progress`,\n item: CycleObjectSchema,\n updatedAt: (cycle) => cycle.updated_at,\n rows: rowsOf((cycle) => ({ ...cycle, version: cycle.updated_at, _deleted: false })),\n});\n\nexport const makeCycles = (client: LinearClientService) =>\n Resource.entity({\n name: \"cycles\",\n rowSchema: CycleSchema,\n version: \"version\",\n\n check: checkList(client, cycleSpec),\n backfill: backfillList(client, cycleSpec),\n changes: changesList(client, cycleSpec),\n webhook: webhookList(client, cycleSpec),\n });\n","import { ConnectorError } from \"@useairfoil/connector-kit\";\nimport { DateTime, Effect } from \"effect\";\nimport { createHmac, timingSafeEqual } from \"node:crypto\";\n\n// Linear suggests rejecting deliveries more than a minute old, to stop replays.\nconst maxAgeMillis = 60_000;\n\nexport const verifySignature = (options: {\n readonly rawBody: Uint8Array;\n readonly header: string | undefined;\n readonly secret: string;\n /** `webhookTimestamp` from the body, in milliseconds. */\n readonly timestamp: number | undefined;\n}): Effect.Effect<void, ConnectorError> =>\n Effect.gen(function* () {\n const expected = createHmac(\"sha256\", options.secret).update(options.rawBody).digest();\n const provided = Buffer.from(options.header ?? \"\", \"hex\");\n if (provided.length !== expected.length || !timingSafeEqual(provided, expected)) {\n return yield* new ConnectorError({ message: \"Invalid Linear webhook signature\" });\n }\n const now = yield* DateTime.nowAsDate;\n if (\n options.timestamp === undefined ||\n Math.abs(now.getTime() - options.timestamp) > maxAgeMillis\n ) {\n return yield* new ConnectorError({ message: \"Linear webhook is too old\" });\n }\n });\n","import { type ResourceDefinition, Webhook } from \"@useairfoil/connector-kit\";\nimport { Effect, Result, Schema } from \"effect\";\nimport { HttpServerResponse } from \"effect/http\";\n\nimport { verifySignature } from \"./signature\";\n\nexport const webhookPath = \"/webhooks/linear\";\n\nconst WebhookEventSchema = Schema.Struct({\n type: Schema.String,\n action: Schema.String,\n webhookTimestamp: Schema.Number,\n data: Schema.Struct({ id: Schema.String }),\n});\n\nexport const makeWebhookRoute = (options: {\n readonly secret: string;\n /** Resources by the event's `type`, such as `Issue`. */\n readonly targets: ReadonlyMap<string, ResourceDefinition>;\n readonly issueHistory: ResourceDefinition;\n}) =>\n Webhook.route({\n path: webhookPath,\n ackMode: \"after-enqueue\",\n schema: WebhookEventSchema,\n handler: ({ request, rawBody, payload, to }) =>\n Effect.gen(function* () {\n const verified = yield* verifySignature({\n rawBody,\n header: request.headers[\"linear-signature\"],\n secret: options.secret,\n timestamp: payload.webhookTimestamp,\n }).pipe(Effect.result);\n if (Result.isFailure(verified)) {\n return HttpServerResponse.jsonUnsafe(\n { ok: false, error: verified.failure.message },\n { status: 401 },\n );\n }\n\n // Polling reads creates and updates.\n const resource = options.targets.get(payload.type);\n if (payload.action === \"remove\" || payload.action === \"restore\") {\n if (resource !== undefined) yield* to(resource, payload);\n if (payload.type === \"Issue\") yield* to(options.issueHistory, payload);\n }\n\n return HttpServerResponse.jsonUnsafe({ ok: true });\n }),\n });\n","import { Connector, type ResourceDefinition } from \"@useairfoil/connector-kit\";\nimport { Config, Context, Effect, Layer, Redacted } from \"effect\";\n\nimport type { LinearConfig } from \"./manifest\";\n\nimport * as LinearClient from \"./client/client\";\nimport { makeComments } from \"./resources/comments\";\nimport {\n makeCustomerNeeds,\n makeCustomerStatuses,\n makeCustomerTiers,\n makeCustomers,\n} from \"./resources/customers\";\nimport { makeDocuments } from \"./resources/documents\";\nimport {\n makeInitiativeLabels,\n makeInitiativeRelations,\n makeInitiativeToProjects,\n makeInitiativeUpdates,\n makeInitiatives,\n} from \"./resources/initiatives\";\nimport { makeIssueHistory } from \"./resources/issue-history\";\nimport {\n makeAttachments,\n makeIssueLabels,\n makeIssueRelations,\n makeIssues,\n} from \"./resources/issues\";\nimport {\n makeProjectLabels,\n makeProjectMilestones,\n makeProjectRelations,\n makeProjectStatuses,\n makeProjectUpdates,\n makeProjects,\n} from \"./resources/projects\";\nimport {\n makeIssueToReleases,\n makeReleaseNotes,\n makeReleasePipelines,\n makeReleaseStages,\n makeReleases,\n} from \"./resources/releases\";\nimport {\n makeCycles,\n makeExternalUsers,\n makeTeamMemberships,\n makeTeams,\n makeUsers,\n makeWorkflowStates,\n} from \"./resources/teams\";\nimport { makeWebhookRoute } from \"./webhook/route\";\nexport { LinearConfigDef, manifest } from \"./manifest\";\nexport type { LinearConfig } from \"./manifest\";\n\nexport const make = Effect.fnUntraced(function* (config: LinearConfig) {\n const client = yield* LinearClient.LinearClient;\n\n const Issues = makeIssues(client);\n const IssueHistory = makeIssueHistory(client);\n const Comments = makeComments(client);\n const Attachments = makeAttachments(client);\n const IssueLabels = makeIssueLabels(client);\n const Users = makeUsers(client);\n const Cycles = makeCycles(client);\n const Projects = makeProjects(client);\n const ProjectUpdates = makeProjectUpdates(client);\n const ProjectLabels = makeProjectLabels(client);\n const Initiatives = makeInitiatives(client);\n const InitiativeUpdates = makeInitiativeUpdates(client);\n const Documents = makeDocuments(client);\n const Customers = makeCustomers(client);\n const CustomerNeeds = makeCustomerNeeds(client);\n\n return Connector.define({\n name: \"producer-linear\",\n title: \"Linear\",\n resources: [\n Issues,\n IssueHistory,\n Comments,\n makeIssueRelations(client),\n Attachments,\n IssueLabels,\n makeWorkflowStates(client),\n makeTeams(client),\n makeTeamMemberships(client),\n Users,\n makeExternalUsers(client),\n Cycles,\n Projects,\n makeProjectMilestones(client),\n ProjectUpdates,\n makeProjectStatuses(client),\n ProjectLabels,\n makeProjectRelations(client),\n Initiatives,\n InitiativeUpdates,\n makeInitiativeLabels(client),\n makeInitiativeRelations(client),\n makeInitiativeToProjects(client),\n Documents,\n Customers,\n CustomerNeeds,\n makeCustomerStatuses(client),\n makeCustomerTiers(client),\n makeReleases(client),\n makeReleaseNotes(client),\n makeReleasePipelines(client),\n makeReleaseStages(client),\n makeIssueToReleases(client),\n ],\n webhooks: [\n makeWebhookRoute({\n secret: Redacted.value(config.webhookSecret),\n issueHistory: IssueHistory,\n // Release webhooks need the Business plan.\n targets: new Map<string, ResourceDefinition>([\n [\"Issue\", Issues],\n [\"Comment\", Comments],\n [\"Attachment\", Attachments],\n [\"IssueLabel\", IssueLabels],\n [\"User\", Users],\n [\"Cycle\", Cycles],\n [\"Project\", Projects],\n [\"ProjectUpdate\", ProjectUpdates],\n [\"ProjectLabel\", ProjectLabels],\n [\"Initiative\", Initiatives],\n [\"InitiativeUpdate\", InitiativeUpdates],\n [\"Document\", Documents],\n [\"Customer\", Customers],\n [\"CustomerNeed\", CustomerNeeds],\n ]),\n }),\n ],\n });\n});\n\nexport type LinearConnectorRuntime = Effect.Success<ReturnType<typeof make>>;\n\nexport class LinearConnector extends Context.Service<LinearConnector, LinearConnectorRuntime>()(\n \"@useairfoil/producer-linear/LinearConnector\",\n) {}\n\nexport const layer = (config: LinearConfig) =>\n Layer.effect(LinearConnector)(\n make(config).pipe(Effect.annotateLogs({ component: \"linear\" })),\n ).pipe(Layer.provide(LinearClient.layer(config)));\n\nexport const layerConfig = (config: Config.Wrap<LinearConfig>) =>\n Layer.unwrap(Config.unwrap(config).pipe(Effect.map(layer)));\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,50 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useairfoil/producer-linear",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"repository": "useairfoil/connector-kit",
|
|
5
|
+
"files": [
|
|
6
|
+
"dist",
|
|
7
|
+
"src",
|
|
8
|
+
"README.md"
|
|
9
|
+
],
|
|
10
|
+
"type": "module",
|
|
11
|
+
"main": "./dist/index.mjs",
|
|
12
|
+
"types": "./dist/index.d.mts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.mts",
|
|
16
|
+
"import": "./dist/index.mjs",
|
|
17
|
+
"default": "./dist/index.mjs"
|
|
18
|
+
},
|
|
19
|
+
"./manifest": {
|
|
20
|
+
"types": "./dist/manifest.d.mts",
|
|
21
|
+
"import": "./dist/manifest.mjs",
|
|
22
|
+
"default": "./dist/manifest.mjs"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@effect/platform-node": "^4.1.0",
|
|
27
|
+
"@effect/sql-pg": "^4.1.0",
|
|
28
|
+
"effect": "^4.1.0",
|
|
29
|
+
"@useairfoil/connector-kit": "0.7.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@dotenvx/dotenvx": "^1.62.0",
|
|
33
|
+
"@effect/vitest": "^4.1.0",
|
|
34
|
+
"@types/node": "^24.2.0",
|
|
35
|
+
"tsdown": "^0.23.0",
|
|
36
|
+
"tsx": "^4.21.0",
|
|
37
|
+
"vitest": "^5.0.3",
|
|
38
|
+
"@useairfoil/effect-vcr": "0.4.9"
|
|
39
|
+
},
|
|
9
40
|
"scripts": {
|
|
10
|
-
"
|
|
41
|
+
"build": "tsdown",
|
|
42
|
+
"docker:build": "docker build --load --file Dockerfile --tag airfoil/producer-linear:local ../..",
|
|
43
|
+
"start": "tsx --env-file=.env src/main.ts start",
|
|
44
|
+
"sandbox": "tsx --env-file=.env src/main.ts sandbox",
|
|
45
|
+
"demo": "tsx src/main.ts demo",
|
|
46
|
+
"test": "dotenvx run --ignore=MISSING_ENV_FILE --quiet -- vitest",
|
|
47
|
+
"test:ci": "dotenvx run --ignore=MISSING_ENV_FILE --quiet -- vitest run",
|
|
48
|
+
"typecheck": "tsc --noEmit"
|
|
11
49
|
}
|
|
12
|
-
}
|
|
50
|
+
}
|