@bubblelab/bubble-core 0.1.83 → 0.1.84

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 (66) hide show
  1. package/dist/bubble-bundle.d.ts +68 -68
  2. package/dist/bubbles/service-bubble/ai-agent.d.ts +28 -28
  3. package/dist/bubbles/service-bubble/airtable.d.ts +40 -40
  4. package/dist/bubbles/service-bubble/apify/actors/google-maps-scraper.d.ts +2 -2
  5. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +20 -20
  6. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +30 -30
  7. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +26 -26
  8. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +56 -56
  9. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts +16 -16
  10. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts +31 -31
  11. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +8 -8
  12. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +153 -153
  13. package/dist/bubbles/service-bubble/apify/apify.d.ts +10 -10
  14. package/dist/bubbles/service-bubble/ashby/ashby.d.ts +40 -40
  15. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +18 -18
  16. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +2 -2
  17. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +20 -20
  18. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +74 -74
  19. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +16 -16
  20. package/dist/bubbles/service-bubble/firecrawl.d.ts +206 -206
  21. package/dist/bubbles/service-bubble/fullenrich/fullenrich.schema.d.ts +12 -12
  22. package/dist/bubbles/service-bubble/github.d.ts +28 -28
  23. package/dist/bubbles/service-bubble/gmail.d.ts +104 -104
  24. package/dist/bubbles/service-bubble/google-drive.d.ts +32 -32
  25. package/dist/bubbles/service-bubble/google-sheets/google-sheets.schema.d.ts +22 -22
  26. package/dist/bubbles/service-bubble/insforge-db.d.ts +8 -8
  27. package/dist/bubbles/service-bubble/jira/jira.d.ts +12 -12
  28. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +34 -34
  29. package/dist/bubbles/service-bubble/notion/notion.d.ts +64 -64
  30. package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +36 -36
  31. package/dist/bubbles/service-bubble/postgresql.d.ts +8 -8
  32. package/dist/bubbles/service-bubble/slack/slack.d.ts +177 -177
  33. package/dist/bubbles/service-bubble/slack/slack.d.ts.map +1 -1
  34. package/dist/bubbles/service-bubble/slack/slack.js +0 -133
  35. package/dist/bubbles/service-bubble/slack/slack.js.map +1 -1
  36. package/dist/bubbles/service-bubble/stripe/stripe.d.ts +9 -9
  37. package/dist/bubbles/service-bubble/stripe/stripe.schema.d.ts +38 -38
  38. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +14 -14
  39. package/dist/bubbles/tool-bubble/get-bubble-details-tool.d.ts +8 -8
  40. package/dist/bubbles/tool-bubble/get-trigger-detail-tool.d.ts +8 -8
  41. package/dist/bubbles/tool-bubble/linkedin-connection-tool/linkedin-connection-tool.schema.d.ts +2 -2
  42. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +271 -271
  43. package/dist/bubbles/tool-bubble/list-airtable-tables-tool.d.ts +8 -8
  44. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +8 -8
  45. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +60 -60
  46. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +90 -90
  47. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +12 -12
  48. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +56 -56
  49. package/dist/bubbles.json +1 -1
  50. package/package.json +2 -2
  51. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts +0 -31
  52. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.d.ts.map +0 -1
  53. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js +0 -184
  54. package/dist/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.js.map +0 -1
  55. package/dist/bubbles/service-bubble/google-sheets.d.ts +0 -1811
  56. package/dist/bubbles/service-bubble/google-sheets.d.ts.map +0 -1
  57. package/dist/bubbles/service-bubble/google-sheets.js +0 -904
  58. package/dist/bubbles/service-bubble/google-sheets.js.map +0 -1
  59. package/dist/bubbles/service-bubble/slack.d.ts +0 -5869
  60. package/dist/bubbles/service-bubble/slack.d.ts.map +0 -1
  61. package/dist/bubbles/service-bubble/slack.js +0 -1536
  62. package/dist/bubbles/service-bubble/slack.js.map +0 -1
  63. package/dist/recording/types.d.ts +0 -68
  64. package/dist/recording/types.d.ts.map +0 -1
  65. package/dist/recording/types.js +0 -13
  66. package/dist/recording/types.js.map +0 -1
@@ -121,7 +121,7 @@ declare const GenerateDocumentWorkflowParamsSchema: z.ZodObject<{
121
121
  } | undefined;
122
122
  }[];
123
123
  outputDescription: string;
124
- outputFormat: "json" | "csv" | "html";
124
+ outputFormat: "html" | "json" | "csv";
125
125
  credentials?: Partial<Record<CredentialType, string>> | undefined;
126
126
  }, {
127
127
  documents: {
@@ -145,7 +145,7 @@ declare const GenerateDocumentWorkflowParamsSchema: z.ZodObject<{
145
145
  maxTokens?: number | undefined;
146
146
  jsonMode?: boolean | undefined;
147
147
  } | undefined;
148
- outputFormat?: "json" | "csv" | "html" | undefined;
148
+ outputFormat?: "html" | "json" | "csv" | undefined;
149
149
  }>;
150
150
  /**
151
151
  * Result schema for Generate Document workflow
@@ -189,13 +189,13 @@ declare const GenerateDocumentWorkflowResultSchema: z.ZodObject<{
189
189
  csv: z.ZodOptional<z.ZodString>;
190
190
  json: z.ZodOptional<z.ZodString>;
191
191
  }, "strip", z.ZodTypeAny, {
192
+ html?: string | undefined;
192
193
  json?: string | undefined;
193
194
  csv?: string | undefined;
194
- html?: string | undefined;
195
195
  }, {
196
+ html?: string | undefined;
196
197
  json?: string | undefined;
197
198
  csv?: string | undefined;
198
- html?: string | undefined;
199
199
  }>;
200
200
  aiAnalysis: z.ZodObject<{
201
201
  model: z.ZodString;
@@ -234,9 +234,9 @@ declare const GenerateDocumentWorkflowResultSchema: z.ZodObject<{
234
234
  processingTime?: number | undefined;
235
235
  };
236
236
  generatedFiles: {
237
+ html?: string | undefined;
237
238
  json?: string | undefined;
238
239
  csv?: string | undefined;
239
- html?: string | undefined;
240
240
  };
241
241
  }, {
242
242
  success: boolean;
@@ -260,9 +260,9 @@ declare const GenerateDocumentWorkflowResultSchema: z.ZodObject<{
260
260
  processingTime?: number | undefined;
261
261
  };
262
262
  generatedFiles: {
263
+ html?: string | undefined;
263
264
  json?: string | undefined;
264
265
  csv?: string | undefined;
265
- html?: string | undefined;
266
266
  };
267
267
  }>;
268
268
  type GenerateDocumentWorkflowParams = z.input<typeof GenerateDocumentWorkflowParamsSchema>;
@@ -376,7 +376,7 @@ export declare class GenerateDocumentWorkflow extends WorkflowBubble<GenerateDoc
376
376
  } | undefined;
377
377
  }[];
378
378
  outputDescription: string;
379
- outputFormat: "json" | "csv" | "html";
379
+ outputFormat: "html" | "json" | "csv";
380
380
  credentials?: Partial<Record<CredentialType, string>> | undefined;
381
381
  }, {
382
382
  documents: {
@@ -400,7 +400,7 @@ export declare class GenerateDocumentWorkflow extends WorkflowBubble<GenerateDoc
400
400
  maxTokens?: number | undefined;
401
401
  jsonMode?: boolean | undefined;
402
402
  } | undefined;
403
- outputFormat?: "json" | "csv" | "html" | undefined;
403
+ outputFormat?: "html" | "json" | "csv" | undefined;
404
404
  }>;
405
405
  static readonly resultSchema: z.ZodObject<{
406
406
  columns: z.ZodArray<z.ZodObject<{
@@ -441,13 +441,13 @@ export declare class GenerateDocumentWorkflow extends WorkflowBubble<GenerateDoc
441
441
  csv: z.ZodOptional<z.ZodString>;
442
442
  json: z.ZodOptional<z.ZodString>;
443
443
  }, "strip", z.ZodTypeAny, {
444
+ html?: string | undefined;
444
445
  json?: string | undefined;
445
446
  csv?: string | undefined;
446
- html?: string | undefined;
447
447
  }, {
448
+ html?: string | undefined;
448
449
  json?: string | undefined;
449
450
  csv?: string | undefined;
450
- html?: string | undefined;
451
451
  }>;
452
452
  aiAnalysis: z.ZodObject<{
453
453
  model: z.ZodString;
@@ -486,9 +486,9 @@ export declare class GenerateDocumentWorkflow extends WorkflowBubble<GenerateDoc
486
486
  processingTime?: number | undefined;
487
487
  };
488
488
  generatedFiles: {
489
+ html?: string | undefined;
489
490
  json?: string | undefined;
490
491
  csv?: string | undefined;
491
- html?: string | undefined;
492
492
  };
493
493
  }, {
494
494
  success: boolean;
@@ -512,9 +512,9 @@ export declare class GenerateDocumentWorkflow extends WorkflowBubble<GenerateDoc
512
512
  processingTime?: number | undefined;
513
513
  };
514
514
  generatedFiles: {
515
+ html?: string | undefined;
515
516
  json?: string | undefined;
516
517
  csv?: string | undefined;
517
- html?: string | undefined;
518
518
  };
519
519
  }>;
520
520
  static readonly shortDescription = "Generate Document workflow: convert markdown to structured formats using AI";
@@ -160,12 +160,6 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
160
160
  text: string;
161
161
  emoji?: boolean | undefined;
162
162
  } | undefined;
163
- fields?: {
164
- type: "plain_text" | "mrkdwn";
165
- text: string;
166
- emoji?: boolean | undefined;
167
- verbatim?: boolean | undefined;
168
- }[] | undefined;
169
163
  text?: {
170
164
  type: "plain_text" | "mrkdwn";
171
165
  text: string;
@@ -174,6 +168,12 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
174
168
  } | undefined;
175
169
  image_url?: string | undefined;
176
170
  optional?: boolean | undefined;
171
+ fields?: {
172
+ type: "plain_text" | "mrkdwn";
173
+ text: string;
174
+ emoji?: boolean | undefined;
175
+ verbatim?: boolean | undefined;
176
+ }[] | undefined;
177
177
  alt_text?: string | undefined;
178
178
  elements?: {
179
179
  type: "plain_text" | "mrkdwn";
@@ -193,12 +193,6 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
193
193
  text: string;
194
194
  emoji?: boolean | undefined;
195
195
  } | undefined;
196
- fields?: {
197
- type: "plain_text" | "mrkdwn";
198
- text: string;
199
- emoji?: boolean | undefined;
200
- verbatim?: boolean | undefined;
201
- }[] | undefined;
202
196
  text?: {
203
197
  type: "plain_text" | "mrkdwn";
204
198
  text: string;
@@ -207,6 +201,12 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
207
201
  } | undefined;
208
202
  image_url?: string | undefined;
209
203
  optional?: boolean | undefined;
204
+ fields?: {
205
+ type: "plain_text" | "mrkdwn";
206
+ text: string;
207
+ emoji?: boolean | undefined;
208
+ verbatim?: boolean | undefined;
209
+ }[] | undefined;
210
210
  alt_text?: string | undefined;
211
211
  elements?: {
212
212
  type: "plain_text" | "mrkdwn";
@@ -255,14 +255,14 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
255
255
  }, "strip", z.ZodTypeAny, {
256
256
  success: boolean;
257
257
  error: string;
258
+ response: string;
259
+ iterations: number;
258
260
  metadata: {
259
261
  verbosityLevel: string;
260
262
  technicalityLevel: string;
261
263
  wordCount: number;
262
264
  blockCount?: number | undefined;
263
265
  };
264
- response: string;
265
- iterations: number;
266
266
  toolCalls?: {
267
267
  tool: string;
268
268
  input?: unknown;
@@ -275,12 +275,6 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
275
275
  text: string;
276
276
  emoji?: boolean | undefined;
277
277
  } | undefined;
278
- fields?: {
279
- type: "plain_text" | "mrkdwn";
280
- text: string;
281
- emoji?: boolean | undefined;
282
- verbatim?: boolean | undefined;
283
- }[] | undefined;
284
278
  text?: {
285
279
  type: "plain_text" | "mrkdwn";
286
280
  text: string;
@@ -289,6 +283,12 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
289
283
  } | undefined;
290
284
  image_url?: string | undefined;
291
285
  optional?: boolean | undefined;
286
+ fields?: {
287
+ type: "plain_text" | "mrkdwn";
288
+ text: string;
289
+ emoji?: boolean | undefined;
290
+ verbatim?: boolean | undefined;
291
+ }[] | undefined;
292
292
  alt_text?: string | undefined;
293
293
  elements?: {
294
294
  type: "plain_text" | "mrkdwn";
@@ -305,14 +305,14 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
305
305
  }, {
306
306
  success: boolean;
307
307
  error: string;
308
+ response: string;
309
+ iterations: number;
308
310
  metadata: {
309
311
  verbosityLevel: string;
310
312
  technicalityLevel: string;
311
313
  wordCount: number;
312
314
  blockCount?: number | undefined;
313
315
  };
314
- response: string;
315
- iterations: number;
316
316
  toolCalls?: {
317
317
  tool: string;
318
318
  input?: unknown;
@@ -325,12 +325,6 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
325
325
  text: string;
326
326
  emoji?: boolean | undefined;
327
327
  } | undefined;
328
- fields?: {
329
- type: "plain_text" | "mrkdwn";
330
- text: string;
331
- emoji?: boolean | undefined;
332
- verbatim?: boolean | undefined;
333
- }[] | undefined;
334
328
  text?: {
335
329
  type: "plain_text" | "mrkdwn";
336
330
  text: string;
@@ -339,6 +333,12 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
339
333
  } | undefined;
340
334
  image_url?: string | undefined;
341
335
  optional?: boolean | undefined;
336
+ fields?: {
337
+ type: "plain_text" | "mrkdwn";
338
+ text: string;
339
+ emoji?: boolean | undefined;
340
+ verbatim?: boolean | undefined;
341
+ }[] | undefined;
342
342
  alt_text?: string | undefined;
343
343
  elements?: {
344
344
  type: "plain_text" | "mrkdwn";
@@ -518,12 +518,6 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
518
518
  text: string;
519
519
  emoji?: boolean | undefined;
520
520
  } | undefined;
521
- fields?: {
522
- type: "plain_text" | "mrkdwn";
523
- text: string;
524
- emoji?: boolean | undefined;
525
- verbatim?: boolean | undefined;
526
- }[] | undefined;
527
521
  text?: {
528
522
  type: "plain_text" | "mrkdwn";
529
523
  text: string;
@@ -532,6 +526,12 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
532
526
  } | undefined;
533
527
  image_url?: string | undefined;
534
528
  optional?: boolean | undefined;
529
+ fields?: {
530
+ type: "plain_text" | "mrkdwn";
531
+ text: string;
532
+ emoji?: boolean | undefined;
533
+ verbatim?: boolean | undefined;
534
+ }[] | undefined;
535
535
  alt_text?: string | undefined;
536
536
  elements?: {
537
537
  type: "plain_text" | "mrkdwn";
@@ -551,12 +551,6 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
551
551
  text: string;
552
552
  emoji?: boolean | undefined;
553
553
  } | undefined;
554
- fields?: {
555
- type: "plain_text" | "mrkdwn";
556
- text: string;
557
- emoji?: boolean | undefined;
558
- verbatim?: boolean | undefined;
559
- }[] | undefined;
560
554
  text?: {
561
555
  type: "plain_text" | "mrkdwn";
562
556
  text: string;
@@ -565,6 +559,12 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
565
559
  } | undefined;
566
560
  image_url?: string | undefined;
567
561
  optional?: boolean | undefined;
562
+ fields?: {
563
+ type: "plain_text" | "mrkdwn";
564
+ text: string;
565
+ emoji?: boolean | undefined;
566
+ verbatim?: boolean | undefined;
567
+ }[] | undefined;
568
568
  alt_text?: string | undefined;
569
569
  elements?: {
570
570
  type: "plain_text" | "mrkdwn";
@@ -613,14 +613,14 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
613
613
  }, "strip", z.ZodTypeAny, {
614
614
  success: boolean;
615
615
  error: string;
616
+ response: string;
617
+ iterations: number;
616
618
  metadata: {
617
619
  verbosityLevel: string;
618
620
  technicalityLevel: string;
619
621
  wordCount: number;
620
622
  blockCount?: number | undefined;
621
623
  };
622
- response: string;
623
- iterations: number;
624
624
  toolCalls?: {
625
625
  tool: string;
626
626
  input?: unknown;
@@ -633,12 +633,6 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
633
633
  text: string;
634
634
  emoji?: boolean | undefined;
635
635
  } | undefined;
636
- fields?: {
637
- type: "plain_text" | "mrkdwn";
638
- text: string;
639
- emoji?: boolean | undefined;
640
- verbatim?: boolean | undefined;
641
- }[] | undefined;
642
636
  text?: {
643
637
  type: "plain_text" | "mrkdwn";
644
638
  text: string;
@@ -647,6 +641,12 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
647
641
  } | undefined;
648
642
  image_url?: string | undefined;
649
643
  optional?: boolean | undefined;
644
+ fields?: {
645
+ type: "plain_text" | "mrkdwn";
646
+ text: string;
647
+ emoji?: boolean | undefined;
648
+ verbatim?: boolean | undefined;
649
+ }[] | undefined;
650
650
  alt_text?: string | undefined;
651
651
  elements?: {
652
652
  type: "plain_text" | "mrkdwn";
@@ -663,14 +663,14 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
663
663
  }, {
664
664
  success: boolean;
665
665
  error: string;
666
+ response: string;
667
+ iterations: number;
666
668
  metadata: {
667
669
  verbosityLevel: string;
668
670
  technicalityLevel: string;
669
671
  wordCount: number;
670
672
  blockCount?: number | undefined;
671
673
  };
672
- response: string;
673
- iterations: number;
674
674
  toolCalls?: {
675
675
  tool: string;
676
676
  input?: unknown;
@@ -683,12 +683,6 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
683
683
  text: string;
684
684
  emoji?: boolean | undefined;
685
685
  } | undefined;
686
- fields?: {
687
- type: "plain_text" | "mrkdwn";
688
- text: string;
689
- emoji?: boolean | undefined;
690
- verbatim?: boolean | undefined;
691
- }[] | undefined;
692
686
  text?: {
693
687
  type: "plain_text" | "mrkdwn";
694
688
  text: string;
@@ -697,6 +691,12 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
697
691
  } | undefined;
698
692
  image_url?: string | undefined;
699
693
  optional?: boolean | undefined;
694
+ fields?: {
695
+ type: "plain_text" | "mrkdwn";
696
+ text: string;
697
+ emoji?: boolean | undefined;
698
+ verbatim?: boolean | undefined;
699
+ }[] | undefined;
700
700
  alt_text?: string | undefined;
701
701
  elements?: {
702
702
  type: "plain_text" | "mrkdwn";
package/dist/bubbles.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "2.0.0",
3
- "generatedAt": "2026-02-02T23:29:06.377Z",
3
+ "generatedAt": "2026-02-03T02:26:45.774Z",
4
4
  "totalCount": 58,
5
5
  "bubbles": [
6
6
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bubblelab/bubble-core",
3
- "version": "0.1.83",
3
+ "version": "0.1.84",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "main": "./dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "puppeteer-core": "^24.10.0",
41
41
  "resend": "^4.8.0",
42
42
  "zod": "^3.24.1",
43
- "@bubblelab/shared-schemas": "0.1.84"
43
+ "@bubblelab/shared-schemas": "0.1.85"
44
44
  },
45
45
  "devDependencies": {
46
46
  "zod-to-json-schema": "^3.24.6",
@@ -1,31 +0,0 @@
1
- import { BubbleFlow, type WebhookEvent } from '@bubblelab/bubble-core';
2
- export interface Output {
3
- spreadsheetId: string;
4
- spreadsheetUrl: string;
5
- testResults: {
6
- operation: string;
7
- success: boolean;
8
- details?: string;
9
- }[];
10
- }
11
- /**
12
- * Payload for the Google Sheets Stress Test workflow.
13
- */
14
- export interface SheetsStressTestPayload extends WebhookEvent {
15
- /**
16
- * The title for the test spreadsheet that will be created.
17
- * @canBeFile false
18
- */
19
- testTitle?: string;
20
- }
21
- export declare class GoogleSheetsStressTest extends BubbleFlow<'webhook/http'> {
22
- private createTestSpreadsheet;
23
- private createSheetWithSpaces;
24
- private writeRawDataWithNulls;
25
- private readFromRangeWithSpaces;
26
- private appendToRangeWithSpaces;
27
- private clearRangeWithSpaces;
28
- private deleteSheet;
29
- handle(payload: SheetsStressTestPayload): Promise<Output>;
30
- }
31
- //# sourceMappingURL=google-sheets.integration.flow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-sheets.integration.flow.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,MAAM;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,sBAAuB,SAAQ,UAAU,CAAC,cAAc,CAAC;YAEtD,qBAAqB;YAmBrB,qBAAqB;YAsBrB,qBAAqB;YAqBrB,uBAAuB;YAgBvB,uBAAuB;YAsBvB,oBAAoB;YAepB,WAAW;IAcnB,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;CA0HhE"}
@@ -1,184 +0,0 @@
1
- import { BubbleFlow, GoogleSheetsBubble, } from '@bubblelab/bubble-core';
2
- export class GoogleSheetsStressTest extends BubbleFlow {
3
- // Creates a new Google Spreadsheet with a specific title
4
- async createTestSpreadsheet(title) {
5
- const result = await new GoogleSheetsBubble({
6
- operation: 'create_spreadsheet',
7
- title: title,
8
- sheet_titles: ['InitialSheet'],
9
- }).action();
10
- if (!result.success ||
11
- result.data?.operation !== 'create_spreadsheet' ||
12
- !result.data.spreadsheet) {
13
- throw new Error(`Failed to create spreadsheet: ${result.error}`);
14
- }
15
- return result.data.spreadsheet;
16
- }
17
- // Adds a sheet with spaces in the name - tests if bubble handles spaces without manual quoting
18
- async createSheetWithSpaces(spreadsheetId, sheetName) {
19
- const result = await new GoogleSheetsBubble({
20
- operation: 'add_sheet',
21
- spreadsheet_id: spreadsheetId,
22
- sheet_title: sheetName,
23
- }).action();
24
- if (!result.success ||
25
- result.data?.operation !== 'add_sheet' ||
26
- result.data.sheet_id === undefined) {
27
- throw new Error(`Failed to add sheet with spaces: ${result.error}`);
28
- }
29
- return result.data.sheet_id;
30
- }
31
- // Writes raw data with nulls/undefineds to test bubble's native null handling
32
- async writeRawDataWithNulls(spreadsheetId, range, data) {
33
- const result = await new GoogleSheetsBubble({
34
- operation: 'write_values',
35
- spreadsheet_id: spreadsheetId,
36
- range: range,
37
- values: data,
38
- value_input_option: 'RAW',
39
- }).action();
40
- if (!result.success) {
41
- throw new Error(`Failed to write stress test data: ${result.error}`);
42
- }
43
- return result.data;
44
- }
45
- // Reads data from a range with spaces in sheet name - tests bubble's range parsing
46
- async readFromRangeWithSpaces(spreadsheetId, range) {
47
- const result = await new GoogleSheetsBubble({
48
- operation: 'read_values',
49
- spreadsheet_id: spreadsheetId,
50
- range: range,
51
- value_render_option: 'FORMATTED_VALUE',
52
- }).action();
53
- if (!result.success || result.data?.operation !== 'read_values') {
54
- throw new Error(`Failed to read verification data: ${result.error}`);
55
- }
56
- return result.data.values;
57
- }
58
- // Appends data to a range with spaces in sheet name
59
- async appendToRangeWithSpaces(spreadsheetId, range, values) {
60
- const result = await new GoogleSheetsBubble({
61
- operation: 'append_values',
62
- spreadsheet_id: spreadsheetId,
63
- range: range,
64
- values: values,
65
- insert_data_option: 'INSERT_ROWS',
66
- value_input_option: 'RAW',
67
- }).action();
68
- if (!result.success) {
69
- throw new Error(`Failed to append data: ${result.error}`);
70
- }
71
- return result.data;
72
- }
73
- // Clears data from a range with spaces in sheet name
74
- async clearRangeWithSpaces(spreadsheetId, range) {
75
- const result = await new GoogleSheetsBubble({
76
- operation: 'clear_values',
77
- spreadsheet_id: spreadsheetId,
78
- range: range,
79
- }).action();
80
- if (!result.success) {
81
- throw new Error(`Failed to clear data: ${result.error}`);
82
- }
83
- return result.data;
84
- }
85
- // Deletes a sheet by ID
86
- async deleteSheet(spreadsheetId, sheetId) {
87
- const result = await new GoogleSheetsBubble({
88
- operation: 'delete_sheet',
89
- spreadsheet_id: spreadsheetId,
90
- sheet_id: sheetId,
91
- }).action();
92
- if (!result.success) {
93
- throw new Error(`Failed to delete test sheet: ${result.error}`);
94
- }
95
- return result.data;
96
- }
97
- async handle(payload) {
98
- const { testTitle = 'Integration Stress Test' } = payload;
99
- const results = [];
100
- const sheetNameWithSpaces = 'Kaus Mode Landing zone';
101
- // 1. Create Spreadsheet
102
- const spreadsheet = await this.createTestSpreadsheet(testTitle);
103
- const spreadsheetId = spreadsheet.spreadsheetId;
104
- results.push({ operation: 'create_spreadsheet', success: true });
105
- // 2. Create Sheet with Spaces - NO HELPER
106
- const sheetId = await this.createSheetWithSpaces(spreadsheetId, sheetNameWithSpaces);
107
- results.push({ operation: 'add_sheet_with_spaces', success: true });
108
- // 3. Write Data - RAW DATA WITH NULLS/UNDEFINEDS, NO SANITIZATION
109
- const rawData = [
110
- ['Name', 'Age', 'Email', 'Department', 'Salary', 'Active'],
111
- ['John Doe', 28, 'john@example.com', 'Engineering', 95000, true],
112
- ['Jane Smith', 34, 'jane@example.com', 'Marketing', 78000, true],
113
- [null, undefined, 'Mixed', 'Sales', null, false],
114
- ['Bob Johnson', 42, 'bob@example.com', null, 120000, true],
115
- ['Alice Williams', 31, null, 'Engineering', 88000, undefined],
116
- ['End of', 'Test', null, 'HR', 65000, false],
117
- ];
118
- // RANGE WITH SPACES - NO QUOTE WRAPPING
119
- const writeRange = `${sheetNameWithSpaces}!A1:F7`;
120
- await this.writeRawDataWithNulls(spreadsheetId, writeRange, rawData);
121
- results.push({ operation: 'write_values_with_nulls', success: true });
122
- // 4. Read Verification - Multiple read operations to test different scenarios
123
- // 4a. Read entire written range
124
- const readRange = `${sheetNameWithSpaces}!A1:F7`;
125
- const readValues = await this.readFromRangeWithSpaces(spreadsheetId, readRange);
126
- results.push({
127
- operation: 'read_values_full_range',
128
- success: !!readValues && readValues.length > 0,
129
- details: `Read ${readValues?.length || 0} rows with ${readValues?.[0]?.length || 0} columns`,
130
- });
131
- // 4b. Read just headers
132
- const headerRange = `${sheetNameWithSpaces}!A1:F1`;
133
- const headerValues = await this.readFromRangeWithSpaces(spreadsheetId, headerRange);
134
- results.push({
135
- operation: 'read_headers_only',
136
- success: !!headerValues && headerValues.length > 0,
137
- details: `Read headers: ${headerValues?.[0]?.join(', ') || 'no headers'}`,
138
- });
139
- // 4c. Read single column
140
- const columnRange = `${sheetNameWithSpaces}!A:A`;
141
- const columnValues = await this.readFromRangeWithSpaces(spreadsheetId, columnRange);
142
- results.push({
143
- operation: 'read_single_column',
144
- success: !!columnValues && columnValues.length > 0,
145
- details: `Read ${columnValues?.length || 0} rows from Name column`,
146
- });
147
- // 4d. Read partial range (middle rows)
148
- const partialRange = `${sheetNameWithSpaces}!B3:E5`;
149
- const partialValues = await this.readFromRangeWithSpaces(spreadsheetId, partialRange);
150
- results.push({
151
- operation: 'read_partial_range',
152
- success: !!partialValues && partialValues.length > 0,
153
- details: `Read ${partialValues?.length || 0} rows from partial range`,
154
- });
155
- // 5. Append Data - RANGE WITH SPACES, NO QUOTE WRAPPING
156
- const appendRange = `${sheetNameWithSpaces}!A:A`;
157
- const appendValues = [
158
- ['Charlie Brown', 29, 'charlie@example.com', 'Finance', 72000, true],
159
- ];
160
- await this.appendToRangeWithSpaces(spreadsheetId, appendRange, appendValues);
161
- results.push({ operation: 'append_values', success: true });
162
- // 5a. Read after append to verify
163
- const postAppendRange = `${sheetNameWithSpaces}!A1:F8`;
164
- const postAppendValues = await this.readFromRangeWithSpaces(spreadsheetId, postAppendRange);
165
- results.push({
166
- operation: 'read_after_append',
167
- success: !!postAppendValues && postAppendValues.length === 8,
168
- details: `Read ${postAppendValues?.length || 0} rows after append (expected 8)`,
169
- });
170
- // 6. Clear Data - RANGE WITH SPACES, NO QUOTE WRAPPING
171
- const clearRange = `${sheetNameWithSpaces}!A1:F10`;
172
- await this.clearRangeWithSpaces(spreadsheetId, clearRange);
173
- results.push({ operation: 'clear_values', success: true });
174
- // 7. Delete Sheet
175
- await this.deleteSheet(spreadsheetId, sheetId);
176
- results.push({ operation: 'delete_sheet', success: true });
177
- return {
178
- spreadsheetId: spreadsheetId,
179
- spreadsheetUrl: spreadsheet.spreadsheetUrl || '',
180
- testResults: results,
181
- };
182
- }
183
- }
184
- //# sourceMappingURL=google-sheets.integration.flow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-sheets.integration.flow.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/google-sheets/google-sheets.integration.flow.ts"],"names":[],"mappings":"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"}