@bubblelab/bubble-core 0.1.119 → 0.1.122

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 (75) hide show
  1. package/dist/bubble-bundle.d.ts +97 -97
  2. package/dist/bubbles/service-bubble/agi-inc.d.ts +20 -20
  3. package/dist/bubbles/service-bubble/ai-agent.d.ts +74 -74
  4. package/dist/bubbles/service-bubble/airtable.d.ts +76 -76
  5. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +2 -2
  6. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +8 -8
  7. package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.d.ts +2 -2
  8. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +22 -22
  9. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +52 -52
  10. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts +6 -6
  11. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts +12 -12
  12. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +12 -12
  13. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +88 -88
  14. package/dist/bubbles/service-bubble/apify/apify.d.ts +18 -18
  15. package/dist/bubbles/service-bubble/ashby/ashby.d.ts +2 -2
  16. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +2 -2
  17. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +1 -1
  18. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +1 -1
  19. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +10 -10
  20. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +24 -24
  21. package/dist/bubbles/service-bubble/firecrawl.d.ts +338 -338
  22. package/dist/bubbles/service-bubble/followupboss.d.ts +4 -4
  23. package/dist/bubbles/service-bubble/github.d.ts +60 -60
  24. package/dist/bubbles/service-bubble/gmail.d.ts +164 -164
  25. package/dist/bubbles/service-bubble/google-calendar.d.ts +6 -6
  26. package/dist/bubbles/service-bubble/google-drive.d.ts +8 -8
  27. package/dist/bubbles/service-bubble/http.d.ts +2 -2
  28. package/dist/bubbles/service-bubble/insforge-db.d.ts +8 -8
  29. package/dist/bubbles/service-bubble/jira/jira.d.ts +30 -30
  30. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +36 -36
  31. package/dist/bubbles/service-bubble/notion/notion.d.ts +164 -164
  32. package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +8 -8
  33. package/dist/bubbles/service-bubble/postgresql.d.ts +8 -8
  34. package/dist/bubbles/service-bubble/resend.d.ts +4 -4
  35. package/dist/bubbles/service-bubble/slack/slack.d.ts +330 -330
  36. package/dist/bubbles/service-bubble/slack/slack.d.ts.map +1 -1
  37. package/dist/bubbles/service-bubble/slack/slack.js +3 -2
  38. package/dist/bubbles/service-bubble/slack/slack.js.map +1 -1
  39. package/dist/bubbles/service-bubble/stripe/stripe.d.ts +24 -24
  40. package/dist/bubbles/service-bubble/stripe/stripe.schema.d.ts +28 -28
  41. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts +6 -6
  42. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +8 -8
  43. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +4 -4
  44. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +28 -28
  45. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +317 -317
  46. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +44 -44
  47. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +10 -10
  48. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +4 -4
  49. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +4 -4
  50. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +60 -60
  51. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +134 -134
  52. package/dist/bubbles/tool-bubble/yc-scraper-tool.d.ts +36 -36
  53. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +20 -20
  54. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +12 -12
  55. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +24 -24
  56. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +2 -2
  57. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +18 -18
  58. package/dist/bubbles.json +5 -2
  59. package/package.json +2 -2
  60. package/dist/bubbles/service-bubble/salesforce/index.d.ts +0 -4
  61. package/dist/bubbles/service-bubble/salesforce/index.d.ts.map +0 -1
  62. package/dist/bubbles/service-bubble/salesforce/index.js +0 -4
  63. package/dist/bubbles/service-bubble/salesforce/index.js.map +0 -1
  64. package/dist/bubbles/service-bubble/salesforce/salesforce.d.ts +0 -1331
  65. package/dist/bubbles/service-bubble/salesforce/salesforce.d.ts.map +0 -1
  66. package/dist/bubbles/service-bubble/salesforce/salesforce.js +0 -618
  67. package/dist/bubbles/service-bubble/salesforce/salesforce.js.map +0 -1
  68. package/dist/bubbles/service-bubble/salesforce/salesforce.schema.d.ts +0 -1445
  69. package/dist/bubbles/service-bubble/salesforce/salesforce.schema.d.ts.map +0 -1
  70. package/dist/bubbles/service-bubble/salesforce/salesforce.schema.js +0 -609
  71. package/dist/bubbles/service-bubble/salesforce/salesforce.schema.js.map +0 -1
  72. package/dist/bubbles/service-bubble/salesforce/salesforce.utils.d.ts +0 -87
  73. package/dist/bubbles/service-bubble/salesforce/salesforce.utils.d.ts.map +0 -1
  74. package/dist/bubbles/service-bubble/salesforce/salesforce.utils.js +0 -181
  75. package/dist/bubbles/service-bubble/salesforce/salesforce.utils.js.map +0 -1
@@ -138,33 +138,33 @@ declare const PDFFormOperationsResultSchema: z.ZodDiscriminatedUnion<"operation"
138
138
  }, "strip", z.ZodTypeAny, {
139
139
  type: string;
140
140
  name: string;
141
+ choices: string[];
141
142
  id: number;
142
143
  width: number;
143
144
  height: number;
144
145
  label: string;
145
146
  page: number;
146
- choices: string[];
147
+ x: number;
148
+ y: number;
147
149
  field_type: string;
148
150
  current_value: string;
149
151
  rect: [number, number, number, number];
150
- x: number;
151
- y: number;
152
152
  field_flags: number;
153
153
  potential_labels: string[];
154
154
  }, {
155
155
  type: string;
156
156
  name: string;
157
+ choices: string[];
157
158
  id: number;
158
159
  width: number;
159
160
  height: number;
160
161
  label: string;
161
162
  page: number;
162
- choices: string[];
163
+ x: number;
164
+ y: number;
163
165
  field_type: string;
164
166
  current_value: string;
165
167
  rect: [number, number, number, number];
166
- x: number;
167
- y: number;
168
168
  field_flags: number;
169
169
  potential_labels: string[];
170
170
  }>, "many">;
@@ -177,17 +177,17 @@ declare const PDFFormOperationsResultSchema: z.ZodDiscriminatedUnion<"operation"
177
177
  fields: {
178
178
  type: string;
179
179
  name: string;
180
+ choices: string[];
180
181
  id: number;
181
182
  width: number;
182
183
  height: number;
183
184
  label: string;
184
185
  page: number;
185
- choices: string[];
186
+ x: number;
187
+ y: number;
186
188
  field_type: string;
187
189
  current_value: string;
188
190
  rect: [number, number, number, number];
189
- x: number;
190
- y: number;
191
191
  field_flags: number;
192
192
  potential_labels: string[];
193
193
  }[];
@@ -199,17 +199,17 @@ declare const PDFFormOperationsResultSchema: z.ZodDiscriminatedUnion<"operation"
199
199
  fields: {
200
200
  type: string;
201
201
  name: string;
202
+ choices: string[];
202
203
  id: number;
203
204
  width: number;
204
205
  height: number;
205
206
  label: string;
206
207
  page: number;
207
- choices: string[];
208
+ x: number;
209
+ y: number;
208
210
  field_type: string;
209
211
  current_value: string;
210
212
  rect: [number, number, number, number];
211
- x: number;
212
- y: number;
213
213
  field_flags: number;
214
214
  potential_labels: string[];
215
215
  }[];
@@ -617,33 +617,33 @@ export declare class PDFFormOperationsWorkflow<T extends PDFFormOperationsParams
617
617
  }, "strip", z.ZodTypeAny, {
618
618
  type: string;
619
619
  name: string;
620
+ choices: string[];
620
621
  id: number;
621
622
  width: number;
622
623
  height: number;
623
624
  label: string;
624
625
  page: number;
625
- choices: string[];
626
+ x: number;
627
+ y: number;
626
628
  field_type: string;
627
629
  current_value: string;
628
630
  rect: [number, number, number, number];
629
- x: number;
630
- y: number;
631
631
  field_flags: number;
632
632
  potential_labels: string[];
633
633
  }, {
634
634
  type: string;
635
635
  name: string;
636
+ choices: string[];
636
637
  id: number;
637
638
  width: number;
638
639
  height: number;
639
640
  label: string;
640
641
  page: number;
641
- choices: string[];
642
+ x: number;
643
+ y: number;
642
644
  field_type: string;
643
645
  current_value: string;
644
646
  rect: [number, number, number, number];
645
- x: number;
646
- y: number;
647
647
  field_flags: number;
648
648
  potential_labels: string[];
649
649
  }>, "many">;
@@ -656,17 +656,17 @@ export declare class PDFFormOperationsWorkflow<T extends PDFFormOperationsParams
656
656
  fields: {
657
657
  type: string;
658
658
  name: string;
659
+ choices: string[];
659
660
  id: number;
660
661
  width: number;
661
662
  height: number;
662
663
  label: string;
663
664
  page: number;
664
- choices: string[];
665
+ x: number;
666
+ y: number;
665
667
  field_type: string;
666
668
  current_value: string;
667
669
  rect: [number, number, number, number];
668
- x: number;
669
- y: number;
670
670
  field_flags: number;
671
671
  potential_labels: string[];
672
672
  }[];
@@ -678,17 +678,17 @@ export declare class PDFFormOperationsWorkflow<T extends PDFFormOperationsParams
678
678
  fields: {
679
679
  type: string;
680
680
  name: string;
681
+ choices: string[];
681
682
  id: number;
682
683
  width: number;
683
684
  height: number;
684
685
  label: string;
685
686
  page: number;
686
- choices: string[];
687
+ x: number;
688
+ y: number;
687
689
  field_type: string;
688
690
  current_value: string;
689
691
  rect: [number, number, number, number];
690
- x: number;
691
- y: number;
692
692
  field_flags: number;
693
693
  potential_labels: string[];
694
694
  }[];
@@ -60,8 +60,8 @@ declare const SlackDataAssistantParamsSchema: z.ZodObject<{
60
60
  slackChannel: string;
61
61
  userQuestion: string;
62
62
  name?: string | undefined;
63
- temperature?: number | undefined;
64
63
  credentials?: Partial<Record<CredentialType, string>> | undefined;
64
+ temperature?: number | undefined;
65
65
  verbosity?: "1" | "2" | "3" | "4" | "5" | undefined;
66
66
  technicality?: "1" | "2" | "3" | "4" | "5" | undefined;
67
67
  includeQuery?: boolean | undefined;
@@ -198,8 +198,8 @@ export declare class SlackDataAssistantWorkflow extends WorkflowBubble<SlackData
198
198
  slackChannel: string;
199
199
  userQuestion: string;
200
200
  name?: string | undefined;
201
- temperature?: number | undefined;
202
201
  credentials?: Partial<Record<CredentialType, string>> | undefined;
202
+ temperature?: number | undefined;
203
203
  verbosity?: "1" | "2" | "3" | "4" | "5" | undefined;
204
204
  technicality?: "1" | "2" | "3" | "4" | "5" | undefined;
205
205
  includeQuery?: boolean | undefined;
@@ -61,12 +61,12 @@ declare const SlackFormatterAgentParamsSchema: z.ZodObject<{
61
61
  additionalContext?: string | undefined;
62
62
  }, {
63
63
  message: string;
64
+ credentials?: Partial<Record<CredentialType, string>> | undefined;
64
65
  model?: {
65
66
  model?: "openai/gpt-5" | "openai/gpt-5-mini" | "openai/gpt-5.1" | "openai/gpt-5.2" | "google/gemini-2.5-pro" | "google/gemini-2.5-flash" | "google/gemini-2.5-flash-lite" | "google/gemini-2.5-flash-image-preview" | "google/gemini-3-pro-preview" | "google/gemini-3-pro-image-preview" | "google/gemini-3-flash-preview" | "anthropic/claude-sonnet-4-5" | "anthropic/claude-opus-4-5" | "anthropic/claude-haiku-4-5" | "openrouter/x-ai/grok-code-fast-1" | "openrouter/z-ai/glm-4.6" | "openrouter/z-ai/glm-4.7" | "openrouter/anthropic/claude-sonnet-4.5" | "openrouter/anthropic/claude-opus-4.5" | "openrouter/google/gemini-3-pro-preview" | "openrouter/morph/morph-v3-large" | "openrouter/openai/gpt-oss-120b" | "openrouter/openai/o3-deep-research" | "openrouter/openai/o4-mini-deep-research" | undefined;
66
67
  temperature?: number | undefined;
67
68
  maxTokens?: number | undefined;
68
69
  } | undefined;
69
- credentials?: Partial<Record<CredentialType, string>> | undefined;
70
70
  tools?: {
71
71
  name: string;
72
72
  credentials?: Partial<Record<CredentialType, string>> | undefined;
@@ -154,7 +154,7 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
154
154
  verbatim?: boolean | undefined;
155
155
  }>, "many">>;
156
156
  }, "strip", z.ZodTypeAny, {
157
- type: "input" | "image" | "file" | "section" | "divider" | "header" | "context" | "table" | "actions";
157
+ type: "table" | "image" | "input" | "file" | "section" | "divider" | "header" | "context" | "actions";
158
158
  title?: {
159
159
  type: "plain_text";
160
160
  text: string;
@@ -187,7 +187,7 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
187
187
  label?: unknown;
188
188
  hint?: unknown;
189
189
  }, {
190
- type: "input" | "image" | "file" | "section" | "divider" | "header" | "context" | "table" | "actions";
190
+ type: "table" | "image" | "input" | "file" | "section" | "divider" | "header" | "context" | "actions";
191
191
  title?: {
192
192
  type: "plain_text";
193
193
  text: string;
@@ -255,21 +255,21 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
255
255
  }, "strip", z.ZodTypeAny, {
256
256
  error: string;
257
257
  success: boolean;
258
- response: string;
259
- iterations: number;
260
258
  metadata: {
261
259
  verbosityLevel: string;
262
260
  technicalityLevel: string;
263
261
  wordCount: number;
264
262
  blockCount?: number | undefined;
265
263
  };
264
+ response: string;
265
+ iterations: number;
266
266
  toolCalls?: {
267
267
  tool: string;
268
268
  input?: unknown;
269
269
  output?: unknown;
270
270
  }[] | undefined;
271
271
  blocks?: {
272
- type: "input" | "image" | "file" | "section" | "divider" | "header" | "context" | "table" | "actions";
272
+ type: "table" | "image" | "input" | "file" | "section" | "divider" | "header" | "context" | "actions";
273
273
  title?: {
274
274
  type: "plain_text";
275
275
  text: string;
@@ -305,21 +305,21 @@ declare const SlackFormatterAgentResultSchema: z.ZodObject<{
305
305
  }, {
306
306
  error: string;
307
307
  success: boolean;
308
- response: string;
309
- iterations: number;
310
308
  metadata: {
311
309
  verbosityLevel: string;
312
310
  technicalityLevel: string;
313
311
  wordCount: number;
314
312
  blockCount?: number | undefined;
315
313
  };
314
+ response: string;
315
+ iterations: number;
316
316
  toolCalls?: {
317
317
  tool: string;
318
318
  input?: unknown;
319
319
  output?: unknown;
320
320
  }[] | undefined;
321
321
  blocks?: {
322
- type: "input" | "image" | "file" | "section" | "divider" | "header" | "context" | "table" | "actions";
322
+ type: "table" | "image" | "input" | "file" | "section" | "divider" | "header" | "context" | "actions";
323
323
  title?: {
324
324
  type: "plain_text";
325
325
  text: string;
@@ -419,12 +419,12 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
419
419
  additionalContext?: string | undefined;
420
420
  }, {
421
421
  message: string;
422
+ credentials?: Partial<Record<CredentialType, string>> | undefined;
422
423
  model?: {
423
424
  model?: "openai/gpt-5" | "openai/gpt-5-mini" | "openai/gpt-5.1" | "openai/gpt-5.2" | "google/gemini-2.5-pro" | "google/gemini-2.5-flash" | "google/gemini-2.5-flash-lite" | "google/gemini-2.5-flash-image-preview" | "google/gemini-3-pro-preview" | "google/gemini-3-pro-image-preview" | "google/gemini-3-flash-preview" | "anthropic/claude-sonnet-4-5" | "anthropic/claude-opus-4-5" | "anthropic/claude-haiku-4-5" | "openrouter/x-ai/grok-code-fast-1" | "openrouter/z-ai/glm-4.6" | "openrouter/z-ai/glm-4.7" | "openrouter/anthropic/claude-sonnet-4.5" | "openrouter/anthropic/claude-opus-4.5" | "openrouter/google/gemini-3-pro-preview" | "openrouter/morph/morph-v3-large" | "openrouter/openai/gpt-oss-120b" | "openrouter/openai/o3-deep-research" | "openrouter/openai/o4-mini-deep-research" | undefined;
424
425
  temperature?: number | undefined;
425
426
  maxTokens?: number | undefined;
426
427
  } | undefined;
427
- credentials?: Partial<Record<CredentialType, string>> | undefined;
428
428
  tools?: {
429
429
  name: string;
430
430
  credentials?: Partial<Record<CredentialType, string>> | undefined;
@@ -512,7 +512,7 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
512
512
  verbatim?: boolean | undefined;
513
513
  }>, "many">>;
514
514
  }, "strip", z.ZodTypeAny, {
515
- type: "input" | "image" | "file" | "section" | "divider" | "header" | "context" | "table" | "actions";
515
+ type: "table" | "image" | "input" | "file" | "section" | "divider" | "header" | "context" | "actions";
516
516
  title?: {
517
517
  type: "plain_text";
518
518
  text: string;
@@ -545,7 +545,7 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
545
545
  label?: unknown;
546
546
  hint?: unknown;
547
547
  }, {
548
- type: "input" | "image" | "file" | "section" | "divider" | "header" | "context" | "table" | "actions";
548
+ type: "table" | "image" | "input" | "file" | "section" | "divider" | "header" | "context" | "actions";
549
549
  title?: {
550
550
  type: "plain_text";
551
551
  text: string;
@@ -613,21 +613,21 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
613
613
  }, "strip", z.ZodTypeAny, {
614
614
  error: string;
615
615
  success: boolean;
616
- response: string;
617
- iterations: number;
618
616
  metadata: {
619
617
  verbosityLevel: string;
620
618
  technicalityLevel: string;
621
619
  wordCount: number;
622
620
  blockCount?: number | undefined;
623
621
  };
622
+ response: string;
623
+ iterations: number;
624
624
  toolCalls?: {
625
625
  tool: string;
626
626
  input?: unknown;
627
627
  output?: unknown;
628
628
  }[] | undefined;
629
629
  blocks?: {
630
- type: "input" | "image" | "file" | "section" | "divider" | "header" | "context" | "table" | "actions";
630
+ type: "table" | "image" | "input" | "file" | "section" | "divider" | "header" | "context" | "actions";
631
631
  title?: {
632
632
  type: "plain_text";
633
633
  text: string;
@@ -663,21 +663,21 @@ export declare class SlackFormatterAgentBubble extends WorkflowBubble<SlackForma
663
663
  }, {
664
664
  error: string;
665
665
  success: boolean;
666
- response: string;
667
- iterations: number;
668
666
  metadata: {
669
667
  verbosityLevel: string;
670
668
  technicalityLevel: string;
671
669
  wordCount: number;
672
670
  blockCount?: number | undefined;
673
671
  };
672
+ response: string;
673
+ iterations: number;
674
674
  toolCalls?: {
675
675
  tool: string;
676
676
  input?: unknown;
677
677
  output?: unknown;
678
678
  }[] | undefined;
679
679
  blocks?: {
680
- type: "input" | "image" | "file" | "section" | "divider" | "header" | "context" | "table" | "actions";
680
+ type: "table" | "image" | "input" | "file" | "section" | "divider" | "header" | "context" | "actions";
681
681
  title?: {
682
682
  type: "plain_text";
683
683
  text: string;
package/dist/bubbles.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "2.0.0",
3
- "generatedAt": "2026-02-08T00:44:55.199Z",
3
+ "generatedAt": "2026-02-08T05:29:14.783Z",
4
4
  "totalCount": 60,
5
5
  "bubbles": [
6
6
  {
@@ -4484,7 +4484,8 @@
4484
4484
  },
4485
4485
  "usageExample": "// Send Message example\nconst slack_send_message = new SlackBubble({\n operation: \"send_message\", // Send a message to a Slack channel or DM. Required scopes: chat:write (add chat:write.public for public channels bot has not joined, add im:write to send DMs to users)\n channel: \"example string\", // Channel ID (e.g., C1234567890), channel name (e.g., general or #general), or user ID for DM (e.g., U1234567890 - requires im:write scope)\n text: \"example string\", // Message text content\n username: \"example string\", // Override bot username for this message\n icon_emoji: \"example string\", // Override bot icon with emoji (e.g., :robot_face:)\n icon_url: \"example string\", // Override bot icon with custom image URL\n attachments: [{ color: \"example string\" // Color bar accent (hex color or good/warning/danger), pretext: \"example string\" // Text that appears before the main attachment content, author_name: \"example string\" // Author name displayed at the top, author_link: \"example string\" // URL to link the author name, author_icon: \"example string\" // Author icon image URL, title: \"example string\" // Attachment title text, title_link: \"example string\" // URL to link the title, text: \"example string\" // Main attachment text content, fields: [{ title: \"example string\" // Field title, value: \"example string\" // Field value, short: true // Whether field should be displayed side-by-side }] // Array of field objects for structured data, image_url: \"example string\" // URL of image to display, thumb_url: \"example string\" // URL of thumbnail image, footer: \"example string\" // Footer text, footer_icon: \"example string\" // Footer icon URL, ts: 42 // Timestamp for the attachment }], // Legacy message attachments\n blocks: [{ type: \"example string\" // Block element type (section, divider, button, etc.), text: { type: \"plain_text\" // options: \"plain_text\", \"mrkdwn\" // Text formatting type, text: \"example string\" // The actual text content, emoji: true, verbatim: true } // Text object for the block element, elements: [{ type: \"plain_text\" // options: \"plain_text\", \"mrkdwn\", \"image\" // Element type, text: \"example string\" // Text content, image_url: \"example string\" // Image URL for image elements, alt_text: \"example string\" // Alt text for image elements, emoji: true, verbatim: true }] // Elements array for context blocks }], // Block Kit structured message blocks\n thread_ts: \"example string\", // Timestamp of parent message to reply in thread\n reply_broadcast: false // default, // Broadcast thread reply to channel\n unfurl_links: true // default, // Enable automatic link unfurling\n unfurl_media: true // default, // Enable automatic media unfurling\n});\n\nconst result = await slack_send_message.action();\n// outputSchema for result.data when operation === 'send_message':\n// {\n// operation: \"send_message\" // Send a message to a Slack channel or DM,\n// ok: boolean // Whether the Slack API call was successful,\n// channel: string | undefined // Channel ID where the message was sent,\n// ts: string | undefined // Timestamp of the sent message,\n// message: { type: string // Message type (usually \"message\"), ts: string | undefined // Message timestamp (unique identifier), user: string | undefined // User ID who sent the message, bot_id: string | undefined // Bot ID if message was sent by a bot, bot_profile: { name: string | undefined // Bot display name } | undefined // Bot profile information if message was sent by a bot, username: string | undefined // Username of the bot or user who sent the message, text: string | undefined // Message text content, thread_ts: string | undefined // Timestamp of parent message if this is a thread reply, parent_user_id: string | undefined // User ID of thread parent message author, reply_count: number | undefined // Number of replies in this thread, reply_users_count: number | undefined // Number of unique users who replied in thread, latest_reply: string | undefined // Timestamp of most recent reply in thread, reply_users: string[] | undefined // Array of user IDs who replied in thread, is_locked: boolean | undefined // True if thread is locked, subscribed: boolean | undefined // True if current user is subscribed to thread, attachments: unknown[] | undefined // Legacy message attachments, blocks: unknown[] | undefined // Block Kit structured content, reactions: { name: string // Emoji name without colons, users: string[] // User IDs who reacted with this emoji, count: number // Total count of this reaction }[] | undefined // Array of emoji reactions on this message, files: { id: string // Unique file identifier, name: string | undefined // Filename, title: string | undefined // File title, mimetype: string | undefined // MIME type of the file, filetype: string | undefined // File type extension, size: number | undefined // File size in bytes, user: string | undefined // User ID who uploaded the file, url_private: string | undefined // Private URL to access file, url_private_download: string | undefined // Private download URL, thumb_64: string | undefined // 64px thumbnail URL, thumb_360: string | undefined // 360px thumbnail URL, thumb_480: string | undefined // 480px thumbnail URL, original_w: number | undefined // Original image width, original_h: number | undefined // Original image height, permalink: string | undefined // Permanent link to file }[] | undefined // Array of files attached to this message } | undefined // Details of the sent message,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// List Channels example\nconst slack_list_channels = new SlackBubble({\n operation: \"list_channels\", // List all channels in the Slack workspace. Required scopes: channels:read (public), groups:read (private), im:read (DMs), mpim:read (group DMs)\n types: [\"public_channel\",\"private_channel\"] // default, // Types of channels to include in results\n exclude_archived: true // default, // Exclude archived channels from results\n limit: 50 // default, // Maximum number of channels to return (1-1000)\n cursor: \"example string\", // Cursor for pagination to get next set of results\n});\n\nconst result = await slack_list_channels.action();\n// outputSchema for result.data when operation === 'list_channels':\n// {\n// operation: \"list_channels\" // List all channels in the Slack workspace,\n// ok: boolean // Whether the Slack API call was successful,\n// channels: { id: string // Unique channel identifier, name: string // Channel name without # prefix, is_channel: boolean | undefined // True if this is a public channel, is_group: boolean | undefined // True if this is a private channel, is_im: boolean | undefined // True if this is a direct message, is_mpim: boolean | undefined // True if this is a multi-person direct message, is_private: boolean | undefined // True if this is a private channel, created: number // Unix timestamp when channel was created, is_archived: boolean // True if channel is archived, is_general: boolean | undefined // True if this is the #general channel, unlinked: number | undefined // Unix timestamp when channel was unlinked, name_normalized: string | undefined // Normalized channel name, is_shared: boolean | undefined // True if channel is shared with other workspaces, is_ext_shared: boolean | undefined // True if channel is shared externally, is_org_shared: boolean | undefined // True if channel is shared across organization, shared_team_ids: string[] | undefined // IDs of teams this channel is shared with, pending_shared: string[] | undefined // Pending shared connections, pending_connected_team_ids: string[] | undefined // Pending team connection IDs, is_pending_ext_shared: boolean | undefined // True if external sharing is pending, is_member: boolean | undefined // True if the bot is a member of this channel, is_open: boolean | undefined // True if the channel is open, topic: { value: string // Topic text, creator: string // User ID who set the topic, last_set: number // Unix timestamp when topic was last set } | undefined // Channel topic information, purpose: { value: string // Purpose text, creator: string // User ID who set the purpose, last_set: number // Unix timestamp when purpose was last set } | undefined // Channel purpose information, num_members: number | undefined // Number of members in the channel }[] | undefined // Array of channel objects,\n// response_metadata: { next_cursor: string // Cursor for pagination to get next set of results } | undefined // Metadata for pagination,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Get Channel Info example\nconst slack_get_channel_info = new SlackBubble({\n operation: \"get_channel_info\", // Get detailed information about a specific channel. Required scopes: channels:read (public), groups:read (private), im:read (DMs), mpim:read (group DMs)\n channel: \"example string\", // Channel ID (e.g., C1234567890) or channel name (e.g., general or #general)\n include_locale: false // default, // Include locale information in the response\n});\n\nconst result = await slack_get_channel_info.action();\n// outputSchema for result.data when operation === 'get_channel_info':\n// {\n// operation: \"get_channel_info\" // Get detailed information about a specific channel,\n// ok: boolean // Whether the Slack API call was successful,\n// channel: { id: string // Unique channel identifier, name: string // Channel name without # prefix, is_channel: boolean | undefined // True if this is a public channel, is_group: boolean | undefined // True if this is a private channel, is_im: boolean | undefined // True if this is a direct message, is_mpim: boolean | undefined // True if this is a multi-person direct message, is_private: boolean | undefined // True if this is a private channel, created: number // Unix timestamp when channel was created, is_archived: boolean // True if channel is archived, is_general: boolean | undefined // True if this is the #general channel, unlinked: number | undefined // Unix timestamp when channel was unlinked, name_normalized: string | undefined // Normalized channel name, is_shared: boolean | undefined // True if channel is shared with other workspaces, is_ext_shared: boolean | undefined // True if channel is shared externally, is_org_shared: boolean | undefined // True if channel is shared across organization, shared_team_ids: string[] | undefined // IDs of teams this channel is shared with, pending_shared: string[] | undefined // Pending shared connections, pending_connected_team_ids: string[] | undefined // Pending team connection IDs, is_pending_ext_shared: boolean | undefined // True if external sharing is pending, is_member: boolean | undefined // True if the bot is a member of this channel, is_open: boolean | undefined // True if the channel is open, topic: { value: string // Topic text, creator: string // User ID who set the topic, last_set: number // Unix timestamp when topic was last set } | undefined // Channel topic information, purpose: { value: string // Purpose text, creator: string // User ID who set the purpose, last_set: number // Unix timestamp when purpose was last set } | undefined // Channel purpose information, num_members: number | undefined // Number of members in the channel } | undefined // Channel information object,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Get User Info example\nconst slack_get_user_info = new SlackBubble({\n operation: \"get_user_info\", // Get detailed information about a specific user. Required scopes: users:read (add users:read.email to access email field)\n user: \"example string\", // User ID to get information about\n include_locale: false // default, // Include locale information in the response\n});\n\nconst result = await slack_get_user_info.action();\n// outputSchema for result.data when operation === 'get_user_info':\n// {\n// operation: \"get_user_info\" // Get detailed information about a specific user,\n// ok: boolean // Whether the Slack API call was successful,\n// user: { id: string // Unique user identifier, team_id: string | undefined // Team/workspace ID, name: string // Username (handle without @), deleted: boolean | undefined // True if user account is deleted, color: string | undefined // Color code for user in UI, real_name: string | undefined // Users real name, tz: string | undefined // Timezone identifier, tz_label: string | undefined // Human-readable timezone label, tz_offset: number | undefined // Timezone offset from UTC in seconds, profile: { title: string | undefined // Job title, phone: string | undefined // Phone number, skype: string | undefined // Skype username, real_name: string | undefined // Real name from profile, real_name_normalized: string | undefined // Normalized real name, display_name: string | undefined // Display name, display_name_normalized: string | undefined // Normalized display name, fields: Record<string, unknown> | undefined // Custom profile fields, status_text: string | undefined // Current status text, status_emoji: string | undefined // Current status emoji, status_expiration: number | undefined // Unix timestamp when status expires, avatar_hash: string | undefined // Hash for avatar image, image_original: string | undefined // URL of original avatar image, is_custom_image: boolean | undefined // True if using custom avatar, email: string | undefined // Email address, first_name: string | undefined // First name, last_name: string | undefined // Last name, image_24: string | undefined // 24x24 pixel avatar URL, image_32: string | undefined // 32x32 pixel avatar URL, image_48: string | undefined // 48x48 pixel avatar URL, image_72: string | undefined // 72x72 pixel avatar URL, image_192: string | undefined // 192x192 pixel avatar URL, image_512: string | undefined // 512x512 pixel avatar URL, image_1024: string | undefined // 1024x1024 pixel avatar URL } | undefined // User profile information, is_admin: boolean | undefined // True if user is workspace admin, is_owner: boolean | undefined // True if user is workspace owner, is_primary_owner: boolean | undefined // True if user is primary workspace owner, is_restricted: boolean | undefined // True if user is restricted (single-channel guest), is_ultra_restricted: boolean | undefined // True if user is ultra restricted (multi-channel guest), is_bot: boolean | undefined // True if this is a bot user, is_app_user: boolean | undefined // True if this is an app user, updated: number | undefined // Unix timestamp when user was last updated, has_2fa: boolean | undefined // True if user has two-factor authentication enabled } | undefined // User information object,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// List Users example\nconst slack_list_users = new SlackBubble({\n operation: \"list_users\", // List all users in the Slack workspace. Required scopes: users:read (add users:read.email to access email field)\n limit: 50 // default, // Maximum number of users to return (1-1000)\n cursor: \"example string\", // Cursor for pagination to get next set of results\n include_locale: false // default, // Include locale information in the response\n});\n\nconst result = await slack_list_users.action();\n// outputSchema for result.data when operation === 'list_users':\n// {\n// operation: \"list_users\" // List all users in the Slack workspace,\n// ok: boolean // Whether the Slack API call was successful,\n// members: { id: string // Unique user identifier, team_id: string | undefined // Team/workspace ID, name: string // Username (handle without @), deleted: boolean | undefined // True if user account is deleted, color: string | undefined // Color code for user in UI, real_name: string | undefined // Users real name, tz: string | undefined // Timezone identifier, tz_label: string | undefined // Human-readable timezone label, tz_offset: number | undefined // Timezone offset from UTC in seconds, profile: { title: string | undefined // Job title, phone: string | undefined // Phone number, skype: string | undefined // Skype username, real_name: string | undefined // Real name from profile, real_name_normalized: string | undefined // Normalized real name, display_name: string | undefined // Display name, display_name_normalized: string | undefined // Normalized display name, fields: Record<string, unknown> | undefined // Custom profile fields, status_text: string | undefined // Current status text, status_emoji: string | undefined // Current status emoji, status_expiration: number | undefined // Unix timestamp when status expires, avatar_hash: string | undefined // Hash for avatar image, image_original: string | undefined // URL of original avatar image, is_custom_image: boolean | undefined // True if using custom avatar, email: string | undefined // Email address, first_name: string | undefined // First name, last_name: string | undefined // Last name, image_24: string | undefined // 24x24 pixel avatar URL, image_32: string | undefined // 32x32 pixel avatar URL, image_48: string | undefined // 48x48 pixel avatar URL, image_72: string | undefined // 72x72 pixel avatar URL, image_192: string | undefined // 192x192 pixel avatar URL, image_512: string | undefined // 512x512 pixel avatar URL, image_1024: string | undefined // 1024x1024 pixel avatar URL } | undefined // User profile information, is_admin: boolean | undefined // True if user is workspace admin, is_owner: boolean | undefined // True if user is workspace owner, is_primary_owner: boolean | undefined // True if user is primary workspace owner, is_restricted: boolean | undefined // True if user is restricted (single-channel guest), is_ultra_restricted: boolean | undefined // True if user is ultra restricted (multi-channel guest), is_bot: boolean | undefined // True if this is a bot user, is_app_user: boolean | undefined // True if this is an app user, updated: number | undefined // Unix timestamp when user was last updated, has_2fa: boolean | undefined // True if user has two-factor authentication enabled }[] | undefined // Array of user objects,\n// response_metadata: { next_cursor: string // Cursor for pagination to get next set of results } | undefined // Metadata for pagination,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Get Conversation History example\nconst slack_get_conversation_history = new SlackBubble({\n operation: \"get_conversation_history\", // Retrieve message history from a channel or direct message. Required scopes: channels:history (public), groups:history (private), im:history (DMs), mpim:history (group DMs)\n channel: \"example string\", // Channel ID (e.g., C1234567890) or channel name (e.g., general or #general)\n latest: \"example string\", // End of time range of messages to include (timestamp)\n oldest: \"example string\", // Start of time range of messages to include (timestamp)\n inclusive: false // default, // Include messages with latest or oldest timestamps in results\n limit: 20 // default, // Maximum number of messages to return (1-1000)\n cursor: \"example string\", // Cursor for pagination to get next set of results\n});\n\nconst result = await slack_get_conversation_history.action();\n// outputSchema for result.data when operation === 'get_conversation_history':\n// {\n// operation: \"get_conversation_history\" // Retrieve message history from a channel or direct message,\n// ok: boolean // Whether the Slack API call was successful,\n// messages: { type: string // Message type (usually \"message\"), ts: string | undefined // Message timestamp (unique identifier), user: string | undefined // User ID who sent the message, bot_id: string | undefined // Bot ID if message was sent by a bot, bot_profile: { name: string | undefined // Bot display name } | undefined // Bot profile information if message was sent by a bot, username: string | undefined // Username of the bot or user who sent the message, text: string | undefined // Message text content, thread_ts: string | undefined // Timestamp of parent message if this is a thread reply, parent_user_id: string | undefined // User ID of thread parent message author, reply_count: number | undefined // Number of replies in this thread, reply_users_count: number | undefined // Number of unique users who replied in thread, latest_reply: string | undefined // Timestamp of most recent reply in thread, reply_users: string[] | undefined // Array of user IDs who replied in thread, is_locked: boolean | undefined // True if thread is locked, subscribed: boolean | undefined // True if current user is subscribed to thread, attachments: unknown[] | undefined // Legacy message attachments, blocks: unknown[] | undefined // Block Kit structured content, reactions: { name: string // Emoji name without colons, users: string[] // User IDs who reacted with this emoji, count: number // Total count of this reaction }[] | undefined // Array of emoji reactions on this message, files: { id: string // Unique file identifier, name: string | undefined // Filename, title: string | undefined // File title, mimetype: string | undefined // MIME type of the file, filetype: string | undefined // File type extension, size: number | undefined // File size in bytes, user: string | undefined // User ID who uploaded the file, url_private: string | undefined // Private URL to access file, url_private_download: string | undefined // Private download URL, thumb_64: string | undefined // 64px thumbnail URL, thumb_360: string | undefined // 360px thumbnail URL, thumb_480: string | undefined // 480px thumbnail URL, original_w: number | undefined // Original image width, original_h: number | undefined // Original image height, permalink: string | undefined // Permanent link to file }[] | undefined // Array of files attached to this message }[] | undefined // Array of message objects,\n// has_more: boolean | undefined // Whether there are more messages to retrieve,\n// response_metadata: { next_cursor: string // Cursor for pagination to get next set of results } | undefined // Metadata for pagination,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Get Thread Replies example\nconst slack_get_thread_replies = new SlackBubble({\n operation: \"get_thread_replies\", // Retrieve all replies to a thread in a channel. Required scopes: channels:history (public), groups:history (private), im:history (DMs), mpim:history (group DMs)\n channel: \"example string\", // Channel ID where the thread exists\n ts: \"example string\", // Timestamp of the parent message to get replies for\n latest: \"example string\", // End of time range of messages to include (timestamp)\n oldest: \"example string\", // Start of time range of messages to include (timestamp)\n inclusive: false // default, // Include messages with latest or oldest timestamps in results\n limit: 100 // default, // Maximum number of messages to return (1-1000)\n cursor: \"example string\", // Cursor for pagination to get next set of results\n});\n\nconst result = await slack_get_thread_replies.action();\n// outputSchema for result.data when operation === 'get_thread_replies':\n// {\n// operation: \"get_thread_replies\" // Retrieve all replies to a thread in a channel,\n// ok: boolean // Whether the Slack API call was successful,\n// messages: { type: string // Message type (usually \"message\"), ts: string | undefined // Message timestamp (unique identifier), user: string | undefined // User ID who sent the message, bot_id: string | undefined // Bot ID if message was sent by a bot, bot_profile: { name: string | undefined // Bot display name } | undefined // Bot profile information if message was sent by a bot, username: string | undefined // Username of the bot or user who sent the message, text: string | undefined // Message text content, thread_ts: string | undefined // Timestamp of parent message if this is a thread reply, parent_user_id: string | undefined // User ID of thread parent message author, reply_count: number | undefined // Number of replies in this thread, reply_users_count: number | undefined // Number of unique users who replied in thread, latest_reply: string | undefined // Timestamp of most recent reply in thread, reply_users: string[] | undefined // Array of user IDs who replied in thread, is_locked: boolean | undefined // True if thread is locked, subscribed: boolean | undefined // True if current user is subscribed to thread, attachments: unknown[] | undefined // Legacy message attachments, blocks: unknown[] | undefined // Block Kit structured content, reactions: { name: string // Emoji name without colons, users: string[] // User IDs who reacted with this emoji, count: number // Total count of this reaction }[] | undefined // Array of emoji reactions on this message, files: { id: string // Unique file identifier, name: string | undefined // Filename, title: string | undefined // File title, mimetype: string | undefined // MIME type of the file, filetype: string | undefined // File type extension, size: number | undefined // File size in bytes, user: string | undefined // User ID who uploaded the file, url_private: string | undefined // Private URL to access file, url_private_download: string | undefined // Private download URL, thumb_64: string | undefined // 64px thumbnail URL, thumb_360: string | undefined // 360px thumbnail URL, thumb_480: string | undefined // 480px thumbnail URL, original_w: number | undefined // Original image width, original_h: number | undefined // Original image height, permalink: string | undefined // Permanent link to file }[] | undefined // Array of files attached to this message }[] | undefined // Array of message objects in the thread,\n// has_more: boolean | undefined // Whether there are more messages to retrieve,\n// response_metadata: { next_cursor: string // Cursor for pagination to get next set of results } | undefined // Metadata for pagination,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Update Message example\nconst slack_update_message = new SlackBubble({\n operation: \"update_message\", // Update an existing message in a channel. Required scopes: chat:write\n channel: \"example string\", // Channel ID (e.g., C1234567890) or channel name (e.g., general or #general) where the message is located\n ts: \"example string\", // Timestamp of the message to update\n text: \"example string\", // New text content for the message\n attachments: [{ color: \"example string\" // Color bar accent (hex color or good/warning/danger), pretext: \"example string\" // Text that appears before the main attachment content, author_name: \"example string\" // Author name displayed at the top, author_link: \"example string\" // URL to link the author name, author_icon: \"example string\" // Author icon image URL, title: \"example string\" // Attachment title text, title_link: \"example string\" // URL to link the title, text: \"example string\" // Main attachment text content, fields: [{ title: \"example string\" // Field title, value: \"example string\" // Field value, short: true // Whether field should be displayed side-by-side }] // Array of field objects for structured data, image_url: \"example string\" // URL of image to display, thumb_url: \"example string\" // URL of thumbnail image, footer: \"example string\" // Footer text, footer_icon: \"example string\" // Footer icon URL, ts: 42 // Timestamp for the attachment }], // New legacy message attachments\n blocks: [{ type: \"example string\" // Block element type (section, divider, button, etc.), text: { type: \"plain_text\" // options: \"plain_text\", \"mrkdwn\" // Text formatting type, text: \"example string\" // The actual text content, emoji: true, verbatim: true } // Text object for the block element, elements: [{ type: \"plain_text\" // options: \"plain_text\", \"mrkdwn\", \"image\" // Element type, text: \"example string\" // Text content, image_url: \"example string\" // Image URL for image elements, alt_text: \"example string\" // Alt text for image elements, emoji: true, verbatim: true }] // Elements array for context blocks }], // New Block Kit structured message blocks\n});\n\nconst result = await slack_update_message.action();\n// outputSchema for result.data when operation === 'update_message':\n// {\n// operation: \"update_message\" // Update an existing message in a channel,\n// ok: boolean // Whether the Slack API call was successful,\n// channel: string | undefined // Channel ID where the message was updated,\n// ts: string | undefined // Timestamp of the updated message,\n// text: string | undefined // Updated text content of the message,\n// message: { type: string // Message type (usually \"message\"), ts: string | undefined // Message timestamp (unique identifier), user: string | undefined // User ID who sent the message, bot_id: string | undefined // Bot ID if message was sent by a bot, bot_profile: { name: string | undefined // Bot display name } | undefined // Bot profile information if message was sent by a bot, username: string | undefined // Username of the bot or user who sent the message, text: string | undefined // Message text content, thread_ts: string | undefined // Timestamp of parent message if this is a thread reply, parent_user_id: string | undefined // User ID of thread parent message author, reply_count: number | undefined // Number of replies in this thread, reply_users_count: number | undefined // Number of unique users who replied in thread, latest_reply: string | undefined // Timestamp of most recent reply in thread, reply_users: string[] | undefined // Array of user IDs who replied in thread, is_locked: boolean | undefined // True if thread is locked, subscribed: boolean | undefined // True if current user is subscribed to thread, attachments: unknown[] | undefined // Legacy message attachments, blocks: unknown[] | undefined // Block Kit structured content, reactions: { name: string // Emoji name without colons, users: string[] // User IDs who reacted with this emoji, count: number // Total count of this reaction }[] | undefined // Array of emoji reactions on this message, files: { id: string // Unique file identifier, name: string | undefined // Filename, title: string | undefined // File title, mimetype: string | undefined // MIME type of the file, filetype: string | undefined // File type extension, size: number | undefined // File size in bytes, user: string | undefined // User ID who uploaded the file, url_private: string | undefined // Private URL to access file, url_private_download: string | undefined // Private download URL, thumb_64: string | undefined // 64px thumbnail URL, thumb_360: string | undefined // 360px thumbnail URL, thumb_480: string | undefined // 480px thumbnail URL, original_w: number | undefined // Original image width, original_h: number | undefined // Original image height, permalink: string | undefined // Permanent link to file }[] | undefined // Array of files attached to this message } | undefined // Details of the updated message,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Delete Message example\nconst slack_delete_message = new SlackBubble({\n operation: \"delete_message\", // Delete a message from a channel. Required scopes: chat:write. Note: Bot tokens can only delete messages posted by the bot; user tokens can delete any message the user has permission to delete\n channel: \"example string\", // Channel ID (e.g., C1234567890) or channel name (e.g., general or #general) where the message is located\n ts: \"example string\", // Timestamp of the message to delete\n});\n\nconst result = await slack_delete_message.action();\n// outputSchema for result.data when operation === 'delete_message':\n// {\n// operation: \"delete_message\" // Delete a message from a channel,\n// ok: boolean // Whether the Slack API call was successful,\n// channel: string | undefined // Channel ID where the message was deleted,\n// ts: string | undefined // Timestamp of the deleted message,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Add Reaction example\nconst slack_add_reaction = new SlackBubble({\n operation: \"add_reaction\", // Add an emoji reaction to a message. Required scopes: reactions:write\n name: \"example string\", // Emoji name without colons (e.g., thumbsup, heart)\n channel: \"example string\", // Channel ID (e.g., C1234567890) or channel name (e.g., general or #general) where the message is located\n timestamp: \"example string\", // Timestamp of the message to react to\n});\n\nconst result = await slack_add_reaction.action();\n// outputSchema for result.data when operation === 'add_reaction':\n// {\n// operation: \"add_reaction\" // Add an emoji reaction to a message,\n// ok: boolean // Whether the Slack API call was successful,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Remove Reaction example\nconst slack_remove_reaction = new SlackBubble({\n operation: \"remove_reaction\", // Remove an emoji reaction from a message. Required scopes: reactions:write\n name: \"example string\", // Emoji name without colons (e.g., thumbsup, heart)\n channel: \"example string\", // Channel ID (e.g., C1234567890) or channel name (e.g., general or #general) where the message is located\n timestamp: \"example string\", // Timestamp of the message to remove reaction from\n});\n\nconst result = await slack_remove_reaction.action();\n// outputSchema for result.data when operation === 'remove_reaction':\n// {\n// operation: \"remove_reaction\" // Remove an emoji reaction from a message,\n// ok: boolean // Whether the Slack API call was successful,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Join Channel example\nconst slack_join_channel = new SlackBubble({\n operation: \"join_channel\", // Join a public Slack channel. Required scopes: channels:join (bot token) or channels:write (user token)\n channel: \"example string\", // Channel ID (e.g., C1234567890) or channel name (e.g., general or #general) to join\n});\n\nconst result = await slack_join_channel.action();\n// outputSchema for result.data when operation === 'join_channel':\n// {\n// operation: \"join_channel\" // Join a public Slack channel,\n// ok: boolean // Whether the Slack API call was successful,\n// channel: { id: string // Unique channel identifier, name: string // Channel name without # prefix, is_channel: boolean | undefined // True if this is a public channel, is_group: boolean | undefined // True if this is a private channel, is_im: boolean | undefined // True if this is a direct message, is_mpim: boolean | undefined // True if this is a multi-person direct message, is_private: boolean | undefined // True if this is a private channel, created: number // Unix timestamp when channel was created, is_archived: boolean // True if channel is archived, is_general: boolean | undefined // True if this is the #general channel, unlinked: number | undefined // Unix timestamp when channel was unlinked, name_normalized: string | undefined // Normalized channel name, is_shared: boolean | undefined // True if channel is shared with other workspaces, is_ext_shared: boolean | undefined // True if channel is shared externally, is_org_shared: boolean | undefined // True if channel is shared across organization, shared_team_ids: string[] | undefined // IDs of teams this channel is shared with, pending_shared: string[] | undefined // Pending shared connections, pending_connected_team_ids: string[] | undefined // Pending team connection IDs, is_pending_ext_shared: boolean | undefined // True if external sharing is pending, is_member: boolean | undefined // True if the bot is a member of this channel, is_open: boolean | undefined // True if the channel is open, topic: { value: string // Topic text, creator: string // User ID who set the topic, last_set: number // Unix timestamp when topic was last set } | undefined // Channel topic information, purpose: { value: string // Purpose text, creator: string // User ID who set the purpose, last_set: number // Unix timestamp when purpose was last set } | undefined // Channel purpose information, num_members: number | undefined // Number of members in the channel } | undefined // Channel information object after joining,\n// already_in_channel: boolean | undefined // Whether the bot was already a member of the channel,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Upload File example\nconst slack_upload_file = new SlackBubble({\n operation: \"upload_file\", // Upload a file to a Slack channel. Required scopes: files:write\n channel: \"example string\", // Channel ID (e.g., C1234567890), channel name (e.g., general or #general), or user ID for DM\n file_path: \"example string\", // Local file path to upload (provide either file_path or content)\n content: \"example string\", // Base64-encoded file content to upload (provide either file_path or content)\n filename: \"example string\", // Override filename for the upload\n title: \"example string\", // Title for the file\n initial_comment: \"example string\", // Initial comment to post with the file\n thread_ts: \"example string\", // Timestamp of parent message to upload file in thread\n});\n\nconst result = await slack_upload_file.action();\n// outputSchema for result.data when operation === 'upload_file':\n// {\n// operation: \"upload_file\" // Upload a file to a Slack channel,\n// ok: boolean // Whether the Slack API call was successful,\n// file: { id: string // Unique file identifier, created: number // Unix timestamp when file was created, timestamp: number // Unix timestamp when file was uploaded, name: string // Original filename, title: string | undefined // File title, mimetype: string // MIME type of the file, filetype: string // File type extension, pretty_type: string // Human-readable file type, user: string // User ID who uploaded the file, editable: boolean // Whether the file is editable, size: number // File size in bytes, mode: string // File sharing mode, is_external: boolean // Whether file is from external source, external_type: string // External file type if applicable, is_public: boolean // Whether file is publicly accessible, public_url_shared: boolean // Whether public URL is shared, display_as_bot: boolean // Whether file is displayed as uploaded by bot, username: string // Username of uploader, url_private: string // Private URL to access file, url_private_download: string // Private download URL, permalink: string // Permanent link to file, permalink_public: string | undefined // Public permanent link, shares: { public: Record<string, { reply_users: string[] // User IDs who replied, reply_users_count: number // Number of unique users who replied, reply_count: number // Total number of replies, ts: string // Timestamp of the share, channel_name: string // Name of the channel, team_id: string // Team ID }[]> | undefined // Public channel shares, private: Record<string, { reply_users: string[] // User IDs who replied, reply_users_count: number // Number of unique users who replied, reply_count: number // Total number of replies, ts: string // Timestamp of the share, channel_name: string // Name of the channel, team_id: string // Team ID }[]> | undefined // Private channel shares } | undefined // Information about where file is shared, channels: string[] | undefined // Channel IDs where file is shared, groups: string[] | undefined // Private group IDs where file is shared, ims: string[] | undefined // Direct message IDs where file is shared, has_rich_preview: boolean | undefined // Whether file has rich preview } | undefined // File information object,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Schedule Message example\nconst slack_schedule_message = new SlackBubble({\n operation: \"schedule_message\", // Schedule a message to be sent at a future time. Required scopes: chat:write. Max 120 days in advance.\n channel: \"example string\", // Channel ID (e.g., C1234567890), channel name (e.g., general or #general), or user ID for DM\n text: \"example string\", // Message text content\n post_at: 42, // Unix timestamp (seconds) for when to send the message. Must be within 120 days from now.\n thread_ts: \"example string\", // Timestamp of parent message to reply in thread\n blocks: [{ type: \"example string\" // Block element type (section, divider, button, etc.), text: { type: \"plain_text\" // options: \"plain_text\", \"mrkdwn\" // Text formatting type, text: \"example string\" // The actual text content, emoji: true, verbatim: true } // Text object for the block element, elements: [{ type: \"plain_text\" // options: \"plain_text\", \"mrkdwn\", \"image\" // Element type, text: \"example string\" // Text content, image_url: \"example string\" // Image URL for image elements, alt_text: \"example string\" // Alt text for image elements, emoji: true, verbatim: true }] // Elements array for context blocks }], // Block Kit structured message blocks\n unfurl_links: true // default, // Enable automatic link unfurling\n unfurl_media: true // default, // Enable automatic media unfurling\n});\n\nconst result = await slack_schedule_message.action();\n// outputSchema for result.data when operation === 'schedule_message':\n// {\n// operation: \"schedule_message\" // Schedule a message to be sent at a future time,\n// ok: boolean // Whether the Slack API call was successful,\n// channel: string | undefined // Channel ID where message will be posted,\n// scheduled_message_id: string | undefined // Unique identifier for the scheduled message,\n// post_at: number | undefined // Unix timestamp when message will be posted,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Get File Info example\nconst slack_get_file_info = new SlackBubble({\n operation: \"get_file_info\", // Get detailed information about a file. Required scopes: files:read. Use this to get file URLs from a file_id (e.g., from file_shared events).\n file_id: \"example string\", // The file ID to get information about (e.g., F1234567890)\n});\n\nconst result = await slack_get_file_info.action();\n// outputSchema for result.data when operation === 'get_file_info':\n// {\n// operation: \"get_file_info\" // Get detailed information about a file,\n// ok: boolean // Whether the Slack API call was successful,\n// file: { id: string // Unique file identifier, name: string // Filename, title: string | undefined // File title, mimetype: string // MIME type of the file, filetype: string // File type extension, size: number // File size in bytes, user: string | undefined // User ID who uploaded the file, url_private: string | undefined // Private URL to access file, url_private_download: string | undefined // Private download URL, thumb_64: string | undefined // 64px thumbnail URL, thumb_360: string | undefined // 360px thumbnail URL, thumb_480: string | undefined // 480px thumbnail URL, original_w: number | undefined // Original image width, original_h: number | undefined // Original image height, permalink: string | undefined // Permanent link to file } | undefined // File information object,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Download File example\nconst slack_download_file = new SlackBubble({\n operation: \"download_file\", // Download a file from Slack. Required scopes: files:read. Returns the file content as base64 encoded string.\n file_url: \"example string\", // The url_private or url_private_download URL to download (e.g., https://files.slack.com/files-pri/...)\n file_id: \"example string\", // The file ID to download. If provided without file_url, will first fetch file info to get the URL.\n});\n\nconst result = await slack_download_file.action();\n// outputSchema for result.data when operation === 'download_file':\n// {\n// operation: \"download_file\" // Download a file from Slack,\n// ok: boolean // Whether the download was successful,\n// content: string | undefined // Base64 encoded file content,\n// filename: string | undefined // Original filename,\n// mimetype: string | undefined // MIME type of the file,\n// size: number | undefined // File size in bytes,\n// error: string // Error message if operation failed,\n// success: boolean // Whether the operation was successful\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`slack failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
4486
4486
  "requiredCredentials": [
4487
- "SLACK_CRED"
4487
+ "SLACK_CRED",
4488
+ "SLACK_API"
4488
4489
  ]
4489
4490
  },
4490
4491
  {
@@ -31674,6 +31675,7 @@
31674
31675
  "usageExample": "// Example usage of slack-notifier bubble\nconst slackNotifier = new SlackNotifierWorkflowBubble({\n contentToFormat: \"example string\", // Raw content or data to format for Slack,\n originalUserQuery: \"example string\", // Original user question or context,\n targetChannel: \"example string\", // Slack channel name (without #) or channel ID,\n messageTitle: \"example string\", // Custom title for the Slack message,\n messageStyle: \"professional\" // options: \"professional\", \"casual\", \"technical\", \"concise\", \"detailed\", // Style and tone for message formatting,\n includeFormatting: true // default, // Include emojis and rich Slack formatting,\n maxMessageLength: 3000 // default, // Maximum message length for Slack,\n aiModel: { model: \"openai/gpt-5\" // options: \"openai/gpt-5\", \"openai/gpt-5-mini\", \"openai/gpt-5.1\", \"openai/gpt-5.2\", \"google/gemini-2.5-pro\", \"google/gemini-2.5-flash\", \"google/gemini-2.5-flash-lite\", \"google/gemini-2.5-flash-image-preview\", \"google/gemini-3-pro-preview\", \"google/gemini-3-pro-image-preview\", \"google/gemini-3-flash-preview\", \"anthropic/claude-sonnet-4-5\", \"anthropic/claude-opus-4-5\", \"anthropic/claude-haiku-4-5\", \"openrouter/x-ai/grok-code-fast-1\", \"openrouter/z-ai/glm-4.6\", \"openrouter/z-ai/glm-4.7\", \"openrouter/anthropic/claude-sonnet-4.5\", \"openrouter/anthropic/claude-opus-4.5\", \"openrouter/google/gemini-3-pro-preview\", \"openrouter/morph/morph-v3-large\", \"openrouter/openai/gpt-oss-120b\", \"openrouter/openai/o3-deep-research\", \"openrouter/openai/o4-mini-deep-research\", temperature: 0.3 // default, maxTokens: 50000 // default }, // AI model settings for content formatting,\n});\n\nconst result = await slackNotifier.action();\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`${metadata.name} failed: ${result.error}`);\n}\n\n// outputSchema for result.data:\n// {\n// success: boolean,\n// error: string,\n// messageInfo: { messageTimestamp: string | undefined, channelId: string | undefined, channelName: string | undefined, formattedMessage: string | undefined, messageLength: number | undefined } | undefined,\n// formattingInfo: { modelUsed: string | undefined, wasTruncated: boolean, originalLength: number | undefined } | undefined\n// }\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
31675
31676
  "requiredCredentials": [
31676
31677
  "SLACK_CRED",
31678
+ "SLACK_API",
31677
31679
  "OPENAI_CRED",
31678
31680
  "GOOGLE_GEMINI_CRED",
31679
31681
  "ANTHROPIC_CRED"
@@ -31932,6 +31934,7 @@
31932
31934
  "requiredCredentials": [
31933
31935
  "DATABASE_CRED",
31934
31936
  "SLACK_CRED",
31937
+ "SLACK_API",
31935
31938
  "OPENAI_CRED",
31936
31939
  "GOOGLE_GEMINI_CRED",
31937
31940
  "ANTHROPIC_CRED"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bubblelab/bubble-core",
3
- "version": "0.1.119",
3
+ "version": "0.1.122",
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.119"
43
+ "@bubblelab/shared-schemas": "0.1.122"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/node": "^20.12.12",
@@ -1,4 +0,0 @@
1
- export { SalesforceBubble } from './salesforce.js';
2
- export { SalesforceParamsSchema, SalesforceResultSchema, SalesforceAccountSchema, SalesforceContactSchema, SalesforceLeadSchema, SalesforceOpportunitySchema, SalesforceUserInfoSchema, SoqlQueryResultSchema, type SalesforceParams, type SalesforceParamsInput, type SalesforceResult, } from './salesforce.schema.js';
3
- export { isValidSalesforceId, to18CharId, formatSalesforceDate, toSalesforceDate, escapeSoql, buildSoqlQuery, enhanceSalesforceErrorMessage, buildApiUrl, getSalesforceApiVersion, } from './salesforce.utils.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/salesforce/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,6BAA6B,EAC7B,WAAW,EACX,uBAAuB,GACxB,MAAM,uBAAuB,CAAC"}
@@ -1,4 +0,0 @@
1
- export { SalesforceBubble } from './salesforce.js';
2
- export { SalesforceParamsSchema, SalesforceResultSchema, SalesforceAccountSchema, SalesforceContactSchema, SalesforceLeadSchema, SalesforceOpportunitySchema, SalesforceUserInfoSchema, SoqlQueryResultSchema, } from './salesforce.schema.js';
3
- export { isValidSalesforceId, to18CharId, formatSalesforceDate, toSalesforceDate, escapeSoql, buildSoqlQuery, enhanceSalesforceErrorMessage, buildApiUrl, getSalesforceApiVersion, } from './salesforce.utils.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/salesforce/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,qBAAqB,GAItB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,6BAA6B,EAC7B,WAAW,EACX,uBAAuB,GACxB,MAAM,uBAAuB,CAAC"}