@bubblelab/bubble-core 0.1.174 → 0.1.176
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/dist/bubble-bundle.d.ts +105 -27
- package/dist/bubble-factory.d.ts.map +1 -1
- package/dist/bubble-factory.js +8 -0
- package/dist/bubble-factory.js.map +1 -1
- package/dist/bubbles/service-bubble/attio/attio.d.ts +563 -0
- package/dist/bubbles/service-bubble/attio/attio.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/attio/attio.js +484 -0
- package/dist/bubbles/service-bubble/attio/attio.js.map +1 -0
- package/dist/bubbles/service-bubble/attio/attio.schema.d.ts +527 -0
- package/dist/bubbles/service-bubble/attio/attio.schema.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/attio/attio.schema.js +386 -0
- package/dist/bubbles/service-bubble/attio/attio.schema.js.map +1 -0
- package/dist/bubbles/service-bubble/attio/attio.utils.d.ts +1 -0
- package/dist/bubbles/service-bubble/attio/attio.utils.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/attio/attio.utils.js +4 -0
- package/dist/bubbles/service-bubble/attio/attio.utils.js.map +1 -0
- package/dist/bubbles/service-bubble/attio/index.d.ts +3 -0
- package/dist/bubbles/service-bubble/attio/index.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/attio/index.js +3 -0
- package/dist/bubbles/service-bubble/attio/index.js.map +1 -0
- package/dist/bubbles/service-bubble/capability-pipeline.js +2 -2
- package/dist/bubbles/service-bubble/capability-pipeline.js.map +1 -1
- package/dist/bubbles/service-bubble/hubspot/hubspot.d.ts +388 -0
- package/dist/bubbles/service-bubble/hubspot/hubspot.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/hubspot/hubspot.js +241 -0
- package/dist/bubbles/service-bubble/hubspot/hubspot.js.map +1 -0
- package/dist/bubbles/service-bubble/hubspot/hubspot.schema.d.ts +345 -0
- package/dist/bubbles/service-bubble/hubspot/hubspot.schema.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/hubspot/hubspot.schema.js +180 -0
- package/dist/bubbles/service-bubble/hubspot/hubspot.schema.js.map +1 -0
- package/dist/bubbles/service-bubble/hubspot/index.d.ts +3 -0
- package/dist/bubbles/service-bubble/hubspot/index.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/hubspot/index.js +3 -0
- package/dist/bubbles/service-bubble/hubspot/index.js.map +1 -0
- package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.d.ts +5 -30
- package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.js +70 -204
- package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.js.map +1 -1
- package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.types.d.ts +4 -0
- package/dist/bubbles/tool-bubble/browser-tools/_shared/ai/ai-browser-agent.types.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.d.ts +31 -0
- package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.d.ts.map +1 -1
- package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.js +202 -39
- package/dist/bubbles/tool-bubble/browser-tools/linkedin-connection/tool.js.map +1 -1
- package/dist/bubbles.json +1598 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { ServiceBubble } from '../../../types/service-bubble-class.js';
|
|
2
|
+
import type { BubbleContext } from '../../../types/bubble.js';
|
|
3
|
+
import { CredentialType } from '@bubblelab/shared-schemas';
|
|
4
|
+
import { type HubSpotParamsInput, type HubSpotResult } from './hubspot.schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* HubSpot CRM Service Bubble
|
|
7
|
+
*
|
|
8
|
+
* Comprehensive HubSpot CRM integration for managing contacts, companies, deals, and tickets.
|
|
9
|
+
*
|
|
10
|
+
* Features:
|
|
11
|
+
* - Full CRUD operations for all CRM object types
|
|
12
|
+
* - Advanced search with filter groups (AND/OR logic)
|
|
13
|
+
* - Property-based data management
|
|
14
|
+
* - Pagination support for large datasets
|
|
15
|
+
*
|
|
16
|
+
* Use cases:
|
|
17
|
+
* - Lead management and contact synchronization
|
|
18
|
+
* - Company and deal pipeline tracking
|
|
19
|
+
* - Support ticket management
|
|
20
|
+
* - CRM data enrichment and automation
|
|
21
|
+
*
|
|
22
|
+
* Security Features:
|
|
23
|
+
* - OAuth 2.0 authentication with HubSpot
|
|
24
|
+
* - Scoped access permissions
|
|
25
|
+
* - Secure credential handling
|
|
26
|
+
*/
|
|
27
|
+
export declare class HubSpotBubble<T extends HubSpotParamsInput = HubSpotParamsInput> extends ServiceBubble<T, Extract<HubSpotResult, {
|
|
28
|
+
operation: T['operation'];
|
|
29
|
+
}>> {
|
|
30
|
+
static readonly type: "service";
|
|
31
|
+
static readonly service = "hubspot";
|
|
32
|
+
static readonly authType: "oauth";
|
|
33
|
+
static readonly bubbleName = "hubspot";
|
|
34
|
+
static readonly schema: import("zod").ZodDiscriminatedUnion<"operation", [import("zod").ZodObject<{
|
|
35
|
+
operation: import("zod").ZodLiteral<"create_record">;
|
|
36
|
+
object_type: import("zod").ZodEnum<["contacts", "companies", "deals", "tickets"]>;
|
|
37
|
+
properties: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>;
|
|
38
|
+
credentials: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodNativeEnum<typeof CredentialType>, import("zod").ZodString>>;
|
|
39
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
40
|
+
properties: Record<string, string>;
|
|
41
|
+
operation: "create_record";
|
|
42
|
+
object_type: "deals" | "contacts" | "companies" | "tickets";
|
|
43
|
+
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
44
|
+
}, {
|
|
45
|
+
properties: Record<string, string>;
|
|
46
|
+
operation: "create_record";
|
|
47
|
+
object_type: "deals" | "contacts" | "companies" | "tickets";
|
|
48
|
+
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
49
|
+
}>, import("zod").ZodObject<{
|
|
50
|
+
operation: import("zod").ZodLiteral<"get_record">;
|
|
51
|
+
object_type: import("zod").ZodEnum<["contacts", "companies", "deals", "tickets"]>;
|
|
52
|
+
record_id: import("zod").ZodString;
|
|
53
|
+
properties: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
54
|
+
credentials: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodNativeEnum<typeof CredentialType>, import("zod").ZodString>>;
|
|
55
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
56
|
+
operation: "get_record";
|
|
57
|
+
record_id: string;
|
|
58
|
+
object_type: "deals" | "contacts" | "companies" | "tickets";
|
|
59
|
+
properties?: string[] | undefined;
|
|
60
|
+
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
61
|
+
}, {
|
|
62
|
+
operation: "get_record";
|
|
63
|
+
record_id: string;
|
|
64
|
+
object_type: "deals" | "contacts" | "companies" | "tickets";
|
|
65
|
+
properties?: string[] | undefined;
|
|
66
|
+
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
67
|
+
}>, import("zod").ZodObject<{
|
|
68
|
+
operation: import("zod").ZodLiteral<"update_record">;
|
|
69
|
+
object_type: import("zod").ZodEnum<["contacts", "companies", "deals", "tickets"]>;
|
|
70
|
+
record_id: import("zod").ZodString;
|
|
71
|
+
properties: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>;
|
|
72
|
+
credentials: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodNativeEnum<typeof CredentialType>, import("zod").ZodString>>;
|
|
73
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
74
|
+
properties: Record<string, string>;
|
|
75
|
+
operation: "update_record";
|
|
76
|
+
record_id: string;
|
|
77
|
+
object_type: "deals" | "contacts" | "companies" | "tickets";
|
|
78
|
+
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
79
|
+
}, {
|
|
80
|
+
properties: Record<string, string>;
|
|
81
|
+
operation: "update_record";
|
|
82
|
+
record_id: string;
|
|
83
|
+
object_type: "deals" | "contacts" | "companies" | "tickets";
|
|
84
|
+
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
85
|
+
}>, import("zod").ZodObject<{
|
|
86
|
+
operation: import("zod").ZodLiteral<"search_records">;
|
|
87
|
+
object_type: import("zod").ZodEnum<["contacts", "companies", "deals", "tickets"]>;
|
|
88
|
+
filter_groups: import("zod").ZodArray<import("zod").ZodObject<{
|
|
89
|
+
filters: import("zod").ZodArray<import("zod").ZodObject<{
|
|
90
|
+
propertyName: import("zod").ZodString;
|
|
91
|
+
operator: import("zod").ZodEnum<["EQ", "NEQ", "LT", "LTE", "GT", "GTE", "BETWEEN", "IN", "NOT_IN", "HAS_PROPERTY", "NOT_HAS_PROPERTY", "CONTAINS_TOKEN", "NOT_CONTAINS_TOKEN"]>;
|
|
92
|
+
value: import("zod").ZodOptional<import("zod").ZodString>;
|
|
93
|
+
highValue: import("zod").ZodOptional<import("zod").ZodString>;
|
|
94
|
+
values: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
95
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
96
|
+
propertyName: string;
|
|
97
|
+
operator: "GT" | "IN" | "LT" | "EQ" | "NEQ" | "LTE" | "GTE" | "BETWEEN" | "NOT_IN" | "HAS_PROPERTY" | "NOT_HAS_PROPERTY" | "CONTAINS_TOKEN" | "NOT_CONTAINS_TOKEN";
|
|
98
|
+
value?: string | undefined;
|
|
99
|
+
values?: string[] | undefined;
|
|
100
|
+
highValue?: string | undefined;
|
|
101
|
+
}, {
|
|
102
|
+
propertyName: string;
|
|
103
|
+
operator: "GT" | "IN" | "LT" | "EQ" | "NEQ" | "LTE" | "GTE" | "BETWEEN" | "NOT_IN" | "HAS_PROPERTY" | "NOT_HAS_PROPERTY" | "CONTAINS_TOKEN" | "NOT_CONTAINS_TOKEN";
|
|
104
|
+
value?: string | undefined;
|
|
105
|
+
values?: string[] | undefined;
|
|
106
|
+
highValue?: string | undefined;
|
|
107
|
+
}>, "many">;
|
|
108
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
109
|
+
filters: {
|
|
110
|
+
propertyName: string;
|
|
111
|
+
operator: "GT" | "IN" | "LT" | "EQ" | "NEQ" | "LTE" | "GTE" | "BETWEEN" | "NOT_IN" | "HAS_PROPERTY" | "NOT_HAS_PROPERTY" | "CONTAINS_TOKEN" | "NOT_CONTAINS_TOKEN";
|
|
112
|
+
value?: string | undefined;
|
|
113
|
+
values?: string[] | undefined;
|
|
114
|
+
highValue?: string | undefined;
|
|
115
|
+
}[];
|
|
116
|
+
}, {
|
|
117
|
+
filters: {
|
|
118
|
+
propertyName: string;
|
|
119
|
+
operator: "GT" | "IN" | "LT" | "EQ" | "NEQ" | "LTE" | "GTE" | "BETWEEN" | "NOT_IN" | "HAS_PROPERTY" | "NOT_HAS_PROPERTY" | "CONTAINS_TOKEN" | "NOT_CONTAINS_TOKEN";
|
|
120
|
+
value?: string | undefined;
|
|
121
|
+
values?: string[] | undefined;
|
|
122
|
+
highValue?: string | undefined;
|
|
123
|
+
}[];
|
|
124
|
+
}>, "many">;
|
|
125
|
+
properties: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
|
|
126
|
+
limit: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodNumber>>;
|
|
127
|
+
after: import("zod").ZodOptional<import("zod").ZodString>;
|
|
128
|
+
credentials: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodNativeEnum<typeof CredentialType>, import("zod").ZodString>>;
|
|
129
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
130
|
+
operation: "search_records";
|
|
131
|
+
limit: number;
|
|
132
|
+
object_type: "deals" | "contacts" | "companies" | "tickets";
|
|
133
|
+
filter_groups: {
|
|
134
|
+
filters: {
|
|
135
|
+
propertyName: string;
|
|
136
|
+
operator: "GT" | "IN" | "LT" | "EQ" | "NEQ" | "LTE" | "GTE" | "BETWEEN" | "NOT_IN" | "HAS_PROPERTY" | "NOT_HAS_PROPERTY" | "CONTAINS_TOKEN" | "NOT_CONTAINS_TOKEN";
|
|
137
|
+
value?: string | undefined;
|
|
138
|
+
values?: string[] | undefined;
|
|
139
|
+
highValue?: string | undefined;
|
|
140
|
+
}[];
|
|
141
|
+
}[];
|
|
142
|
+
properties?: string[] | undefined;
|
|
143
|
+
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
144
|
+
after?: string | undefined;
|
|
145
|
+
}, {
|
|
146
|
+
operation: "search_records";
|
|
147
|
+
object_type: "deals" | "contacts" | "companies" | "tickets";
|
|
148
|
+
filter_groups: {
|
|
149
|
+
filters: {
|
|
150
|
+
propertyName: string;
|
|
151
|
+
operator: "GT" | "IN" | "LT" | "EQ" | "NEQ" | "LTE" | "GTE" | "BETWEEN" | "NOT_IN" | "HAS_PROPERTY" | "NOT_HAS_PROPERTY" | "CONTAINS_TOKEN" | "NOT_CONTAINS_TOKEN";
|
|
152
|
+
value?: string | undefined;
|
|
153
|
+
values?: string[] | undefined;
|
|
154
|
+
highValue?: string | undefined;
|
|
155
|
+
}[];
|
|
156
|
+
}[];
|
|
157
|
+
properties?: string[] | undefined;
|
|
158
|
+
credentials?: Partial<Record<CredentialType, string>> | undefined;
|
|
159
|
+
limit?: number | undefined;
|
|
160
|
+
after?: string | undefined;
|
|
161
|
+
}>]>;
|
|
162
|
+
static readonly resultSchema: import("zod").ZodDiscriminatedUnion<"operation", [import("zod").ZodObject<{
|
|
163
|
+
operation: import("zod").ZodLiteral<"create_record">;
|
|
164
|
+
success: import("zod").ZodBoolean;
|
|
165
|
+
record: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
166
|
+
id: import("zod").ZodString;
|
|
167
|
+
properties: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
168
|
+
createdAt: import("zod").ZodOptional<import("zod").ZodString>;
|
|
169
|
+
updatedAt: import("zod").ZodOptional<import("zod").ZodString>;
|
|
170
|
+
archived: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
171
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
172
|
+
properties: Record<string, unknown>;
|
|
173
|
+
id: string;
|
|
174
|
+
createdAt?: string | undefined;
|
|
175
|
+
archived?: boolean | undefined;
|
|
176
|
+
updatedAt?: string | undefined;
|
|
177
|
+
}, {
|
|
178
|
+
properties: Record<string, unknown>;
|
|
179
|
+
id: string;
|
|
180
|
+
createdAt?: string | undefined;
|
|
181
|
+
archived?: boolean | undefined;
|
|
182
|
+
updatedAt?: string | undefined;
|
|
183
|
+
}>>;
|
|
184
|
+
error: import("zod").ZodString;
|
|
185
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
186
|
+
success: boolean;
|
|
187
|
+
error: string;
|
|
188
|
+
operation: "create_record";
|
|
189
|
+
record?: {
|
|
190
|
+
properties: Record<string, unknown>;
|
|
191
|
+
id: string;
|
|
192
|
+
createdAt?: string | undefined;
|
|
193
|
+
archived?: boolean | undefined;
|
|
194
|
+
updatedAt?: string | undefined;
|
|
195
|
+
} | undefined;
|
|
196
|
+
}, {
|
|
197
|
+
success: boolean;
|
|
198
|
+
error: string;
|
|
199
|
+
operation: "create_record";
|
|
200
|
+
record?: {
|
|
201
|
+
properties: Record<string, unknown>;
|
|
202
|
+
id: string;
|
|
203
|
+
createdAt?: string | undefined;
|
|
204
|
+
archived?: boolean | undefined;
|
|
205
|
+
updatedAt?: string | undefined;
|
|
206
|
+
} | undefined;
|
|
207
|
+
}>, import("zod").ZodObject<{
|
|
208
|
+
operation: import("zod").ZodLiteral<"get_record">;
|
|
209
|
+
success: import("zod").ZodBoolean;
|
|
210
|
+
record: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
211
|
+
id: import("zod").ZodString;
|
|
212
|
+
properties: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
213
|
+
createdAt: import("zod").ZodOptional<import("zod").ZodString>;
|
|
214
|
+
updatedAt: import("zod").ZodOptional<import("zod").ZodString>;
|
|
215
|
+
archived: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
216
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
217
|
+
properties: Record<string, unknown>;
|
|
218
|
+
id: string;
|
|
219
|
+
createdAt?: string | undefined;
|
|
220
|
+
archived?: boolean | undefined;
|
|
221
|
+
updatedAt?: string | undefined;
|
|
222
|
+
}, {
|
|
223
|
+
properties: Record<string, unknown>;
|
|
224
|
+
id: string;
|
|
225
|
+
createdAt?: string | undefined;
|
|
226
|
+
archived?: boolean | undefined;
|
|
227
|
+
updatedAt?: string | undefined;
|
|
228
|
+
}>>;
|
|
229
|
+
error: import("zod").ZodString;
|
|
230
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
231
|
+
success: boolean;
|
|
232
|
+
error: string;
|
|
233
|
+
operation: "get_record";
|
|
234
|
+
record?: {
|
|
235
|
+
properties: Record<string, unknown>;
|
|
236
|
+
id: string;
|
|
237
|
+
createdAt?: string | undefined;
|
|
238
|
+
archived?: boolean | undefined;
|
|
239
|
+
updatedAt?: string | undefined;
|
|
240
|
+
} | undefined;
|
|
241
|
+
}, {
|
|
242
|
+
success: boolean;
|
|
243
|
+
error: string;
|
|
244
|
+
operation: "get_record";
|
|
245
|
+
record?: {
|
|
246
|
+
properties: Record<string, unknown>;
|
|
247
|
+
id: string;
|
|
248
|
+
createdAt?: string | undefined;
|
|
249
|
+
archived?: boolean | undefined;
|
|
250
|
+
updatedAt?: string | undefined;
|
|
251
|
+
} | undefined;
|
|
252
|
+
}>, import("zod").ZodObject<{
|
|
253
|
+
operation: import("zod").ZodLiteral<"update_record">;
|
|
254
|
+
success: import("zod").ZodBoolean;
|
|
255
|
+
record: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
256
|
+
id: import("zod").ZodString;
|
|
257
|
+
properties: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
258
|
+
createdAt: import("zod").ZodOptional<import("zod").ZodString>;
|
|
259
|
+
updatedAt: import("zod").ZodOptional<import("zod").ZodString>;
|
|
260
|
+
archived: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
261
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
262
|
+
properties: Record<string, unknown>;
|
|
263
|
+
id: string;
|
|
264
|
+
createdAt?: string | undefined;
|
|
265
|
+
archived?: boolean | undefined;
|
|
266
|
+
updatedAt?: string | undefined;
|
|
267
|
+
}, {
|
|
268
|
+
properties: Record<string, unknown>;
|
|
269
|
+
id: string;
|
|
270
|
+
createdAt?: string | undefined;
|
|
271
|
+
archived?: boolean | undefined;
|
|
272
|
+
updatedAt?: string | undefined;
|
|
273
|
+
}>>;
|
|
274
|
+
error: import("zod").ZodString;
|
|
275
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
276
|
+
success: boolean;
|
|
277
|
+
error: string;
|
|
278
|
+
operation: "update_record";
|
|
279
|
+
record?: {
|
|
280
|
+
properties: Record<string, unknown>;
|
|
281
|
+
id: string;
|
|
282
|
+
createdAt?: string | undefined;
|
|
283
|
+
archived?: boolean | undefined;
|
|
284
|
+
updatedAt?: string | undefined;
|
|
285
|
+
} | undefined;
|
|
286
|
+
}, {
|
|
287
|
+
success: boolean;
|
|
288
|
+
error: string;
|
|
289
|
+
operation: "update_record";
|
|
290
|
+
record?: {
|
|
291
|
+
properties: Record<string, unknown>;
|
|
292
|
+
id: string;
|
|
293
|
+
createdAt?: string | undefined;
|
|
294
|
+
archived?: boolean | undefined;
|
|
295
|
+
updatedAt?: string | undefined;
|
|
296
|
+
} | undefined;
|
|
297
|
+
}>, import("zod").ZodObject<{
|
|
298
|
+
operation: import("zod").ZodLiteral<"search_records">;
|
|
299
|
+
success: import("zod").ZodBoolean;
|
|
300
|
+
results: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
301
|
+
id: import("zod").ZodString;
|
|
302
|
+
properties: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
303
|
+
createdAt: import("zod").ZodOptional<import("zod").ZodString>;
|
|
304
|
+
updatedAt: import("zod").ZodOptional<import("zod").ZodString>;
|
|
305
|
+
archived: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
306
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
307
|
+
properties: Record<string, unknown>;
|
|
308
|
+
id: string;
|
|
309
|
+
createdAt?: string | undefined;
|
|
310
|
+
archived?: boolean | undefined;
|
|
311
|
+
updatedAt?: string | undefined;
|
|
312
|
+
}, {
|
|
313
|
+
properties: Record<string, unknown>;
|
|
314
|
+
id: string;
|
|
315
|
+
createdAt?: string | undefined;
|
|
316
|
+
archived?: boolean | undefined;
|
|
317
|
+
updatedAt?: string | undefined;
|
|
318
|
+
}>, "many">>;
|
|
319
|
+
total: import("zod").ZodOptional<import("zod").ZodNumber>;
|
|
320
|
+
paging: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
321
|
+
next: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
322
|
+
after: import("zod").ZodString;
|
|
323
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
324
|
+
after: string;
|
|
325
|
+
}, {
|
|
326
|
+
after: string;
|
|
327
|
+
}>>;
|
|
328
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
329
|
+
next?: {
|
|
330
|
+
after: string;
|
|
331
|
+
} | undefined;
|
|
332
|
+
}, {
|
|
333
|
+
next?: {
|
|
334
|
+
after: string;
|
|
335
|
+
} | undefined;
|
|
336
|
+
}>>;
|
|
337
|
+
error: import("zod").ZodString;
|
|
338
|
+
}, "strip", import("zod").ZodTypeAny, {
|
|
339
|
+
success: boolean;
|
|
340
|
+
error: string;
|
|
341
|
+
operation: "search_records";
|
|
342
|
+
total?: number | undefined;
|
|
343
|
+
results?: {
|
|
344
|
+
properties: Record<string, unknown>;
|
|
345
|
+
id: string;
|
|
346
|
+
createdAt?: string | undefined;
|
|
347
|
+
archived?: boolean | undefined;
|
|
348
|
+
updatedAt?: string | undefined;
|
|
349
|
+
}[] | undefined;
|
|
350
|
+
paging?: {
|
|
351
|
+
next?: {
|
|
352
|
+
after: string;
|
|
353
|
+
} | undefined;
|
|
354
|
+
} | undefined;
|
|
355
|
+
}, {
|
|
356
|
+
success: boolean;
|
|
357
|
+
error: string;
|
|
358
|
+
operation: "search_records";
|
|
359
|
+
total?: number | undefined;
|
|
360
|
+
results?: {
|
|
361
|
+
properties: Record<string, unknown>;
|
|
362
|
+
id: string;
|
|
363
|
+
createdAt?: string | undefined;
|
|
364
|
+
archived?: boolean | undefined;
|
|
365
|
+
updatedAt?: string | undefined;
|
|
366
|
+
}[] | undefined;
|
|
367
|
+
paging?: {
|
|
368
|
+
next?: {
|
|
369
|
+
after: string;
|
|
370
|
+
} | undefined;
|
|
371
|
+
} | undefined;
|
|
372
|
+
}>]>;
|
|
373
|
+
static readonly shortDescription = "HubSpot CRM integration for contacts, companies, deals, and tickets";
|
|
374
|
+
static readonly longDescription = "\n HubSpot CRM service integration for comprehensive customer relationship management.\n\n Features:\n - Create, read, update, and search contacts, companies, deals, and tickets\n - Advanced search with filter groups supporting AND/OR logic\n - Flexible property-based data management\n - Pagination for handling large datasets\n\n Use cases:\n - Lead management and contact synchronization\n - Company tracking and deal pipeline management\n - Support ticket creation and tracking\n - CRM data enrichment and workflow automation\n\n Security Features:\n - OAuth 2.0 authentication with HubSpot\n - Scoped access permissions for CRM operations\n - Secure credential handling and validation\n ";
|
|
375
|
+
static readonly alias = "crm";
|
|
376
|
+
constructor(params?: T, context?: BubbleContext);
|
|
377
|
+
testCredential(): Promise<boolean>;
|
|
378
|
+
protected chooseCredential(): string | undefined;
|
|
379
|
+
private makeHubSpotApiRequest;
|
|
380
|
+
protected performAction(context?: BubbleContext): Promise<Extract<HubSpotResult, {
|
|
381
|
+
operation: T['operation'];
|
|
382
|
+
}>>;
|
|
383
|
+
private createRecord;
|
|
384
|
+
private getRecord;
|
|
385
|
+
private updateRecord;
|
|
386
|
+
private searchRecords;
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=hubspot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubspot.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/hubspot/hubspot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,aAAa,CACxB,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,CACjD,SAAQ,aAAa,CACrB,CAAC,EACD,OAAO,CAAC,aAAa,EAAE;IAAE,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC,CACtD;IACC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IAC5C,MAAM,CAAC,QAAQ,CAAC,UAAU,aAAa;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAuB;IAC7C,MAAM,CAAC,QAAQ,CAAC,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAuB;IACnD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,yEACwC;IACxE,MAAM,CAAC,QAAQ,CAAC,eAAe,wuBAmB7B;IACF,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS;gBAG5B,MAAM,GAAE,CAIF,EACN,OAAO,CAAC,EAAE,aAAa;IAKZ,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB/C,SAAS,CAAC,gBAAgB,IAAI,MAAM,GAAG,SAAS;YAYlC,qBAAqB;cAwCnB,aAAa,CAC3B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;QAAE,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC,CAAC;YAqDnD,YAAY;YAyBZ,SAAS;YA6BT,YAAY;YAyBZ,aAAa;CAiD5B"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { ServiceBubble } from '../../../types/service-bubble-class.js';
|
|
2
|
+
import { CredentialType } from '@bubblelab/shared-schemas';
|
|
3
|
+
import { HubSpotParamsSchema, HubSpotResultSchema, } from './hubspot.schema.js';
|
|
4
|
+
/**
|
|
5
|
+
* HubSpot CRM Service Bubble
|
|
6
|
+
*
|
|
7
|
+
* Comprehensive HubSpot CRM integration for managing contacts, companies, deals, and tickets.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Full CRUD operations for all CRM object types
|
|
11
|
+
* - Advanced search with filter groups (AND/OR logic)
|
|
12
|
+
* - Property-based data management
|
|
13
|
+
* - Pagination support for large datasets
|
|
14
|
+
*
|
|
15
|
+
* Use cases:
|
|
16
|
+
* - Lead management and contact synchronization
|
|
17
|
+
* - Company and deal pipeline tracking
|
|
18
|
+
* - Support ticket management
|
|
19
|
+
* - CRM data enrichment and automation
|
|
20
|
+
*
|
|
21
|
+
* Security Features:
|
|
22
|
+
* - OAuth 2.0 authentication with HubSpot
|
|
23
|
+
* - Scoped access permissions
|
|
24
|
+
* - Secure credential handling
|
|
25
|
+
*/
|
|
26
|
+
export class HubSpotBubble extends ServiceBubble {
|
|
27
|
+
static type = 'service';
|
|
28
|
+
static service = 'hubspot';
|
|
29
|
+
static authType = 'oauth';
|
|
30
|
+
static bubbleName = 'hubspot';
|
|
31
|
+
static schema = HubSpotParamsSchema;
|
|
32
|
+
static resultSchema = HubSpotResultSchema;
|
|
33
|
+
static shortDescription = 'HubSpot CRM integration for contacts, companies, deals, and tickets';
|
|
34
|
+
static longDescription = `
|
|
35
|
+
HubSpot CRM service integration for comprehensive customer relationship management.
|
|
36
|
+
|
|
37
|
+
Features:
|
|
38
|
+
- Create, read, update, and search contacts, companies, deals, and tickets
|
|
39
|
+
- Advanced search with filter groups supporting AND/OR logic
|
|
40
|
+
- Flexible property-based data management
|
|
41
|
+
- Pagination for handling large datasets
|
|
42
|
+
|
|
43
|
+
Use cases:
|
|
44
|
+
- Lead management and contact synchronization
|
|
45
|
+
- Company tracking and deal pipeline management
|
|
46
|
+
- Support ticket creation and tracking
|
|
47
|
+
- CRM data enrichment and workflow automation
|
|
48
|
+
|
|
49
|
+
Security Features:
|
|
50
|
+
- OAuth 2.0 authentication with HubSpot
|
|
51
|
+
- Scoped access permissions for CRM operations
|
|
52
|
+
- Secure credential handling and validation
|
|
53
|
+
`;
|
|
54
|
+
static alias = 'crm';
|
|
55
|
+
constructor(params = {
|
|
56
|
+
operation: 'get_record',
|
|
57
|
+
object_type: 'contacts',
|
|
58
|
+
record_id: '',
|
|
59
|
+
}, context) {
|
|
60
|
+
super(params, context);
|
|
61
|
+
}
|
|
62
|
+
async testCredential() {
|
|
63
|
+
const credential = this.chooseCredential();
|
|
64
|
+
if (!credential) {
|
|
65
|
+
throw new Error('HubSpot credentials are required');
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const response = await fetch('https://api.hubapi.com/crm/v3/objects/contacts?limit=1', {
|
|
69
|
+
headers: {
|
|
70
|
+
Authorization: `Bearer ${credential}`,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
return response.ok;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
chooseCredential() {
|
|
80
|
+
const { credentials } = this.params;
|
|
81
|
+
if (!credentials || typeof credentials !== 'object') {
|
|
82
|
+
throw new Error('No HubSpot credentials provided');
|
|
83
|
+
}
|
|
84
|
+
return credentials[CredentialType.HUBSPOT_CRED];
|
|
85
|
+
}
|
|
86
|
+
async makeHubSpotApiRequest(endpoint, method = 'GET', body) {
|
|
87
|
+
const credential = this.chooseCredential();
|
|
88
|
+
if (!credential) {
|
|
89
|
+
throw new Error('HubSpot credentials are required');
|
|
90
|
+
}
|
|
91
|
+
const url = endpoint.startsWith('https://')
|
|
92
|
+
? endpoint
|
|
93
|
+
: `https://api.hubapi.com${endpoint}`;
|
|
94
|
+
const requestInit = {
|
|
95
|
+
method,
|
|
96
|
+
headers: {
|
|
97
|
+
Authorization: `Bearer ${credential}`,
|
|
98
|
+
'Content-Type': 'application/json',
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
if (body && method !== 'GET') {
|
|
102
|
+
requestInit.body = JSON.stringify(body);
|
|
103
|
+
}
|
|
104
|
+
const response = await fetch(url, requestInit);
|
|
105
|
+
if (!response.ok) {
|
|
106
|
+
const errorText = await response.text();
|
|
107
|
+
throw new Error(`HubSpot API error (${response.status}): ${errorText}`);
|
|
108
|
+
}
|
|
109
|
+
const contentType = response.headers.get('content-type');
|
|
110
|
+
if (contentType && contentType.includes('application/json')) {
|
|
111
|
+
return await response.json();
|
|
112
|
+
}
|
|
113
|
+
return await response.text();
|
|
114
|
+
}
|
|
115
|
+
async performAction(context) {
|
|
116
|
+
void context;
|
|
117
|
+
const { operation } = this.params;
|
|
118
|
+
try {
|
|
119
|
+
const result = await (async () => {
|
|
120
|
+
const parsedParams = this.params;
|
|
121
|
+
switch (operation) {
|
|
122
|
+
case 'create_record':
|
|
123
|
+
return await this.createRecord(parsedParams);
|
|
124
|
+
case 'get_record':
|
|
125
|
+
return await this.getRecord(parsedParams);
|
|
126
|
+
case 'update_record':
|
|
127
|
+
return await this.updateRecord(parsedParams);
|
|
128
|
+
case 'search_records':
|
|
129
|
+
return await this.searchRecords(parsedParams);
|
|
130
|
+
default:
|
|
131
|
+
throw new Error(`Unsupported operation: ${operation}`);
|
|
132
|
+
}
|
|
133
|
+
})();
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
return {
|
|
138
|
+
operation,
|
|
139
|
+
success: false,
|
|
140
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async createRecord(params) {
|
|
145
|
+
const { object_type, properties } = params;
|
|
146
|
+
const response = await this.makeHubSpotApiRequest(`/crm/v3/objects/${object_type}`, 'POST', { properties });
|
|
147
|
+
return {
|
|
148
|
+
operation: 'create_record',
|
|
149
|
+
success: true,
|
|
150
|
+
record: {
|
|
151
|
+
id: response.id,
|
|
152
|
+
properties: response.properties,
|
|
153
|
+
createdAt: response.createdAt,
|
|
154
|
+
updatedAt: response.updatedAt,
|
|
155
|
+
archived: response.archived,
|
|
156
|
+
},
|
|
157
|
+
error: '',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
async getRecord(params) {
|
|
161
|
+
const { object_type, record_id, properties } = params;
|
|
162
|
+
const queryParams = new URLSearchParams();
|
|
163
|
+
if (properties && properties.length > 0) {
|
|
164
|
+
queryParams.set('properties', properties.join(','));
|
|
165
|
+
}
|
|
166
|
+
const queryString = queryParams.toString();
|
|
167
|
+
const endpoint = `/crm/v3/objects/${object_type}/${record_id}${queryString ? `?${queryString}` : ''}`;
|
|
168
|
+
const response = await this.makeHubSpotApiRequest(endpoint, 'GET');
|
|
169
|
+
return {
|
|
170
|
+
operation: 'get_record',
|
|
171
|
+
success: true,
|
|
172
|
+
record: {
|
|
173
|
+
id: response.id,
|
|
174
|
+
properties: response.properties,
|
|
175
|
+
createdAt: response.createdAt,
|
|
176
|
+
updatedAt: response.updatedAt,
|
|
177
|
+
archived: response.archived,
|
|
178
|
+
},
|
|
179
|
+
error: '',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
async updateRecord(params) {
|
|
183
|
+
const { object_type, record_id, properties } = params;
|
|
184
|
+
const response = await this.makeHubSpotApiRequest(`/crm/v3/objects/${object_type}/${record_id}`, 'PATCH', { properties });
|
|
185
|
+
return {
|
|
186
|
+
operation: 'update_record',
|
|
187
|
+
success: true,
|
|
188
|
+
record: {
|
|
189
|
+
id: response.id,
|
|
190
|
+
properties: response.properties,
|
|
191
|
+
createdAt: response.createdAt,
|
|
192
|
+
updatedAt: response.updatedAt,
|
|
193
|
+
archived: response.archived,
|
|
194
|
+
},
|
|
195
|
+
error: '',
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
async searchRecords(params) {
|
|
199
|
+
const { object_type, filter_groups, properties, limit, after } = params;
|
|
200
|
+
const body = {
|
|
201
|
+
filterGroups: filter_groups.map((group) => ({
|
|
202
|
+
filters: group.filters.map((filter) => {
|
|
203
|
+
const f = {
|
|
204
|
+
propertyName: filter.propertyName,
|
|
205
|
+
operator: filter.operator,
|
|
206
|
+
};
|
|
207
|
+
if (filter.value !== undefined)
|
|
208
|
+
f.value = filter.value;
|
|
209
|
+
if (filter.highValue !== undefined)
|
|
210
|
+
f.highValue = filter.highValue;
|
|
211
|
+
if (filter.values !== undefined)
|
|
212
|
+
f.values = filter.values;
|
|
213
|
+
return f;
|
|
214
|
+
}),
|
|
215
|
+
})),
|
|
216
|
+
limit: limit || 10,
|
|
217
|
+
};
|
|
218
|
+
if (properties && properties.length > 0) {
|
|
219
|
+
body.properties = properties;
|
|
220
|
+
}
|
|
221
|
+
if (after) {
|
|
222
|
+
body.after = after;
|
|
223
|
+
}
|
|
224
|
+
const response = await this.makeHubSpotApiRequest(`/crm/v3/objects/${object_type}/search`, 'POST', body);
|
|
225
|
+
return {
|
|
226
|
+
operation: 'search_records',
|
|
227
|
+
success: true,
|
|
228
|
+
results: (response.results || []).map((r) => ({
|
|
229
|
+
id: r.id,
|
|
230
|
+
properties: r.properties,
|
|
231
|
+
createdAt: r.createdAt,
|
|
232
|
+
updatedAt: r.updatedAt,
|
|
233
|
+
archived: r.archived,
|
|
234
|
+
})),
|
|
235
|
+
total: response.total,
|
|
236
|
+
paging: response.paging,
|
|
237
|
+
error: '',
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=hubspot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubspot.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/hubspot/hubspot.ts"],"names":[],"mappings":"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"}
|