digital-tools 2.1.3 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +19 -0
  3. package/README.md +2 -0
  4. package/dist/client.d.ts +109 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +69 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/define.d.ts +2 -2
  9. package/dist/define.d.ts.map +1 -1
  10. package/dist/define.js +21 -11
  11. package/dist/define.js.map +1 -1
  12. package/dist/function-ref.d.ts +229 -0
  13. package/dist/function-ref.d.ts.map +1 -0
  14. package/dist/function-ref.js +28 -0
  15. package/dist/function-ref.js.map +1 -0
  16. package/dist/function-sugar.d.ts +57 -0
  17. package/dist/function-sugar.d.ts.map +1 -0
  18. package/dist/function-sugar.js +79 -0
  19. package/dist/function-sugar.js.map +1 -0
  20. package/dist/index.d.ts +10 -3
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +24 -4
  23. package/dist/index.js.map +1 -1
  24. package/dist/providers/analytics/mixpanel.d.ts.map +1 -1
  25. package/dist/providers/analytics/mixpanel.js +21 -18
  26. package/dist/providers/analytics/mixpanel.js.map +1 -1
  27. package/dist/providers/calendar/cal-com.d.ts.map +1 -1
  28. package/dist/providers/calendar/cal-com.js +10 -10
  29. package/dist/providers/calendar/cal-com.js.map +1 -1
  30. package/dist/providers/calendar/google-calendar.d.ts.map +1 -1
  31. package/dist/providers/calendar/google-calendar.js +4 -4
  32. package/dist/providers/calendar/google-calendar.js.map +1 -1
  33. package/dist/providers/crm/hubspot.d.ts.map +1 -1
  34. package/dist/providers/crm/hubspot.js +107 -85
  35. package/dist/providers/crm/hubspot.js.map +1 -1
  36. package/dist/providers/development/github.d.ts.map +1 -1
  37. package/dist/providers/development/github.js +40 -43
  38. package/dist/providers/development/github.js.map +1 -1
  39. package/dist/providers/ecommerce/shopify.d.ts.map +1 -1
  40. package/dist/providers/ecommerce/shopify.js +79 -62
  41. package/dist/providers/ecommerce/shopify.js.map +1 -1
  42. package/dist/providers/email/resend.d.ts.map +1 -1
  43. package/dist/providers/email/resend.js +20 -16
  44. package/dist/providers/email/resend.js.map +1 -1
  45. package/dist/providers/email/sendgrid.d.ts.map +1 -1
  46. package/dist/providers/email/sendgrid.js +12 -9
  47. package/dist/providers/email/sendgrid.js.map +1 -1
  48. package/dist/providers/finance/stripe.d.ts.map +1 -1
  49. package/dist/providers/finance/stripe.js +44 -42
  50. package/dist/providers/finance/stripe.js.map +1 -1
  51. package/dist/providers/forms/typeform.d.ts.map +1 -1
  52. package/dist/providers/forms/typeform.js +68 -58
  53. package/dist/providers/forms/typeform.js.map +1 -1
  54. package/dist/providers/knowledge/notion.d.ts.map +1 -1
  55. package/dist/providers/knowledge/notion.js +75 -41
  56. package/dist/providers/knowledge/notion.js.map +1 -1
  57. package/dist/providers/marketing/mailchimp.d.ts.map +1 -1
  58. package/dist/providers/marketing/mailchimp.js +74 -61
  59. package/dist/providers/marketing/mailchimp.js.map +1 -1
  60. package/dist/providers/media/cloudinary.d.ts.map +1 -1
  61. package/dist/providers/media/cloudinary.js +30 -28
  62. package/dist/providers/media/cloudinary.js.map +1 -1
  63. package/dist/providers/messaging/slack.d.ts.map +1 -1
  64. package/dist/providers/messaging/slack.js +75 -58
  65. package/dist/providers/messaging/slack.js.map +1 -1
  66. package/dist/providers/messaging/twilio-sms.d.ts.map +1 -1
  67. package/dist/providers/messaging/twilio-sms.js +33 -15
  68. package/dist/providers/messaging/twilio-sms.js.map +1 -1
  69. package/dist/providers/project-management/linear.d.ts.map +1 -1
  70. package/dist/providers/project-management/linear.js +31 -27
  71. package/dist/providers/project-management/linear.js.map +1 -1
  72. package/dist/providers/spreadsheet/google-sheets.d.ts.map +1 -1
  73. package/dist/providers/spreadsheet/google-sheets.js +21 -18
  74. package/dist/providers/spreadsheet/google-sheets.js.map +1 -1
  75. package/dist/providers/spreadsheet/xlsx.d.ts.map +1 -1
  76. package/dist/providers/spreadsheet/xlsx.js +4 -4
  77. package/dist/providers/spreadsheet/xlsx.js.map +1 -1
  78. package/dist/providers/storage/index.js +1 -0
  79. package/dist/providers/storage/index.js.map +1 -1
  80. package/dist/providers/storage/s3.d.ts.map +1 -1
  81. package/dist/providers/storage/s3.js +36 -27
  82. package/dist/providers/storage/s3.js.map +1 -1
  83. package/dist/providers/support/zendesk.d.ts.map +1 -1
  84. package/dist/providers/support/zendesk.js +24 -25
  85. package/dist/providers/support/zendesk.js.map +1 -1
  86. package/dist/providers/tasks/todoist.d.ts.map +1 -1
  87. package/dist/providers/tasks/todoist.js +18 -18
  88. package/dist/providers/tasks/todoist.js.map +1 -1
  89. package/dist/providers/video-conferencing/google-meet.d.ts.map +1 -1
  90. package/dist/providers/video-conferencing/google-meet.js +11 -11
  91. package/dist/providers/video-conferencing/google-meet.js.map +1 -1
  92. package/dist/providers/video-conferencing/jitsi.js +14 -14
  93. package/dist/providers/video-conferencing/jitsi.js.map +1 -1
  94. package/dist/providers/video-conferencing/teams.d.ts.map +1 -1
  95. package/dist/providers/video-conferencing/teams.js +9 -7
  96. package/dist/providers/video-conferencing/teams.js.map +1 -1
  97. package/dist/providers/video-conferencing/zoom.d.ts.map +1 -1
  98. package/dist/providers/video-conferencing/zoom.js +26 -24
  99. package/dist/providers/video-conferencing/zoom.js.map +1 -1
  100. package/dist/tools/data.d.ts.map +1 -1
  101. package/dist/tools/data.js +5 -12
  102. package/dist/tools/data.js.map +1 -1
  103. package/dist/tools/index.d.ts +1 -0
  104. package/dist/tools/index.d.ts.map +1 -1
  105. package/dist/tools/index.js +1 -0
  106. package/dist/tools/index.js.map +1 -1
  107. package/dist/tools/system.d.ts +289 -0
  108. package/dist/tools/system.d.ts.map +1 -0
  109. package/dist/tools/system.js +752 -0
  110. package/dist/tools/system.js.map +1 -0
  111. package/dist/tools/web.d.ts.map +1 -1
  112. package/dist/tools/web.js +22 -10
  113. package/dist/tools/web.js.map +1 -1
  114. package/dist/track-record.d.ts +101 -0
  115. package/dist/track-record.d.ts.map +1 -0
  116. package/dist/track-record.js +17 -0
  117. package/dist/track-record.js.map +1 -0
  118. package/dist/types.d.ts +210 -9
  119. package/dist/types.d.ts.map +1 -1
  120. package/dist/verb-registration.d.ts +122 -0
  121. package/dist/verb-registration.d.ts.map +1 -0
  122. package/dist/verb-registration.js +176 -0
  123. package/dist/verb-registration.js.map +1 -0
  124. package/dist/worker.d.ts +93 -0
  125. package/dist/worker.d.ts.map +1 -0
  126. package/dist/worker.js +315 -0
  127. package/dist/worker.js.map +1 -0
  128. package/dist/wrap.d.ts +89 -0
  129. package/dist/wrap.d.ts.map +1 -0
  130. package/dist/wrap.js +225 -0
  131. package/dist/wrap.js.map +1 -0
  132. package/package.json +31 -14
  133. package/src/client.ts +136 -0
  134. package/src/define.ts +30 -24
  135. package/src/function-ref.ts +264 -0
  136. package/src/function-sugar.ts +134 -0
  137. package/src/index.ts +132 -10
  138. package/src/providers/analytics/mixpanel.ts +19 -18
  139. package/src/providers/calendar/cal-com.ts +29 -18
  140. package/src/providers/calendar/google-calendar.ts +20 -14
  141. package/src/providers/crm/hubspot.ts +225 -99
  142. package/src/providers/development/github.ts +206 -135
  143. package/src/providers/ecommerce/shopify.ts +250 -89
  144. package/src/providers/email/resend.ts +101 -28
  145. package/src/providers/email/sendgrid.ts +12 -9
  146. package/src/providers/finance/stripe.ts +128 -49
  147. package/src/providers/forms/typeform.ts +74 -58
  148. package/src/providers/knowledge/notion.ts +340 -88
  149. package/src/providers/marketing/mailchimp.ts +86 -70
  150. package/src/providers/media/cloudinary.ts +99 -41
  151. package/src/providers/messaging/slack.ts +283 -85
  152. package/src/providers/messaging/twilio-sms.ts +35 -15
  153. package/src/providers/project-management/linear.ts +143 -55
  154. package/src/providers/spreadsheet/google-sheets.ts +222 -56
  155. package/src/providers/spreadsheet/xlsx.ts +47 -16
  156. package/src/providers/storage/s3.ts +119 -47
  157. package/src/providers/support/zendesk.ts +196 -46
  158. package/src/providers/tasks/todoist.ts +20 -26
  159. package/src/providers/video-conferencing/google-meet.ts +17 -20
  160. package/src/providers/video-conferencing/jitsi.ts +14 -14
  161. package/src/providers/video-conferencing/teams.ts +14 -13
  162. package/src/providers/video-conferencing/zoom.ts +54 -49
  163. package/src/tools/data.ts +6 -16
  164. package/src/tools/index.ts +1 -0
  165. package/src/tools/system.ts +887 -0
  166. package/src/tools/web.ts +22 -10
  167. package/src/track-record.ts +106 -0
  168. package/src/types.ts +241 -13
  169. package/src/verb-registration.ts +197 -0
  170. package/src/worker.ts +370 -0
  171. package/src/wrap.ts +260 -0
  172. package/test/client.test.ts +146 -0
  173. package/test/communication-tools-extended.test.ts +734 -0
  174. package/test/data-tools-extended.test.ts +743 -0
  175. package/test/define-extended.test.ts +819 -0
  176. package/test/define.test.ts +150 -41
  177. package/test/entities.test.ts +623 -0
  178. package/test/extended-entities.test.ts +1228 -0
  179. package/test/provider-implementations.test.ts +725 -0
  180. package/test/provider-registry-extended.test.ts +583 -0
  181. package/test/providers/google-sheets.test.ts +851 -0
  182. package/test/providers/helpers.ts +554 -0
  183. package/test/providers/hubspot.test.ts +576 -0
  184. package/test/providers/slack.test.ts +932 -0
  185. package/test/providers/stripe.test.ts +701 -0
  186. package/test/providers.test.ts +578 -0
  187. package/test/system-tools-extended.test.ts +632 -0
  188. package/test/system.test.ts +673 -0
  189. package/test/tools.test.ts +15 -11
  190. package/test/types.test.ts +402 -0
  191. package/test/verb-registration.test.ts +395 -0
  192. package/test/web-tools.test.ts +553 -0
  193. package/test/worker-extended.test.ts +699 -0
  194. package/test/worker.test.ts +576 -0
  195. package/test/wrap.test.ts +366 -0
  196. package/tsconfig.json +3 -13
  197. package/vitest.config.ts +37 -0
  198. package/wrangler.jsonc +9 -0
  199. package/LICENSE +0 -21
  200. package/dist/providers/voice/vapi.d.ts +0 -27
  201. package/dist/providers/voice/vapi.d.ts.map +0 -1
  202. package/dist/providers/voice/vapi.js +0 -440
  203. package/dist/providers/voice/vapi.js.map +0 -1
  204. package/src/define.js +0 -259
  205. package/src/entities/advertising.js +0 -999
  206. package/src/entities/ai.js +0 -756
  207. package/src/entities/analytics.js +0 -1588
  208. package/src/entities/automation.js +0 -601
  209. package/src/entities/communication.js +0 -1150
  210. package/src/entities/crm.js +0 -1386
  211. package/src/entities/design.js +0 -546
  212. package/src/entities/development.js +0 -2212
  213. package/src/entities/document.js +0 -874
  214. package/src/entities/ecommerce.js +0 -1429
  215. package/src/entities/experiment.js +0 -1039
  216. package/src/entities/finance.js +0 -3478
  217. package/src/entities/forms.js +0 -1892
  218. package/src/entities/hr.js +0 -661
  219. package/src/entities/identity.js +0 -997
  220. package/src/entities/index.js +0 -282
  221. package/src/entities/infrastructure.js +0 -1153
  222. package/src/entities/knowledge.js +0 -1438
  223. package/src/entities/marketing.js +0 -1610
  224. package/src/entities/media.js +0 -1634
  225. package/src/entities/notification.js +0 -1199
  226. package/src/entities/presentation.js +0 -1274
  227. package/src/entities/productivity.js +0 -1317
  228. package/src/entities/project-management.js +0 -1136
  229. package/src/entities/recruiting.js +0 -736
  230. package/src/entities/shipping.js +0 -509
  231. package/src/entities/signature.js +0 -1102
  232. package/src/entities/site.js +0 -222
  233. package/src/entities/spreadsheet.js +0 -1341
  234. package/src/entities/storage.js +0 -1198
  235. package/src/entities/support.js +0 -1166
  236. package/src/entities/video-conferencing.js +0 -1750
  237. package/src/entities/video.js +0 -950
  238. package/src/entities.js +0 -1663
  239. package/src/index.js +0 -74
  240. package/src/providers/analytics/index.js +0 -17
  241. package/src/providers/analytics/mixpanel.js +0 -255
  242. package/src/providers/calendar/cal-com.js +0 -303
  243. package/src/providers/calendar/google-calendar.js +0 -335
  244. package/src/providers/calendar/index.js +0 -20
  245. package/src/providers/crm/hubspot.js +0 -566
  246. package/src/providers/crm/index.js +0 -17
  247. package/src/providers/development/github.js +0 -472
  248. package/src/providers/development/index.js +0 -17
  249. package/src/providers/ecommerce/index.js +0 -17
  250. package/src/providers/ecommerce/shopify.js +0 -378
  251. package/src/providers/email/index.js +0 -20
  252. package/src/providers/email/resend.js +0 -258
  253. package/src/providers/email/sendgrid.js +0 -161
  254. package/src/providers/finance/index.js +0 -17
  255. package/src/providers/finance/stripe.js +0 -549
  256. package/src/providers/forms/index.js +0 -17
  257. package/src/providers/forms/typeform.js +0 -500
  258. package/src/providers/index.js +0 -123
  259. package/src/providers/knowledge/index.js +0 -17
  260. package/src/providers/knowledge/notion.js +0 -389
  261. package/src/providers/marketing/index.js +0 -17
  262. package/src/providers/marketing/mailchimp.js +0 -443
  263. package/src/providers/media/cloudinary.js +0 -318
  264. package/src/providers/media/index.js +0 -17
  265. package/src/providers/messaging/index.js +0 -20
  266. package/src/providers/messaging/slack.js +0 -393
  267. package/src/providers/messaging/twilio-sms.js +0 -249
  268. package/src/providers/project-management/index.js +0 -17
  269. package/src/providers/project-management/linear.js +0 -575
  270. package/src/providers/registry.js +0 -86
  271. package/src/providers/spreadsheet/google-sheets.js +0 -375
  272. package/src/providers/spreadsheet/index.js +0 -20
  273. package/src/providers/spreadsheet/xlsx.js +0 -423
  274. package/src/providers/storage/index.js +0 -24
  275. package/src/providers/storage/s3.js +0 -419
  276. package/src/providers/support/index.js +0 -17
  277. package/src/providers/support/zendesk.js +0 -373
  278. package/src/providers/tasks/index.js +0 -17
  279. package/src/providers/tasks/todoist.js +0 -286
  280. package/src/providers/types.js +0 -9
  281. package/src/providers/video-conferencing/google-meet.js +0 -286
  282. package/src/providers/video-conferencing/index.js +0 -31
  283. package/src/providers/video-conferencing/jitsi.js +0 -254
  284. package/src/providers/video-conferencing/teams.js +0 -270
  285. package/src/providers/video-conferencing/zoom.js +0 -332
  286. package/src/registry.js +0 -128
  287. package/src/tools/communication.js +0 -184
  288. package/src/tools/data.js +0 -205
  289. package/src/tools/index.js +0 -11
  290. package/src/tools/web.js +0 -137
  291. package/src/types.js +0 -10
  292. package/test/define.test.js +0 -306
  293. package/test/registry.test.js +0 -357
  294. package/test/tools.test.js +0 -363
@@ -26,6 +26,114 @@ import { defineProvider } from '../registry.js'
26
26
 
27
27
  const GITHUB_API_URL = 'https://api.github.com'
28
28
 
29
+ // =============================================================================
30
+ // GitHub API Response Types
31
+ // =============================================================================
32
+
33
+ /**
34
+ * GitHub API user/owner object
35
+ */
36
+ interface GitHubUser {
37
+ login: string
38
+ id: number
39
+ avatar_url: string
40
+ type: string
41
+ }
42
+
43
+ /**
44
+ * GitHub API repository response
45
+ */
46
+ interface GitHubRepository {
47
+ id: number
48
+ name: string
49
+ full_name: string
50
+ description: string | null
51
+ private: boolean
52
+ default_branch: string
53
+ html_url: string
54
+ clone_url: string
55
+ stargazers_count: number
56
+ forks_count: number
57
+ open_issues_count: number
58
+ created_at: string
59
+ updated_at: string
60
+ owner: GitHubUser
61
+ }
62
+
63
+ /**
64
+ * GitHub API label object
65
+ */
66
+ interface GitHubLabel {
67
+ id: number
68
+ name: string
69
+ color: string
70
+ description: string | null
71
+ }
72
+
73
+ /**
74
+ * GitHub API issue response
75
+ */
76
+ interface GitHubIssue {
77
+ id: number
78
+ number: number
79
+ title: string
80
+ body: string | null
81
+ state: 'open' | 'closed'
82
+ html_url: string
83
+ created_at: string
84
+ updated_at: string
85
+ closed_at: string | null
86
+ user: GitHubUser
87
+ labels: GitHubLabel[]
88
+ assignees: GitHubUser[]
89
+ pull_request?: {
90
+ url: string
91
+ html_url: string
92
+ }
93
+ }
94
+
95
+ /**
96
+ * GitHub API branch reference
97
+ */
98
+ interface GitHubBranchRef {
99
+ ref: string
100
+ sha: string
101
+ label: string
102
+ user: GitHubUser
103
+ }
104
+
105
+ /**
106
+ * GitHub API pull request response
107
+ */
108
+ interface GitHubPullRequest {
109
+ id: number
110
+ number: number
111
+ title: string
112
+ body: string | null
113
+ state: 'open' | 'closed'
114
+ html_url: string
115
+ created_at: string
116
+ updated_at: string
117
+ closed_at: string | null
118
+ merged_at: string | null
119
+ draft: boolean
120
+ mergeable: boolean | null
121
+ user: GitHubUser
122
+ head: GitHubBranchRef
123
+ base: GitHubBranchRef
124
+ }
125
+
126
+ /**
127
+ * GitHub API comment response
128
+ */
129
+ interface GitHubComment {
130
+ id: number
131
+ body: string
132
+ created_at: string
133
+ updated_at: string
134
+ user: GitHubUser
135
+ }
136
+
29
137
  /**
30
138
  * GitHub provider info
31
139
  */
@@ -105,27 +213,24 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
105
213
  params.append('page', options.cursor)
106
214
  }
107
215
 
108
- const response = await fetch(
109
- `${baseUrl}/user/repos?${params.toString()}`,
110
- {
111
- headers: {
112
- Authorization: `Bearer ${accessToken}`,
113
- Accept: 'application/vnd.github.v3+json',
114
- },
115
- }
116
- )
216
+ const response = await fetch(`${baseUrl}/user/repos?${params.toString()}`, {
217
+ headers: {
218
+ Authorization: `Bearer ${accessToken}`,
219
+ Accept: 'application/vnd.github.v3+json',
220
+ },
221
+ })
117
222
 
118
223
  if (!response.ok) {
119
224
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
120
225
  }
121
226
 
122
- const data = await response.json() as any[]
123
- const repos: RepoData[] = data.map((repo: any) => ({
227
+ const data = (await response.json()) as GitHubRepository[]
228
+ const repos: RepoData[] = data.map((repo) => ({
124
229
  id: String(repo.id),
125
230
  owner: repo.owner.login,
126
231
  name: repo.name,
127
232
  fullName: repo.full_name,
128
- description: repo.description,
233
+ ...(repo.description !== null && { description: repo.description }),
129
234
  private: repo.private,
130
235
  defaultBranch: repo.default_branch,
131
236
  url: repo.html_url,
@@ -144,8 +249,7 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
144
249
  return {
145
250
  items: repos,
146
251
  hasMore,
147
- nextCursor,
148
- total: undefined,
252
+ ...(nextCursor !== undefined && { nextCursor }),
149
253
  }
150
254
  },
151
255
 
@@ -165,13 +269,13 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
165
269
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
166
270
  }
167
271
 
168
- const data = await response.json() as any
272
+ const data = (await response.json()) as GitHubRepository
169
273
  return {
170
274
  id: String(data.id),
171
275
  owner: data.owner.login,
172
276
  name: data.name,
173
277
  fullName: data.full_name,
174
- description: data.description,
278
+ ...(data.description !== null && { description: data.description }),
175
279
  private: data.private,
176
280
  defaultBranch: data.default_branch,
177
281
  url: data.html_url,
@@ -211,37 +315,30 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
211
315
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
212
316
  }
213
317
 
214
- const data = await response.json() as any
318
+ const data = (await response.json()) as GitHubIssue
215
319
  return {
216
320
  id: String(data.id),
217
321
  number: data.number,
218
322
  title: data.title,
219
- body: data.body,
323
+ ...(data.body !== null && { body: data.body }),
220
324
  state: data.state,
221
- labels: data.labels.map((l: any) => l.name),
222
- assignees: data.assignees.map((a: any) => a.login),
325
+ labels: data.labels.map((l) => l.name),
326
+ assignees: data.assignees.map((a) => a.login),
223
327
  authorId: data.user.login,
224
328
  url: data.html_url,
225
329
  createdAt: new Date(data.created_at),
226
330
  updatedAt: new Date(data.updated_at),
227
- closedAt: data.closed_at ? new Date(data.closed_at) : undefined,
331
+ ...(data.closed_at !== null && { closedAt: new Date(data.closed_at) }),
228
332
  }
229
333
  },
230
334
 
231
- async getIssue(
232
- owner: string,
233
- repo: string,
234
- issueNumber: number
235
- ): Promise<DevIssueData | null> {
236
- const response = await fetch(
237
- `${baseUrl}/repos/${owner}/${repo}/issues/${issueNumber}`,
238
- {
239
- headers: {
240
- Authorization: `Bearer ${accessToken}`,
241
- Accept: 'application/vnd.github.v3+json',
242
- },
243
- }
244
- )
335
+ async getIssue(owner: string, repo: string, issueNumber: number): Promise<DevIssueData | null> {
336
+ const response = await fetch(`${baseUrl}/repos/${owner}/${repo}/issues/${issueNumber}`, {
337
+ headers: {
338
+ Authorization: `Bearer ${accessToken}`,
339
+ Accept: 'application/vnd.github.v3+json',
340
+ },
341
+ })
245
342
 
246
343
  if (response.status === 404) {
247
344
  return null
@@ -251,20 +348,20 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
251
348
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
252
349
  }
253
350
 
254
- const data = await response.json() as any
351
+ const data = (await response.json()) as GitHubIssue
255
352
  return {
256
353
  id: String(data.id),
257
354
  number: data.number,
258
355
  title: data.title,
259
- body: data.body,
356
+ ...(data.body !== null && { body: data.body }),
260
357
  state: data.state,
261
- labels: data.labels.map((l: any) => l.name),
262
- assignees: data.assignees.map((a: any) => a.login),
358
+ labels: data.labels.map((l) => l.name),
359
+ assignees: data.assignees.map((a) => a.login),
263
360
  authorId: data.user.login,
264
361
  url: data.html_url,
265
362
  createdAt: new Date(data.created_at),
266
363
  updatedAt: new Date(data.updated_at),
267
- closedAt: data.closed_at ? new Date(data.closed_at) : undefined,
364
+ ...(data.closed_at !== null && { closedAt: new Date(data.closed_at) }),
268
365
  }
269
366
  },
270
367
 
@@ -276,43 +373,40 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
276
373
  ): Promise<DevIssueData> {
277
374
  const body: Record<string, unknown> = {}
278
375
 
279
- if (updates.title !== undefined) body.title = updates.title
280
- if (updates.body !== undefined) body.body = updates.body
281
- if (updates.labels !== undefined) body.labels = updates.labels
282
- if (updates.assignees !== undefined) body.assignees = updates.assignees
283
- if (updates.milestone !== undefined) body.milestone = updates.milestone
376
+ if (updates.title !== undefined) body['title'] = updates.title
377
+ if (updates.body !== undefined) body['body'] = updates.body
378
+ if (updates.labels !== undefined) body['labels'] = updates.labels
379
+ if (updates.assignees !== undefined) body['assignees'] = updates.assignees
380
+ if (updates.milestone !== undefined) body['milestone'] = updates.milestone
284
381
 
285
- const response = await fetch(
286
- `${baseUrl}/repos/${owner}/${repo}/issues/${issueNumber}`,
287
- {
288
- method: 'PATCH',
289
- headers: {
290
- Authorization: `Bearer ${accessToken}`,
291
- Accept: 'application/vnd.github.v3+json',
292
- 'Content-Type': 'application/json',
293
- },
294
- body: JSON.stringify(body),
295
- }
296
- )
382
+ const response = await fetch(`${baseUrl}/repos/${owner}/${repo}/issues/${issueNumber}`, {
383
+ method: 'PATCH',
384
+ headers: {
385
+ Authorization: `Bearer ${accessToken}`,
386
+ Accept: 'application/vnd.github.v3+json',
387
+ 'Content-Type': 'application/json',
388
+ },
389
+ body: JSON.stringify(body),
390
+ })
297
391
 
298
392
  if (!response.ok) {
299
393
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
300
394
  }
301
395
 
302
- const data = await response.json() as any
396
+ const data = (await response.json()) as GitHubIssue
303
397
  return {
304
398
  id: String(data.id),
305
399
  number: data.number,
306
400
  title: data.title,
307
- body: data.body,
401
+ ...(data.body !== null && { body: data.body }),
308
402
  state: data.state,
309
- labels: data.labels.map((l: any) => l.name),
310
- assignees: data.assignees.map((a: any) => a.login),
403
+ labels: data.labels.map((l) => l.name),
404
+ assignees: data.assignees.map((a) => a.login),
311
405
  authorId: data.user.login,
312
406
  url: data.html_url,
313
407
  createdAt: new Date(data.created_at),
314
408
  updatedAt: new Date(data.updated_at),
315
- closedAt: data.closed_at ? new Date(data.closed_at) : undefined,
409
+ ...(data.closed_at !== null && { closedAt: new Date(data.closed_at) }),
316
410
  }
317
411
  },
318
412
 
@@ -356,22 +450,22 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
356
450
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
357
451
  }
358
452
 
359
- const data = await response.json() as any
453
+ const data = (await response.json()) as GitHubIssue[]
360
454
  const issues: DevIssueData[] = data
361
- .filter((item: any) => !item.pull_request) // Filter out PRs
362
- .map((issue: any) => ({
455
+ .filter((item) => !item.pull_request) // Filter out PRs
456
+ .map((issue) => ({
363
457
  id: String(issue.id),
364
458
  number: issue.number,
365
459
  title: issue.title,
366
- body: issue.body,
460
+ ...(issue.body !== null && { body: issue.body }),
367
461
  state: issue.state,
368
- labels: issue.labels.map((l: any) => l.name),
369
- assignees: issue.assignees.map((a: any) => a.login),
462
+ labels: issue.labels.map((l) => l.name),
463
+ assignees: issue.assignees.map((a) => a.login),
370
464
  authorId: issue.user.login,
371
465
  url: issue.html_url,
372
466
  createdAt: new Date(issue.created_at),
373
467
  updatedAt: new Date(issue.updated_at),
374
- closedAt: issue.closed_at ? new Date(issue.closed_at) : undefined,
468
+ ...(issue.closed_at !== null && { closedAt: new Date(issue.closed_at) }),
375
469
  }))
376
470
 
377
471
  const linkHeader = response.headers.get('Link')
@@ -381,16 +475,11 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
381
475
  return {
382
476
  items: issues,
383
477
  hasMore,
384
- nextCursor,
385
- total: undefined,
478
+ ...(nextCursor !== undefined && { nextCursor }),
386
479
  }
387
480
  },
388
481
 
389
- async createPullRequest(
390
- owner: string,
391
- repo: string,
392
- pr: CreatePROptions
393
- ): Promise<PRData> {
482
+ async createPullRequest(owner: string, repo: string, pr: CreatePROptions): Promise<PRData> {
394
483
  const body = {
395
484
  title: pr.title,
396
485
  body: pr.body,
@@ -413,40 +502,33 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
413
502
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
414
503
  }
415
504
 
416
- const data = await response.json() as any
505
+ const data = (await response.json()) as GitHubPullRequest
417
506
  return {
418
507
  id: String(data.id),
419
508
  number: data.number,
420
509
  title: data.title,
421
- body: data.body,
510
+ ...(data.body !== null && { body: data.body }),
422
511
  state: data.merged_at ? 'merged' : data.state,
423
512
  head: data.head.ref,
424
513
  base: data.base.ref,
425
514
  authorId: data.user.login,
426
515
  draft: data.draft,
427
- mergeable: data.mergeable,
516
+ ...(data.mergeable !== null && { mergeable: data.mergeable }),
428
517
  url: data.html_url,
429
518
  createdAt: new Date(data.created_at),
430
519
  updatedAt: new Date(data.updated_at),
431
- mergedAt: data.merged_at ? new Date(data.merged_at) : undefined,
432
- closedAt: data.closed_at ? new Date(data.closed_at) : undefined,
520
+ ...(data.merged_at !== null && { mergedAt: new Date(data.merged_at) }),
521
+ ...(data.closed_at !== null && { closedAt: new Date(data.closed_at) }),
433
522
  }
434
523
  },
435
524
 
436
- async getPullRequest(
437
- owner: string,
438
- repo: string,
439
- prNumber: number
440
- ): Promise<PRData | null> {
441
- const response = await fetch(
442
- `${baseUrl}/repos/${owner}/${repo}/pulls/${prNumber}`,
443
- {
444
- headers: {
445
- Authorization: `Bearer ${accessToken}`,
446
- Accept: 'application/vnd.github.v3+json',
447
- },
448
- }
449
- )
525
+ async getPullRequest(owner: string, repo: string, prNumber: number): Promise<PRData | null> {
526
+ const response = await fetch(`${baseUrl}/repos/${owner}/${repo}/pulls/${prNumber}`, {
527
+ headers: {
528
+ Authorization: `Bearer ${accessToken}`,
529
+ Accept: 'application/vnd.github.v3+json',
530
+ },
531
+ })
450
532
 
451
533
  if (response.status === 404) {
452
534
  return null
@@ -456,23 +538,23 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
456
538
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
457
539
  }
458
540
 
459
- const data = await response.json() as any
541
+ const data = (await response.json()) as GitHubPullRequest
460
542
  return {
461
543
  id: String(data.id),
462
544
  number: data.number,
463
545
  title: data.title,
464
- body: data.body,
546
+ ...(data.body !== null && { body: data.body }),
465
547
  state: data.merged_at ? 'merged' : data.state,
466
548
  head: data.head.ref,
467
549
  base: data.base.ref,
468
550
  authorId: data.user.login,
469
551
  draft: data.draft,
470
- mergeable: data.mergeable,
552
+ ...(data.mergeable !== null && { mergeable: data.mergeable }),
471
553
  url: data.html_url,
472
554
  createdAt: new Date(data.created_at),
473
555
  updatedAt: new Date(data.updated_at),
474
- mergedAt: data.merged_at ? new Date(data.merged_at) : undefined,
475
- closedAt: data.closed_at ? new Date(data.closed_at) : undefined,
556
+ ...(data.merged_at !== null && { mergedAt: new Date(data.merged_at) }),
557
+ ...(data.closed_at !== null && { closedAt: new Date(data.closed_at) }),
476
558
  }
477
559
  },
478
560
 
@@ -499,37 +581,34 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
499
581
  params.append('page', options.cursor)
500
582
  }
501
583
 
502
- const response = await fetch(
503
- `${baseUrl}/repos/${owner}/${repo}/pulls?${params.toString()}`,
504
- {
505
- headers: {
506
- Authorization: `Bearer ${accessToken}`,
507
- Accept: 'application/vnd.github.v3+json',
508
- },
509
- }
510
- )
584
+ const response = await fetch(`${baseUrl}/repos/${owner}/${repo}/pulls?${params.toString()}`, {
585
+ headers: {
586
+ Authorization: `Bearer ${accessToken}`,
587
+ Accept: 'application/vnd.github.v3+json',
588
+ },
589
+ })
511
590
 
512
591
  if (!response.ok) {
513
592
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
514
593
  }
515
594
 
516
- const data = await response.json() as any
517
- const prs: PRData[] = data.map((pr: any) => ({
595
+ const data = (await response.json()) as GitHubPullRequest[]
596
+ const prs: PRData[] = data.map((pr) => ({
518
597
  id: String(pr.id),
519
598
  number: pr.number,
520
599
  title: pr.title,
521
- body: pr.body,
600
+ ...(pr.body !== null && { body: pr.body }),
522
601
  state: pr.merged_at ? 'merged' : pr.state,
523
602
  head: pr.head.ref,
524
603
  base: pr.base.ref,
525
604
  authorId: pr.user.login,
526
605
  draft: pr.draft,
527
- mergeable: pr.mergeable,
606
+ ...(pr.mergeable !== null && { mergeable: pr.mergeable }),
528
607
  url: pr.html_url,
529
608
  createdAt: new Date(pr.created_at),
530
609
  updatedAt: new Date(pr.updated_at),
531
- mergedAt: pr.merged_at ? new Date(pr.merged_at) : undefined,
532
- closedAt: pr.closed_at ? new Date(pr.closed_at) : undefined,
610
+ ...(pr.merged_at !== null && { mergedAt: new Date(pr.merged_at) }),
611
+ ...(pr.closed_at !== null && { closedAt: new Date(pr.closed_at) }),
533
612
  }))
534
613
 
535
614
  const linkHeader = response.headers.get('Link')
@@ -539,28 +618,20 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
539
618
  return {
540
619
  items: prs,
541
620
  hasMore,
542
- nextCursor,
543
- total: undefined,
621
+ ...(nextCursor !== undefined && { nextCursor }),
544
622
  }
545
623
  },
546
624
 
547
- async mergePullRequest(
548
- owner: string,
549
- repo: string,
550
- prNumber: number
551
- ): Promise<boolean> {
552
- const response = await fetch(
553
- `${baseUrl}/repos/${owner}/${repo}/pulls/${prNumber}/merge`,
554
- {
555
- method: 'PUT',
556
- headers: {
557
- Authorization: `Bearer ${accessToken}`,
558
- Accept: 'application/vnd.github.v3+json',
559
- 'Content-Type': 'application/json',
560
- },
561
- body: JSON.stringify({}),
562
- }
563
- )
625
+ async mergePullRequest(owner: string, repo: string, prNumber: number): Promise<boolean> {
626
+ const response = await fetch(`${baseUrl}/repos/${owner}/${repo}/pulls/${prNumber}/merge`, {
627
+ method: 'PUT',
628
+ headers: {
629
+ Authorization: `Bearer ${accessToken}`,
630
+ Accept: 'application/vnd.github.v3+json',
631
+ 'Content-Type': 'application/json',
632
+ },
633
+ body: JSON.stringify({}),
634
+ })
564
635
 
565
636
  return response.ok
566
637
  },
@@ -588,7 +659,7 @@ export function createGitHubProvider(config: ProviderConfig): DevelopmentProvide
588
659
  throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
589
660
  }
590
661
 
591
- const data = await response.json() as any
662
+ const data = (await response.json()) as GitHubComment
592
663
  return {
593
664
  id: String(data.id),
594
665
  body: data.body,