@hasna/connectors 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/bin/index.js +147 -6
  2. package/bin/mcp.js +92 -1
  3. package/bin/serve.js +91 -0
  4. package/connectors/connect-ably/.env.example +11 -0
  5. package/connectors/connect-ably/CLAUDE.md +111 -0
  6. package/connectors/connect-ably/README.md +193 -0
  7. package/connectors/connect-ably/package.json +54 -0
  8. package/connectors/connect-ably/scripts/release.ts +179 -0
  9. package/connectors/connect-ably/src/api/channels.ts +33 -0
  10. package/connectors/connect-ably/src/api/client.ts +203 -0
  11. package/connectors/connect-ably/src/api/index.ts +59 -0
  12. package/connectors/connect-ably/src/api/messages.ts +48 -0
  13. package/connectors/connect-ably/src/api/presence.ts +39 -0
  14. package/connectors/connect-ably/src/api/stats.ts +29 -0
  15. package/connectors/connect-ably/src/cli/index.ts +397 -0
  16. package/connectors/connect-ably/src/index.ts +102 -0
  17. package/connectors/connect-ably/src/types/index.ts +294 -0
  18. package/connectors/connect-ably/src/utils/auth.ts +274 -0
  19. package/connectors/connect-ably/src/utils/bulk.ts +212 -0
  20. package/connectors/connect-ably/src/utils/config.ts +323 -0
  21. package/connectors/connect-ably/src/utils/output.ts +175 -0
  22. package/connectors/connect-ably/src/utils/settings.ts +114 -0
  23. package/connectors/connect-ably/src/utils/storage.ts +198 -0
  24. package/connectors/connect-ably/tsconfig.json +16 -0
  25. package/connectors/connect-box/.env.example +11 -0
  26. package/connectors/connect-box/CLAUDE.md +272 -0
  27. package/connectors/connect-box/README.md +193 -0
  28. package/connectors/connect-box/package.json +51 -0
  29. package/connectors/connect-box/scripts/release.ts +179 -0
  30. package/connectors/connect-box/src/api/client.ts +213 -0
  31. package/connectors/connect-box/src/api/example.ts +48 -0
  32. package/connectors/connect-box/src/api/index.ts +51 -0
  33. package/connectors/connect-box/src/cli/index.ts +254 -0
  34. package/connectors/connect-box/src/index.ts +103 -0
  35. package/connectors/connect-box/src/types/index.ts +237 -0
  36. package/connectors/connect-box/src/utils/auth.ts +274 -0
  37. package/connectors/connect-box/src/utils/bulk.ts +212 -0
  38. package/connectors/connect-box/src/utils/config.ts +326 -0
  39. package/connectors/connect-box/src/utils/output.ts +175 -0
  40. package/connectors/connect-box/src/utils/settings.ts +114 -0
  41. package/connectors/connect-box/src/utils/storage.ts +198 -0
  42. package/connectors/connect-box/tsconfig.json +16 -0
  43. package/connectors/connect-clearbit/.env.example +11 -0
  44. package/connectors/connect-clearbit/CLAUDE.md +272 -0
  45. package/connectors/connect-clearbit/README.md +193 -0
  46. package/connectors/connect-clearbit/package.json +51 -0
  47. package/connectors/connect-clearbit/scripts/release.ts +179 -0
  48. package/connectors/connect-clearbit/src/api/client.ts +213 -0
  49. package/connectors/connect-clearbit/src/api/example.ts +48 -0
  50. package/connectors/connect-clearbit/src/api/index.ts +51 -0
  51. package/connectors/connect-clearbit/src/cli/index.ts +254 -0
  52. package/connectors/connect-clearbit/src/index.ts +103 -0
  53. package/connectors/connect-clearbit/src/types/index.ts +237 -0
  54. package/connectors/connect-clearbit/src/utils/auth.ts +274 -0
  55. package/connectors/connect-clearbit/src/utils/bulk.ts +212 -0
  56. package/connectors/connect-clearbit/src/utils/config.ts +326 -0
  57. package/connectors/connect-clearbit/src/utils/output.ts +175 -0
  58. package/connectors/connect-clearbit/src/utils/settings.ts +114 -0
  59. package/connectors/connect-clearbit/src/utils/storage.ts +198 -0
  60. package/connectors/connect-clearbit/tsconfig.json +16 -0
  61. package/connectors/connect-coda/.env.example +11 -0
  62. package/connectors/connect-coda/CLAUDE.md +272 -0
  63. package/connectors/connect-coda/README.md +193 -0
  64. package/connectors/connect-coda/package.json +51 -0
  65. package/connectors/connect-coda/scripts/release.ts +179 -0
  66. package/connectors/connect-coda/src/api/client.ts +213 -0
  67. package/connectors/connect-coda/src/api/example.ts +48 -0
  68. package/connectors/connect-coda/src/api/index.ts +51 -0
  69. package/connectors/connect-coda/src/cli/index.ts +254 -0
  70. package/connectors/connect-coda/src/index.ts +103 -0
  71. package/connectors/connect-coda/src/types/index.ts +237 -0
  72. package/connectors/connect-coda/src/utils/auth.ts +274 -0
  73. package/connectors/connect-coda/src/utils/bulk.ts +212 -0
  74. package/connectors/connect-coda/src/utils/config.ts +326 -0
  75. package/connectors/connect-coda/src/utils/output.ts +175 -0
  76. package/connectors/connect-coda/src/utils/settings.ts +114 -0
  77. package/connectors/connect-coda/src/utils/storage.ts +198 -0
  78. package/connectors/connect-coda/tsconfig.json +16 -0
  79. package/connectors/connect-dropbox/.env.example +11 -0
  80. package/connectors/connect-dropbox/CLAUDE.md +119 -0
  81. package/connectors/connect-dropbox/README.md +193 -0
  82. package/connectors/connect-dropbox/package.json +51 -0
  83. package/connectors/connect-dropbox/src/api/client.ts +222 -0
  84. package/connectors/connect-dropbox/src/api/index.ts +395 -0
  85. package/connectors/connect-dropbox/src/cli/index.ts +627 -0
  86. package/connectors/connect-dropbox/src/index.ts +20 -0
  87. package/connectors/connect-dropbox/src/types/index.ts +516 -0
  88. package/connectors/connect-dropbox/src/utils/config.ts +197 -0
  89. package/connectors/connect-dropbox/tsconfig.json +16 -0
  90. package/connectors/connect-linode/.env.example +11 -0
  91. package/connectors/connect-linode/CLAUDE.md +272 -0
  92. package/connectors/connect-linode/README.md +193 -0
  93. package/connectors/connect-linode/package.json +51 -0
  94. package/connectors/connect-linode/scripts/release.ts +179 -0
  95. package/connectors/connect-linode/src/api/client.ts +213 -0
  96. package/connectors/connect-linode/src/api/example.ts +48 -0
  97. package/connectors/connect-linode/src/api/index.ts +51 -0
  98. package/connectors/connect-linode/src/cli/index.ts +254 -0
  99. package/connectors/connect-linode/src/index.ts +103 -0
  100. package/connectors/connect-linode/src/types/index.ts +237 -0
  101. package/connectors/connect-linode/src/utils/auth.ts +274 -0
  102. package/connectors/connect-linode/src/utils/bulk.ts +212 -0
  103. package/connectors/connect-linode/src/utils/config.ts +326 -0
  104. package/connectors/connect-linode/src/utils/output.ts +175 -0
  105. package/connectors/connect-linode/src/utils/settings.ts +114 -0
  106. package/connectors/connect-linode/src/utils/storage.ts +198 -0
  107. package/connectors/connect-linode/tsconfig.json +16 -0
  108. package/connectors/connect-mailgun/.env.example +11 -0
  109. package/connectors/connect-mailgun/CLAUDE.md +272 -0
  110. package/connectors/connect-mailgun/README.md +193 -0
  111. package/connectors/connect-mailgun/package.json +51 -0
  112. package/connectors/connect-mailgun/scripts/release.ts +179 -0
  113. package/connectors/connect-mailgun/src/api/client.ts +213 -0
  114. package/connectors/connect-mailgun/src/api/example.ts +48 -0
  115. package/connectors/connect-mailgun/src/api/index.ts +51 -0
  116. package/connectors/connect-mailgun/src/cli/index.ts +254 -0
  117. package/connectors/connect-mailgun/src/index.ts +103 -0
  118. package/connectors/connect-mailgun/src/types/index.ts +237 -0
  119. package/connectors/connect-mailgun/src/utils/auth.ts +274 -0
  120. package/connectors/connect-mailgun/src/utils/bulk.ts +212 -0
  121. package/connectors/connect-mailgun/src/utils/config.ts +326 -0
  122. package/connectors/connect-mailgun/src/utils/output.ts +175 -0
  123. package/connectors/connect-mailgun/src/utils/settings.ts +114 -0
  124. package/connectors/connect-mailgun/src/utils/storage.ts +198 -0
  125. package/connectors/connect-mailgun/tsconfig.json +16 -0
  126. package/connectors/connect-messagebird/.env.example +11 -0
  127. package/connectors/connect-messagebird/CLAUDE.md +272 -0
  128. package/connectors/connect-messagebird/README.md +193 -0
  129. package/connectors/connect-messagebird/package.json +51 -0
  130. package/connectors/connect-messagebird/scripts/release.ts +179 -0
  131. package/connectors/connect-messagebird/src/api/client.ts +213 -0
  132. package/connectors/connect-messagebird/src/api/example.ts +48 -0
  133. package/connectors/connect-messagebird/src/api/index.ts +51 -0
  134. package/connectors/connect-messagebird/src/cli/index.ts +254 -0
  135. package/connectors/connect-messagebird/src/index.ts +103 -0
  136. package/connectors/connect-messagebird/src/types/index.ts +237 -0
  137. package/connectors/connect-messagebird/src/utils/auth.ts +274 -0
  138. package/connectors/connect-messagebird/src/utils/bulk.ts +212 -0
  139. package/connectors/connect-messagebird/src/utils/config.ts +326 -0
  140. package/connectors/connect-messagebird/src/utils/output.ts +175 -0
  141. package/connectors/connect-messagebird/src/utils/settings.ts +114 -0
  142. package/connectors/connect-messagebird/src/utils/storage.ts +198 -0
  143. package/connectors/connect-messagebird/tsconfig.json +16 -0
  144. package/connectors/connect-miro/.env.example +11 -0
  145. package/connectors/connect-miro/CLAUDE.md +272 -0
  146. package/connectors/connect-miro/README.md +193 -0
  147. package/connectors/connect-miro/package.json +51 -0
  148. package/connectors/connect-miro/scripts/release.ts +179 -0
  149. package/connectors/connect-miro/src/api/client.ts +213 -0
  150. package/connectors/connect-miro/src/api/example.ts +48 -0
  151. package/connectors/connect-miro/src/api/index.ts +51 -0
  152. package/connectors/connect-miro/src/cli/index.ts +254 -0
  153. package/connectors/connect-miro/src/index.ts +103 -0
  154. package/connectors/connect-miro/src/types/index.ts +237 -0
  155. package/connectors/connect-miro/src/utils/auth.ts +274 -0
  156. package/connectors/connect-miro/src/utils/bulk.ts +212 -0
  157. package/connectors/connect-miro/src/utils/config.ts +326 -0
  158. package/connectors/connect-miro/src/utils/output.ts +175 -0
  159. package/connectors/connect-miro/src/utils/settings.ts +114 -0
  160. package/connectors/connect-miro/src/utils/storage.ts +198 -0
  161. package/connectors/connect-miro/tsconfig.json +16 -0
  162. package/connectors/connect-monday/.env.example +11 -0
  163. package/connectors/connect-monday/CLAUDE.md +128 -0
  164. package/connectors/connect-monday/README.md +193 -0
  165. package/connectors/connect-monday/package.json +52 -0
  166. package/connectors/connect-monday/src/api/client.ts +59 -0
  167. package/connectors/connect-monday/src/api/index.ts +539 -0
  168. package/connectors/connect-monday/src/cli/index.ts +479 -0
  169. package/connectors/connect-monday/src/index.ts +19 -0
  170. package/connectors/connect-monday/src/types/index.ts +274 -0
  171. package/connectors/connect-monday/src/utils/config.ts +197 -0
  172. package/connectors/connect-monday/src/utils/output.ts +119 -0
  173. package/connectors/connect-monday/tsconfig.json +16 -0
  174. package/connectors/connect-pipedrive/.env.example +11 -0
  175. package/connectors/connect-pipedrive/CLAUDE.md +128 -0
  176. package/connectors/connect-pipedrive/README.md +193 -0
  177. package/connectors/connect-pipedrive/package.json +52 -0
  178. package/connectors/connect-pipedrive/src/api/client.ts +121 -0
  179. package/connectors/connect-pipedrive/src/api/index.ts +306 -0
  180. package/connectors/connect-pipedrive/src/cli/index.ts +824 -0
  181. package/connectors/connect-pipedrive/src/index.ts +19 -0
  182. package/connectors/connect-pipedrive/src/types/index.ts +335 -0
  183. package/connectors/connect-pipedrive/src/utils/config.ts +171 -0
  184. package/connectors/connect-pipedrive/src/utils/output.ts +119 -0
  185. package/connectors/connect-pipedrive/tsconfig.json +16 -0
  186. package/connectors/connect-pusher/.env.example +11 -0
  187. package/connectors/connect-pusher/CLAUDE.md +272 -0
  188. package/connectors/connect-pusher/README.md +193 -0
  189. package/connectors/connect-pusher/package.json +51 -0
  190. package/connectors/connect-pusher/scripts/release.ts +179 -0
  191. package/connectors/connect-pusher/src/api/client.ts +213 -0
  192. package/connectors/connect-pusher/src/api/example.ts +48 -0
  193. package/connectors/connect-pusher/src/api/index.ts +51 -0
  194. package/connectors/connect-pusher/src/cli/index.ts +254 -0
  195. package/connectors/connect-pusher/src/index.ts +103 -0
  196. package/connectors/connect-pusher/src/types/index.ts +237 -0
  197. package/connectors/connect-pusher/src/utils/auth.ts +274 -0
  198. package/connectors/connect-pusher/src/utils/bulk.ts +212 -0
  199. package/connectors/connect-pusher/src/utils/config.ts +326 -0
  200. package/connectors/connect-pusher/src/utils/output.ts +175 -0
  201. package/connectors/connect-pusher/src/utils/settings.ts +114 -0
  202. package/connectors/connect-pusher/src/utils/storage.ts +198 -0
  203. package/connectors/connect-pusher/tsconfig.json +16 -0
  204. package/connectors/connect-vonage/.env.example +11 -0
  205. package/connectors/connect-vonage/CLAUDE.md +272 -0
  206. package/connectors/connect-vonage/README.md +193 -0
  207. package/connectors/connect-vonage/package.json +51 -0
  208. package/connectors/connect-vonage/scripts/release.ts +179 -0
  209. package/connectors/connect-vonage/src/api/client.ts +213 -0
  210. package/connectors/connect-vonage/src/api/example.ts +48 -0
  211. package/connectors/connect-vonage/src/api/index.ts +51 -0
  212. package/connectors/connect-vonage/src/cli/index.ts +254 -0
  213. package/connectors/connect-vonage/src/index.ts +103 -0
  214. package/connectors/connect-vonage/src/types/index.ts +237 -0
  215. package/connectors/connect-vonage/src/utils/auth.ts +274 -0
  216. package/connectors/connect-vonage/src/utils/bulk.ts +212 -0
  217. package/connectors/connect-vonage/src/utils/config.ts +326 -0
  218. package/connectors/connect-vonage/src/utils/output.ts +175 -0
  219. package/connectors/connect-vonage/src/utils/settings.ts +114 -0
  220. package/connectors/connect-vonage/src/utils/storage.ts +198 -0
  221. package/connectors/connect-vonage/tsconfig.json +16 -0
  222. package/dist/index.js +91 -0
  223. package/package.json +1 -1
@@ -0,0 +1,306 @@
1
+ import { PipedriveClient } from './client';
2
+ import type {
3
+ PipedriveConfig,
4
+ PipedriveResponse,
5
+ PipedriveListResponse,
6
+ Person,
7
+ CreatePersonInput,
8
+ Organization,
9
+ CreateOrganizationInput,
10
+ Deal,
11
+ CreateDealInput,
12
+ Lead,
13
+ CreateLeadInput,
14
+ Activity,
15
+ CreateActivityInput,
16
+ Pipeline,
17
+ Stage,
18
+ Note,
19
+ CreateNoteInput,
20
+ User,
21
+ } from '../types';
22
+
23
+ export { PipedriveClient } from './client';
24
+
25
+ export class Pipedrive {
26
+ private client: PipedriveClient;
27
+
28
+ constructor(config: PipedriveConfig) {
29
+ this.client = new PipedriveClient(config);
30
+ }
31
+
32
+ // ============================================
33
+ // Persons
34
+ // ============================================
35
+
36
+ async listPersons(options: { start?: number; limit?: number; sort?: string } = {}): Promise<Person[]> {
37
+ const response = await this.client.get<PipedriveListResponse<Person>>('/persons', {
38
+ start: options.start,
39
+ limit: options.limit || 100,
40
+ sort: options.sort,
41
+ });
42
+ return response.data || [];
43
+ }
44
+
45
+ async getPerson(id: number): Promise<Person> {
46
+ const response = await this.client.get<PipedriveResponse<Person>>(`/persons/${id}`);
47
+ return response.data;
48
+ }
49
+
50
+ async createPerson(input: CreatePersonInput): Promise<Person> {
51
+ const response = await this.client.post<PipedriveResponse<Person>>('/persons', input);
52
+ return response.data;
53
+ }
54
+
55
+ async updatePerson(id: number, input: Partial<CreatePersonInput>): Promise<Person> {
56
+ const response = await this.client.put<PipedriveResponse<Person>>(`/persons/${id}`, input);
57
+ return response.data;
58
+ }
59
+
60
+ async deletePerson(id: number): Promise<void> {
61
+ await this.client.delete(`/persons/${id}`);
62
+ }
63
+
64
+ async searchPersons(term: string, options: { start?: number; limit?: number } = {}): Promise<Person[]> {
65
+ const response = await this.client.get<PipedriveListResponse<{ item: Person }>>('/persons/search', {
66
+ term,
67
+ start: options.start,
68
+ limit: options.limit || 100,
69
+ });
70
+ return (response.data || []).map(r => r.item);
71
+ }
72
+
73
+ // ============================================
74
+ // Organizations
75
+ // ============================================
76
+
77
+ async listOrganizations(options: { start?: number; limit?: number; sort?: string } = {}): Promise<Organization[]> {
78
+ const response = await this.client.get<PipedriveListResponse<Organization>>('/organizations', {
79
+ start: options.start,
80
+ limit: options.limit || 100,
81
+ sort: options.sort,
82
+ });
83
+ return response.data || [];
84
+ }
85
+
86
+ async getOrganization(id: number): Promise<Organization> {
87
+ const response = await this.client.get<PipedriveResponse<Organization>>(`/organizations/${id}`);
88
+ return response.data;
89
+ }
90
+
91
+ async createOrganization(input: CreateOrganizationInput): Promise<Organization> {
92
+ const response = await this.client.post<PipedriveResponse<Organization>>('/organizations', input);
93
+ return response.data;
94
+ }
95
+
96
+ async updateOrganization(id: number, input: Partial<CreateOrganizationInput>): Promise<Organization> {
97
+ const response = await this.client.put<PipedriveResponse<Organization>>(`/organizations/${id}`, input);
98
+ return response.data;
99
+ }
100
+
101
+ async deleteOrganization(id: number): Promise<void> {
102
+ await this.client.delete(`/organizations/${id}`);
103
+ }
104
+
105
+ async searchOrganizations(term: string, options: { start?: number; limit?: number } = {}): Promise<Organization[]> {
106
+ const response = await this.client.get<PipedriveListResponse<{ item: Organization }>>('/organizations/search', {
107
+ term,
108
+ start: options.start,
109
+ limit: options.limit || 100,
110
+ });
111
+ return (response.data || []).map(r => r.item);
112
+ }
113
+
114
+ // ============================================
115
+ // Deals
116
+ // ============================================
117
+
118
+ async listDeals(options: { start?: number; limit?: number; status?: string; sort?: string } = {}): Promise<Deal[]> {
119
+ const response = await this.client.get<PipedriveListResponse<Deal>>('/deals', {
120
+ start: options.start,
121
+ limit: options.limit || 100,
122
+ status: options.status,
123
+ sort: options.sort,
124
+ });
125
+ return response.data || [];
126
+ }
127
+
128
+ async getDeal(id: number): Promise<Deal> {
129
+ const response = await this.client.get<PipedriveResponse<Deal>>(`/deals/${id}`);
130
+ return response.data;
131
+ }
132
+
133
+ async createDeal(input: CreateDealInput): Promise<Deal> {
134
+ const response = await this.client.post<PipedriveResponse<Deal>>('/deals', input);
135
+ return response.data;
136
+ }
137
+
138
+ async updateDeal(id: number, input: Partial<CreateDealInput>): Promise<Deal> {
139
+ const response = await this.client.put<PipedriveResponse<Deal>>(`/deals/${id}`, input);
140
+ return response.data;
141
+ }
142
+
143
+ async deleteDeal(id: number): Promise<void> {
144
+ await this.client.delete(`/deals/${id}`);
145
+ }
146
+
147
+ async searchDeals(term: string, options: { start?: number; limit?: number } = {}): Promise<Deal[]> {
148
+ const response = await this.client.get<PipedriveListResponse<{ item: Deal }>>('/deals/search', {
149
+ term,
150
+ start: options.start,
151
+ limit: options.limit || 100,
152
+ });
153
+ return (response.data || []).map(r => r.item);
154
+ }
155
+
156
+ // ============================================
157
+ // Leads
158
+ // ============================================
159
+
160
+ async listLeads(options: { start?: number; limit?: number; archived?: boolean } = {}): Promise<Lead[]> {
161
+ const response = await this.client.get<PipedriveListResponse<Lead>>('/leads', {
162
+ start: options.start,
163
+ limit: options.limit || 100,
164
+ archived_status: options.archived ? 'archived' : 'not_archived',
165
+ });
166
+ return response.data || [];
167
+ }
168
+
169
+ async getLead(id: string): Promise<Lead> {
170
+ const response = await this.client.get<PipedriveResponse<Lead>>(`/leads/${id}`);
171
+ return response.data;
172
+ }
173
+
174
+ async createLead(input: CreateLeadInput): Promise<Lead> {
175
+ const response = await this.client.post<PipedriveResponse<Lead>>('/leads', input);
176
+ return response.data;
177
+ }
178
+
179
+ async updateLead(id: string, input: Partial<CreateLeadInput>): Promise<Lead> {
180
+ const response = await this.client.request<PipedriveResponse<Lead>>(`/leads/${id}`, {
181
+ method: 'PATCH',
182
+ body: input as Record<string, unknown>,
183
+ });
184
+ return response.data;
185
+ }
186
+
187
+ async deleteLead(id: string): Promise<void> {
188
+ await this.client.delete(`/leads/${id}`);
189
+ }
190
+
191
+ // ============================================
192
+ // Activities
193
+ // ============================================
194
+
195
+ async listActivities(options: { start?: number; limit?: number; done?: boolean; type?: string } = {}): Promise<Activity[]> {
196
+ const response = await this.client.get<PipedriveListResponse<Activity>>('/activities', {
197
+ start: options.start,
198
+ limit: options.limit || 100,
199
+ done: options.done !== undefined ? (options.done ? 1 : 0) : undefined,
200
+ type: options.type,
201
+ });
202
+ return response.data || [];
203
+ }
204
+
205
+ async getActivity(id: number): Promise<Activity> {
206
+ const response = await this.client.get<PipedriveResponse<Activity>>(`/activities/${id}`);
207
+ return response.data;
208
+ }
209
+
210
+ async createActivity(input: CreateActivityInput): Promise<Activity> {
211
+ const response = await this.client.post<PipedriveResponse<Activity>>('/activities', input);
212
+ return response.data;
213
+ }
214
+
215
+ async updateActivity(id: number, input: Partial<CreateActivityInput>): Promise<Activity> {
216
+ const response = await this.client.put<PipedriveResponse<Activity>>(`/activities/${id}`, input);
217
+ return response.data;
218
+ }
219
+
220
+ async deleteActivity(id: number): Promise<void> {
221
+ await this.client.delete(`/activities/${id}`);
222
+ }
223
+
224
+ // ============================================
225
+ // Pipelines
226
+ // ============================================
227
+
228
+ async listPipelines(): Promise<Pipeline[]> {
229
+ const response = await this.client.get<PipedriveListResponse<Pipeline>>('/pipelines');
230
+ return response.data || [];
231
+ }
232
+
233
+ async getPipeline(id: number): Promise<Pipeline> {
234
+ const response = await this.client.get<PipedriveResponse<Pipeline>>(`/pipelines/${id}`);
235
+ return response.data;
236
+ }
237
+
238
+ // ============================================
239
+ // Stages
240
+ // ============================================
241
+
242
+ async listStages(pipelineId?: number): Promise<Stage[]> {
243
+ const response = await this.client.get<PipedriveListResponse<Stage>>('/stages', {
244
+ pipeline_id: pipelineId,
245
+ });
246
+ return response.data || [];
247
+ }
248
+
249
+ async getStage(id: number): Promise<Stage> {
250
+ const response = await this.client.get<PipedriveResponse<Stage>>(`/stages/${id}`);
251
+ return response.data;
252
+ }
253
+
254
+ // ============================================
255
+ // Notes
256
+ // ============================================
257
+
258
+ async listNotes(options: { start?: number; limit?: number; deal_id?: number; person_id?: number; org_id?: number } = {}): Promise<Note[]> {
259
+ const response = await this.client.get<PipedriveListResponse<Note>>('/notes', {
260
+ start: options.start,
261
+ limit: options.limit || 100,
262
+ deal_id: options.deal_id,
263
+ person_id: options.person_id,
264
+ org_id: options.org_id,
265
+ });
266
+ return response.data || [];
267
+ }
268
+
269
+ async getNote(id: number): Promise<Note> {
270
+ const response = await this.client.get<PipedriveResponse<Note>>(`/notes/${id}`);
271
+ return response.data;
272
+ }
273
+
274
+ async createNote(input: CreateNoteInput): Promise<Note> {
275
+ const response = await this.client.post<PipedriveResponse<Note>>('/notes', input);
276
+ return response.data;
277
+ }
278
+
279
+ async updateNote(id: number, input: Partial<CreateNoteInput>): Promise<Note> {
280
+ const response = await this.client.put<PipedriveResponse<Note>>(`/notes/${id}`, input);
281
+ return response.data;
282
+ }
283
+
284
+ async deleteNote(id: number): Promise<void> {
285
+ await this.client.delete(`/notes/${id}`);
286
+ }
287
+
288
+ // ============================================
289
+ // Users
290
+ // ============================================
291
+
292
+ async listUsers(): Promise<User[]> {
293
+ const response = await this.client.get<PipedriveListResponse<User>>('/users');
294
+ return response.data || [];
295
+ }
296
+
297
+ async getUser(id: number): Promise<User> {
298
+ const response = await this.client.get<PipedriveResponse<User>>(`/users/${id}`);
299
+ return response.data;
300
+ }
301
+
302
+ async getCurrentUser(): Promise<User> {
303
+ const response = await this.client.get<PipedriveResponse<User>>('/users/me');
304
+ return response.data;
305
+ }
306
+ }