@bubblelab/bubble-core 0.1.277 → 0.1.279
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bubble-bundle.d.ts +178 -157
- package/dist/bubble-factory.d.ts.map +1 -1
- package/dist/bubble-factory.js +3 -0
- package/dist/bubble-factory.js.map +1 -1
- package/dist/bubbles/service-bubble/agi-inc.d.ts +20 -20
- package/dist/bubbles/service-bubble/ai-agent.d.ts +74 -74
- package/dist/bubbles/service-bubble/ai-agent.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/ai-agent.js +47 -4
- package/dist/bubbles/service-bubble/ai-agent.js.map +1 -1
- package/dist/bubbles/service-bubble/airtable.d.ts +76 -76
- package/dist/bubbles/service-bubble/apify/actors/app-rankings-scraper.d.ts +6 -6
- package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +2 -2
- package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +8 -8
- package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.d.ts +2 -2
- package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +22 -22
- package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-detail.d.ts +38 -38
- package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +52 -52
- package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts +6 -6
- package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts +12 -12
- package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +12 -12
- package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +132 -132
- package/dist/bubbles/service-bubble/apify/apify.d.ts +18 -18
- package/dist/bubbles/service-bubble/asana/asana.d.ts +1 -1
- package/dist/bubbles/service-bubble/asana/asana.schema.d.ts +1 -1
- package/dist/bubbles/service-bubble/ashby/ashby.d.ts +20 -20
- package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +28 -28
- package/dist/bubbles/service-bubble/assembled/assembled.d.ts +6 -6
- package/dist/bubbles/service-bubble/assembled/assembled.schema.d.ts +6 -6
- package/dist/bubbles/service-bubble/attio/attio.d.ts +6 -6
- package/dist/bubbles/service-bubble/attio/attio.schema.d.ts +6 -6
- package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +2 -2
- package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +2 -2
- package/dist/bubbles/service-bubble/capability-pipeline.js +1 -1
- package/dist/bubbles/service-bubble/capability-pipeline.js.map +1 -1
- package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +4 -4
- package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +8 -8
- package/dist/bubbles/service-bubble/discord/discord.d.ts +12 -12
- package/dist/bubbles/service-bubble/discord/discord.schema.d.ts +12 -12
- package/dist/bubbles/service-bubble/firecrawl.d.ts +330 -330
- package/dist/bubbles/service-bubble/followupboss.d.ts +4 -4
- package/dist/bubbles/service-bubble/github.d.ts +60 -60
- package/dist/bubbles/service-bubble/gmail.d.ts +164 -164
- package/dist/bubbles/service-bubble/google-calendar.d.ts +6 -6
- package/dist/bubbles/service-bubble/google-drive.d.ts +4 -4
- package/dist/bubbles/service-bubble/http.d.ts +6 -6
- package/dist/bubbles/service-bubble/hubspot/hubspot.d.ts +2 -2
- package/dist/bubbles/service-bubble/hubspot/hubspot.schema.d.ts +2 -2
- package/dist/bubbles/service-bubble/insforge-db.d.ts +8 -8
- package/dist/bubbles/service-bubble/jira/jira.d.ts +30 -30
- package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +36 -36
- package/dist/bubbles/service-bubble/metabase/index.d.ts +4 -0
- package/dist/bubbles/service-bubble/metabase/index.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/metabase/index.js +4 -0
- package/dist/bubbles/service-bubble/metabase/index.js.map +1 -0
- package/dist/bubbles/service-bubble/metabase/metabase.d.ts +746 -0
- package/dist/bubbles/service-bubble/metabase/metabase.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/metabase/metabase.js +221 -0
- package/dist/bubbles/service-bubble/metabase/metabase.js.map +1 -0
- package/dist/bubbles/service-bubble/metabase/metabase.schema.d.ts +1125 -0
- package/dist/bubbles/service-bubble/metabase/metabase.schema.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/metabase/metabase.schema.js +222 -0
- package/dist/bubbles/service-bubble/metabase/metabase.schema.js.map +1 -0
- package/dist/bubbles/service-bubble/metabase/metabase.utils.d.ts +15 -0
- package/dist/bubbles/service-bubble/metabase/metabase.utils.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/metabase/metabase.utils.js +32 -0
- package/dist/bubbles/service-bubble/metabase/metabase.utils.js.map +1 -0
- package/dist/bubbles/service-bubble/notion/notion.d.ts +168 -168
- package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +16 -16
- package/dist/bubbles/service-bubble/postgresql.d.ts +8 -8
- package/dist/bubbles/service-bubble/posthog/posthog.d.ts +10 -10
- package/dist/bubbles/service-bubble/posthog/posthog.schema.d.ts +14 -14
- package/dist/bubbles/service-bubble/resend.d.ts +12 -12
- package/dist/bubbles/service-bubble/slack/slack.d.ts +392 -392
- package/dist/bubbles/service-bubble/snowflake/snowflake.d.ts +4 -4
- package/dist/bubbles/service-bubble/snowflake/snowflake.schema.d.ts +4 -4
- package/dist/bubbles/service-bubble/sortly/sortly.d.ts +36 -36
- package/dist/bubbles/service-bubble/sortly/sortly.schema.d.ts +40 -40
- package/dist/bubbles/service-bubble/stripe/stripe.d.ts +24 -24
- package/dist/bubbles/service-bubble/stripe/stripe.schema.d.ts +28 -28
- package/dist/bubbles/service-bubble/xero/xero.d.ts +2 -2
- package/dist/bubbles/service-bubble/xero/xero.schema.d.ts +2 -2
- package/dist/bubbles/service-bubble/zendesk/zendesk.d.ts +166 -20
- package/dist/bubbles/service-bubble/zendesk/zendesk.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/zendesk/zendesk.js +105 -11
- package/dist/bubbles/service-bubble/zendesk/zendesk.js.map +1 -1
- package/dist/bubbles/service-bubble/zendesk/zendesk.schema.d.ts +163 -20
- package/dist/bubbles/service-bubble/zendesk/zendesk.schema.d.ts.map +1 -1
- package/dist/bubbles/service-bubble/zendesk/zendesk.schema.js +57 -0
- package/dist/bubbles/service-bubble/zendesk/zendesk.schema.js.map +1 -1
- package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts +6 -6
- package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +8 -8
- package/dist/bubbles/tool-bubble/app-rankings-tool.d.ts +8 -8
- package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +4 -4
- package/dist/bubbles/tool-bubble/chart-js-tool.d.ts +4 -4
- package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +20 -20
- package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +384 -384
- package/dist/bubbles/tool-bubble/people-search-tool.d.ts +44 -44
- package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +10 -10
- package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +4 -4
- package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +4 -4
- package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +60 -60
- package/dist/bubbles/tool-bubble/twitter-tool.d.ts +134 -134
- package/dist/bubbles/tool-bubble/yc-scraper-tool.d.ts +8 -8
- package/dist/bubbles/tool-bubble/youtube-tool.d.ts +20 -20
- package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +12 -12
- package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +8 -8
- package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +2 -2
- package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +34 -34
- package/dist/bubbles.json +675 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/bubbles.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "2.0.0",
|
|
3
|
-
"generatedAt": "2026-04-
|
|
4
|
-
"totalCount":
|
|
3
|
+
"generatedAt": "2026-04-09T08:53:33.188Z",
|
|
4
|
+
"totalCount": 83,
|
|
5
5
|
"bubbles": [
|
|
6
6
|
{
|
|
7
7
|
"name": "hello-world",
|
|
@@ -77797,6 +77797,13 @@
|
|
|
77797
77797
|
},
|
|
77798
77798
|
"description": "Custom field values. Use list_ticket_fields to discover available fields and their IDs."
|
|
77799
77799
|
},
|
|
77800
|
+
"uploads": {
|
|
77801
|
+
"type": "array",
|
|
77802
|
+
"items": {
|
|
77803
|
+
"type": "string"
|
|
77804
|
+
},
|
|
77805
|
+
"description": "Upload tokens from upload_attachment to attach files to the initial ticket comment"
|
|
77806
|
+
},
|
|
77800
77807
|
"credentials": {
|
|
77801
77808
|
"type": "object",
|
|
77802
77809
|
"additionalProperties": {
|
|
@@ -77913,6 +77920,13 @@
|
|
|
77913
77920
|
},
|
|
77914
77921
|
"description": "Custom field values to set. Use list_ticket_fields to discover available fields and their IDs."
|
|
77915
77922
|
},
|
|
77923
|
+
"uploads": {
|
|
77924
|
+
"type": "array",
|
|
77925
|
+
"items": {
|
|
77926
|
+
"type": "string"
|
|
77927
|
+
},
|
|
77928
|
+
"description": "Upload tokens from upload_attachment to attach files to the comment"
|
|
77929
|
+
},
|
|
77916
77930
|
"credentials": {
|
|
77917
77931
|
"type": "object",
|
|
77918
77932
|
"additionalProperties": {
|
|
@@ -78835,6 +78849,45 @@
|
|
|
78835
78849
|
"query"
|
|
78836
78850
|
],
|
|
78837
78851
|
"additionalProperties": false
|
|
78852
|
+
},
|
|
78853
|
+
{
|
|
78854
|
+
"type": "object",
|
|
78855
|
+
"properties": {
|
|
78856
|
+
"operation": {
|
|
78857
|
+
"type": "string",
|
|
78858
|
+
"enum": [
|
|
78859
|
+
"upload_attachment"
|
|
78860
|
+
],
|
|
78861
|
+
"description": "Upload a file to Zendesk and get an upload token for attaching to tickets"
|
|
78862
|
+
},
|
|
78863
|
+
"filename": {
|
|
78864
|
+
"type": "string",
|
|
78865
|
+
"minLength": 1,
|
|
78866
|
+
"description": "Filename with extension (e.g., \"report.pdf\", \"screenshot.png\")"
|
|
78867
|
+
},
|
|
78868
|
+
"content": {
|
|
78869
|
+
"type": "string",
|
|
78870
|
+
"minLength": 1,
|
|
78871
|
+
"description": "Base64-encoded file content"
|
|
78872
|
+
},
|
|
78873
|
+
"content_type": {
|
|
78874
|
+
"type": "string",
|
|
78875
|
+
"description": "MIME type of the file (e.g., \"application/pdf\"). Defaults to \"application/octet-stream\""
|
|
78876
|
+
},
|
|
78877
|
+
"credentials": {
|
|
78878
|
+
"type": "object",
|
|
78879
|
+
"additionalProperties": {
|
|
78880
|
+
"type": "string"
|
|
78881
|
+
},
|
|
78882
|
+
"description": "Object mapping credential types to values (injected at runtime)"
|
|
78883
|
+
}
|
|
78884
|
+
},
|
|
78885
|
+
"required": [
|
|
78886
|
+
"operation",
|
|
78887
|
+
"filename",
|
|
78888
|
+
"content"
|
|
78889
|
+
],
|
|
78890
|
+
"additionalProperties": false
|
|
78838
78891
|
}
|
|
78839
78892
|
]
|
|
78840
78893
|
},
|
|
@@ -79423,6 +79476,43 @@
|
|
|
79423
79476
|
"type": "number",
|
|
79424
79477
|
"description": "Author user ID"
|
|
79425
79478
|
},
|
|
79479
|
+
"attachments": {
|
|
79480
|
+
"type": "array",
|
|
79481
|
+
"items": {
|
|
79482
|
+
"type": "object",
|
|
79483
|
+
"properties": {
|
|
79484
|
+
"id": {
|
|
79485
|
+
"type": "number",
|
|
79486
|
+
"description": "Attachment ID"
|
|
79487
|
+
},
|
|
79488
|
+
"file_name": {
|
|
79489
|
+
"type": "string",
|
|
79490
|
+
"description": "Filename"
|
|
79491
|
+
},
|
|
79492
|
+
"content_url": {
|
|
79493
|
+
"type": "string",
|
|
79494
|
+
"description": "URL to download the attachment"
|
|
79495
|
+
},
|
|
79496
|
+
"content_type": {
|
|
79497
|
+
"type": "string",
|
|
79498
|
+
"description": "MIME type"
|
|
79499
|
+
},
|
|
79500
|
+
"size": {
|
|
79501
|
+
"type": "number",
|
|
79502
|
+
"description": "File size in bytes"
|
|
79503
|
+
}
|
|
79504
|
+
},
|
|
79505
|
+
"required": [
|
|
79506
|
+
"id",
|
|
79507
|
+
"file_name",
|
|
79508
|
+
"content_url",
|
|
79509
|
+
"content_type",
|
|
79510
|
+
"size"
|
|
79511
|
+
],
|
|
79512
|
+
"additionalProperties": false
|
|
79513
|
+
},
|
|
79514
|
+
"description": "File attachments on this comment"
|
|
79515
|
+
},
|
|
79426
79516
|
"created_at": {
|
|
79427
79517
|
"type": "string",
|
|
79428
79518
|
"description": "Created timestamp"
|
|
@@ -80862,10 +80952,84 @@
|
|
|
80862
80952
|
"error"
|
|
80863
80953
|
],
|
|
80864
80954
|
"additionalProperties": false
|
|
80955
|
+
},
|
|
80956
|
+
{
|
|
80957
|
+
"type": "object",
|
|
80958
|
+
"properties": {
|
|
80959
|
+
"operation": {
|
|
80960
|
+
"type": "string",
|
|
80961
|
+
"enum": [
|
|
80962
|
+
"upload_attachment"
|
|
80963
|
+
]
|
|
80964
|
+
},
|
|
80965
|
+
"success": {
|
|
80966
|
+
"type": "boolean",
|
|
80967
|
+
"description": "Whether the operation was successful"
|
|
80968
|
+
},
|
|
80969
|
+
"upload": {
|
|
80970
|
+
"type": "object",
|
|
80971
|
+
"properties": {
|
|
80972
|
+
"token": {
|
|
80973
|
+
"type": "string",
|
|
80974
|
+
"description": "Upload token to include in ticket comment uploads array"
|
|
80975
|
+
},
|
|
80976
|
+
"attachment": {
|
|
80977
|
+
"type": "object",
|
|
80978
|
+
"properties": {
|
|
80979
|
+
"id": {
|
|
80980
|
+
"type": "number",
|
|
80981
|
+
"description": "Attachment ID"
|
|
80982
|
+
},
|
|
80983
|
+
"file_name": {
|
|
80984
|
+
"type": "string",
|
|
80985
|
+
"description": "Uploaded filename"
|
|
80986
|
+
},
|
|
80987
|
+
"content_url": {
|
|
80988
|
+
"type": "string",
|
|
80989
|
+
"description": "URL to access the attachment"
|
|
80990
|
+
},
|
|
80991
|
+
"size": {
|
|
80992
|
+
"type": "number",
|
|
80993
|
+
"description": "File size in bytes"
|
|
80994
|
+
},
|
|
80995
|
+
"content_type": {
|
|
80996
|
+
"type": "string",
|
|
80997
|
+
"description": "MIME type of the file"
|
|
80998
|
+
}
|
|
80999
|
+
},
|
|
81000
|
+
"required": [
|
|
81001
|
+
"id",
|
|
81002
|
+
"file_name",
|
|
81003
|
+
"content_url",
|
|
81004
|
+
"size",
|
|
81005
|
+
"content_type"
|
|
81006
|
+
],
|
|
81007
|
+
"additionalProperties": false,
|
|
81008
|
+
"description": "Attachment metadata"
|
|
81009
|
+
}
|
|
81010
|
+
},
|
|
81011
|
+
"required": [
|
|
81012
|
+
"token",
|
|
81013
|
+
"attachment"
|
|
81014
|
+
],
|
|
81015
|
+
"additionalProperties": false,
|
|
81016
|
+
"description": "Upload result with token and attachment info"
|
|
81017
|
+
},
|
|
81018
|
+
"error": {
|
|
81019
|
+
"type": "string",
|
|
81020
|
+
"description": "Error message if operation failed"
|
|
81021
|
+
}
|
|
81022
|
+
},
|
|
81023
|
+
"required": [
|
|
81024
|
+
"operation",
|
|
81025
|
+
"success",
|
|
81026
|
+
"error"
|
|
81027
|
+
],
|
|
81028
|
+
"additionalProperties": false
|
|
80865
81029
|
}
|
|
80866
81030
|
]
|
|
80867
81031
|
},
|
|
80868
|
-
"usageExample": "// List Tickets example\nconst zendesk_list_tickets = new ZendeskBubble({\n operation: \"list_tickets\", // List tickets with optional filters\n status: \"new\" // options: \"new\", \"open\", \"pending\", \"hold\", \"solved\", \"closed\", // Filter by ticket status\n sort_by: \"created_at\" // options: \"created_at\", \"updated_at\", \"priority\", \"status\", // Sort field (default: updated_at)\n sort_order: \"asc\" // options: \"asc\", \"desc\", // Sort order (default: desc)\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_tickets.action();\n// outputSchema for result.data when operation === 'list_tickets':\n// {\n// operation: \"list_tickets\",\n// success: boolean // Whether the operation was successful,\n// tickets: { id: number // Ticket ID, subject: string | undefined // Ticket subject, description: string | undefined // Ticket description, status: string | undefined // Ticket status, priority: string | undefined | null // Ticket priority, type: string | undefined | null // Ticket type, requester_id: number | undefined // Requester user ID, assignee_id: number | undefined | null // Assignee user ID, organization_id: number | undefined | null // Organization ID, tags: string[] | undefined // Ticket tags, custom_fields: { id: number, value: unknown | null }[] | undefined // Custom field values on the ticket, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp }[] | undefined // List of tickets,\n// count: number | undefined // Total ticket count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Ticket example\nconst zendesk_get_ticket = new ZendeskBubble({\n operation: \"get_ticket\", // Retrieve a single ticket by ID with full details\n ticket_id: \"example string\", // Zendesk ticket ID (numeric string)\n});\n\nconst result = await zendesk_get_ticket.action();\n// outputSchema for result.data when operation === 'get_ticket':\n// {\n// operation: \"get_ticket\",\n// success: boolean // Whether the operation was successful,\n// ticket: { id: number // Ticket ID, subject: string | undefined // Ticket subject, description: string | undefined // Ticket description, status: string | undefined // Ticket status, priority: string | undefined | null // Ticket priority, type: string | undefined | null // Ticket type, requester_id: number | undefined // Requester user ID, assignee_id: number | undefined | null // Assignee user ID, organization_id: number | undefined | null // Organization ID, tags: string[] | undefined // Ticket tags, custom_fields: { id: number, value: unknown | null }[] | undefined // Custom field values on the ticket, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Retrieved ticket,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Ticket example\nconst zendesk_create_ticket = new ZendeskBubble({\n operation: \"create_ticket\", // Create a new support ticket\n subject: \"example string\", // Ticket subject line\n body: \"example string\", // Ticket description / initial comment body\n requester_email: \"example string\", // Email of the requester (creates user if not found)\n requester_name: \"example string\", // Name of the requester (used when creating a new requester alongside email)\n assignee_id: 42, // Agent ID to assign the ticket to\n priority: \"urgent\" // options: \"urgent\", \"high\", \"normal\", \"low\", // Ticket priority\n type: \"problem\" // options: \"problem\", \"incident\", \"question\", \"task\", // Ticket type\n tags: [\"example string\"], // Tags to apply to the ticket\n custom_fields: [{ id: 42 // Custom ticket field ID, value: [\"example string\"] // Field value. For dropdowns use the tag name, for multiselect use an array of tag names, for dates use \"YYYY-MM-DD\" }], // Custom field values. Use list_ticket_fields to discover available fields and their IDs.\n});\n\nconst result = await zendesk_create_ticket.action();\n// outputSchema for result.data when operation === 'create_ticket':\n// {\n// operation: \"create_ticket\",\n// success: boolean // Whether the operation was successful,\n// ticket: { id: number // Ticket ID, subject: string | undefined // Ticket subject, description: string | undefined // Ticket description, status: string | undefined // Ticket status, priority: string | undefined | null // Ticket priority, type: string | undefined | null // Ticket type, requester_id: number | undefined // Requester user ID, assignee_id: number | undefined | null // Assignee user ID, organization_id: number | undefined | null // Organization ID, tags: string[] | undefined // Ticket tags, custom_fields: { id: number, value: unknown | null }[] | undefined // Custom field values on the ticket, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Created ticket,\n// error: string // Error message if operation failed\n// }\n\n\n// Update Ticket example\nconst zendesk_update_ticket = new ZendeskBubble({\n operation: \"update_ticket\", // Update a ticket: add a reply/comment, change status, priority, or assignee\n ticket_id: \"example string\", // Zendesk ticket ID (numeric string)\n comment: \"example string\", // Comment body to add to the ticket (public reply or internal note)\n public: true // default, // Whether the comment is public (visible to requester) or internal note (default: true)\n status: \"new\" // options: \"new\", \"open\", \"pending\", \"hold\", \"solved\", \"closed\", // Set new ticket status\n priority: \"urgent\" // options: \"urgent\", \"high\", \"normal\", \"low\", // Set new ticket priority\n assignee_id: 42, // Reassign ticket to this agent ID\n tags: [\"example string\"], // Replace ticket tags with this list\n custom_fields: [{ id: 42 // Custom ticket field ID, value: [\"example string\"] // Field value. For dropdowns use the tag name, for multiselect use an array of tag names, for dates use \"YYYY-MM-DD\" }], // Custom field values to set. Use list_ticket_fields to discover available fields and their IDs.\n});\n\nconst result = await zendesk_update_ticket.action();\n// outputSchema for result.data when operation === 'update_ticket':\n// {\n// operation: \"update_ticket\",\n// success: boolean // Whether the operation was successful,\n// ticket: { id: number // Ticket ID, subject: string | undefined // Ticket subject, description: string | undefined // Ticket description, status: string | undefined // Ticket status, priority: string | undefined | null // Ticket priority, type: string | undefined | null // Ticket type, requester_id: number | undefined // Requester user ID, assignee_id: number | undefined | null // Assignee user ID, organization_id: number | undefined | null // Organization ID, tags: string[] | undefined // Ticket tags, custom_fields: { id: number, value: unknown | null }[] | undefined // Custom field values on the ticket, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Updated ticket,\n// error: string // Error message if operation failed\n// }\n\n\n// List Ticket Comments example\nconst zendesk_list_ticket_comments = new ZendeskBubble({\n operation: \"list_ticket_comments\", // List comments/replies on a ticket\n ticket_id: \"example string\", // Zendesk ticket ID (numeric string)\n sort_order: \"asc\" // options: \"asc\", \"desc\", // Sort order for comments (default: asc — oldest first)\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_ticket_comments.action();\n// outputSchema for result.data when operation === 'list_ticket_comments':\n// {\n// operation: \"list_ticket_comments\",\n// success: boolean // Whether the operation was successful,\n// comments: { id: number // Comment ID, body: string | undefined // Comment body text, html_body: string | undefined // Comment body HTML, public: boolean | undefined // Whether comment is public, author_id: number | undefined // Author user ID, created_at: string | undefined // Created timestamp }[] | undefined // List of comments,\n// count: number | undefined // Total comment count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// List Users example\nconst zendesk_list_users = new ZendeskBubble({\n operation: \"list_users\", // List or search users\n query: \"example string\", // Search query (name or email)\n role: \"end-user\" // options: \"end-user\", \"agent\", \"admin\", // Filter by user role\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_users.action();\n// outputSchema for result.data when operation === 'list_users':\n// {\n// operation: \"list_users\",\n// success: boolean // Whether the operation was successful,\n// users: { id: number // User ID, name: string | undefined // User name, email: string | undefined // User email, role: string | undefined // User role (end-user, agent, admin), organization_id: number | undefined | null // Organization ID, active: boolean | undefined // Whether user is active, created_at: string | undefined // Created timestamp }[] | undefined // List of users,\n// count: number | undefined // Total user count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get User example\nconst zendesk_get_user = new ZendeskBubble({\n operation: \"get_user\", // Retrieve a single user by ID\n user_id: \"example string\", // Zendesk user ID (numeric string)\n});\n\nconst result = await zendesk_get_user.action();\n// outputSchema for result.data when operation === 'get_user':\n// {\n// operation: \"get_user\",\n// success: boolean // Whether the operation was successful,\n// user: { id: number // User ID, name: string | undefined // User name, email: string | undefined // User email, role: string | undefined // User role (end-user, agent, admin), organization_id: number | undefined | null // Organization ID, active: boolean | undefined // Whether user is active, created_at: string | undefined // Created timestamp } | undefined // Retrieved user,\n// error: string // Error message if operation failed\n// }\n\n\n// List Organizations example\nconst zendesk_list_organizations = new ZendeskBubble({\n operation: \"list_organizations\", // List or search organizations\n query: \"example string\", // Search by organization name or external ID\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_organizations.action();\n// outputSchema for result.data when operation === 'list_organizations':\n// {\n// operation: \"list_organizations\",\n// success: boolean // Whether the operation was successful,\n// organizations: { id: number // Organization ID, name: string | undefined // Organization name, domain_names: string[] | undefined // Associated domain names, external_id: string | undefined | null // External ID, created_at: string | undefined // Created timestamp }[] | undefined // List of organizations,\n// count: number | undefined // Total organization count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Organization example\nconst zendesk_get_organization = new ZendeskBubble({\n operation: \"get_organization\", // Retrieve a single organization by ID\n organization_id: \"example string\", // Zendesk organization ID (numeric string)\n});\n\nconst result = await zendesk_get_organization.action();\n// outputSchema for result.data when operation === 'get_organization':\n// {\n// operation: \"get_organization\",\n// success: boolean // Whether the operation was successful,\n// organization: { id: number // Organization ID, name: string | undefined // Organization name, domain_names: string[] | undefined // Associated domain names, external_id: string | undefined | null // External ID, created_at: string | undefined // Created timestamp } | undefined // Retrieved organization,\n// error: string // Error message if operation failed\n// }\n\n\n// Search example\nconst zendesk_search = new ZendeskBubble({\n operation: \"search\", // Unified search across tickets, users, and organizations using Zendesk query syntax\n query: \"example string\", // Zendesk search query (e.g., \"type:ticket status:open\", \"type:user email:john@example.com\")\n sort_by: \"updated_at\" // options: \"updated_at\", \"created_at\", \"priority\", \"status\", \"ticket_type\", // Sort field\n sort_order: \"asc\" // options: \"asc\", \"desc\", // Sort order (default: desc)\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_search.action();\n// outputSchema for result.data when operation === 'search':\n// {\n// operation: \"search\",\n// success: boolean // Whether the operation was successful,\n// results: Record<string, unknown>[] | undefined // Search results (mixed types),\n// count: number | undefined // Total result count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// List Articles example\nconst zendesk_list_articles = new ZendeskBubble({\n operation: \"list_articles\", // List or search Help Center articles\n query: \"example string\", // Search query for articles\n section_id: \"example string\", // Filter articles by section ID\n category_id: \"example string\", // Filter articles by category ID\n locale: \"example string\", // Filter by locale (e.g., \"en-us\")\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_articles.action();\n// outputSchema for result.data when operation === 'list_articles':\n// {\n// operation: \"list_articles\",\n// success: boolean // Whether the operation was successful,\n// articles: { id: number // Article ID, title: string | undefined // Article title, body: string | undefined // Article body HTML, locale: string | undefined // Article locale, section_id: number | undefined // Section ID, author_id: number | undefined // Author user ID, draft: boolean | undefined // Whether article is a draft, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp }[] | undefined // List of articles,\n// count: number | undefined // Total article count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Article example\nconst zendesk_get_article = new ZendeskBubble({\n operation: \"get_article\", // Retrieve a single Help Center article by ID with body content\n article_id: \"example string\", // Zendesk Help Center article ID\n locale: \"example string\", // Locale for the article (e.g., \"en-us\")\n});\n\nconst result = await zendesk_get_article.action();\n// outputSchema for result.data when operation === 'get_article':\n// {\n// operation: \"get_article\",\n// success: boolean // Whether the operation was successful,\n// article: { id: number // Article ID, title: string | undefined // Article title, body: string | undefined // Article body HTML, locale: string | undefined // Article locale, section_id: number | undefined // Section ID, author_id: number | undefined // Author user ID, draft: boolean | undefined // Whether article is a draft, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Retrieved article,\n// error: string // Error message if operation failed\n// }\n\n\n// List Ticket Fields example\nconst zendesk_list_ticket_fields = new ZendeskBubble({\n operation: \"list_ticket_fields\", // List all ticket fields (system and custom) to discover field IDs, types, and allowed values\n});\n\nconst result = await zendesk_list_ticket_fields.action();\n// outputSchema for result.data when operation === 'list_ticket_fields':\n// {\n// operation: \"list_ticket_fields\",\n// success: boolean // Whether the operation was successful,\n// ticket_fields: { id: number // Field ID, type: string // Field type (text, textarea, checkbox, date, integer, decimal, tagger, multiselect, etc.), title: string // Field display title, description: string | undefined | null // Field description, active: boolean | undefined // Whether the field is active, required: boolean | undefined // Whether the field is required, custom_field_options: { name: string // Display name of the option, value: string // Tag value to use when setting this field }[] | undefined | null // Available options for dropdown/tagger/multiselect fields }[] | undefined // List of ticket fields,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Ticket Field example\nconst zendesk_create_ticket_field = new ZendeskBubble({\n operation: \"create_ticket_field\", // Create a new custom ticket field (admin only)\n type: \"text\" // options: \"text\", \"textarea\", \"checkbox\", \"date\", \"integer\", \"decimal\", \"regexp\", \"partialcreditcard\", \"multiselect\", \"tagger\", \"lookup\", // Field type\n title: \"example string\", // Field display title\n description: \"example string\", // Field description\n required: true, // Whether agents must fill this field to mark a ticket as solved\n active: true // default, // Whether field is active\n custom_field_options: [{ name: \"example string\" // Display name of the option, value: \"example string\" // Tag value for this option }], // Options for tagger/multiselect fields. Each option needs a display name and a tag value.\n tag: \"example string\", // Tag added when checkbox is selected (checkbox type only)\n regexp_for_validation: \"example string\", // Validation regex (regexp type only)\n});\n\nconst result = await zendesk_create_ticket_field.action();\n// outputSchema for result.data when operation === 'create_ticket_field':\n// {\n// operation: \"create_ticket_field\",\n// success: boolean // Whether the operation was successful,\n// ticket_field: { id: number // Created field ID, type: string // Field type, title: string // Field title, active: boolean | undefined // Whether field is active, required: boolean | undefined // Whether field is required, custom_field_options: { name: string, value: string }[] | undefined | null } | undefined // Created ticket field,\n// error: string // Error message if operation failed\n// }\n\n\n// Delete Ticket Field example\nconst zendesk_delete_ticket_field = new ZendeskBubble({\n operation: \"delete_ticket_field\", // Delete a custom ticket field (admin only). System fields cannot be deleted.\n ticket_field_id: \"example string\", // ID of the ticket field to delete\n});\n\nconst result = await zendesk_delete_ticket_field.action();\n// outputSchema for result.data when operation === 'delete_ticket_field':\n// {\n// operation: \"delete_ticket_field\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// List Macros example\nconst zendesk_list_macros = new ZendeskBubble({\n operation: \"list_macros\", // List available macros. Optionally filter by active status or category.\n active: true, // Filter by active status (true = active only, false = inactive only)\n category: \"example string\", // Filter macros by category name\n include: \"usage_7d\" // options: \"usage_7d\", \"usage_24h\", \"usage_30d\", // Include usage statistics for the given period\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_macros.action();\n// outputSchema for result.data when operation === 'list_macros':\n// {\n// operation: \"list_macros\",\n// success: boolean // Whether the operation was successful,\n// macros: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp }[] | undefined // List of macros,\n// count: number | undefined // Total macro count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Macro example\nconst zendesk_get_macro = new ZendeskBubble({\n operation: \"get_macro\", // Retrieve a single macro by ID with its full action definitions\n macro_id: \"example string\", // Zendesk macro ID (numeric string)\n});\n\nconst result = await zendesk_get_macro.action();\n// outputSchema for result.data when operation === 'get_macro':\n// {\n// operation: \"get_macro\",\n// success: boolean // Whether the operation was successful,\n// macro: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Retrieved macro,\n// error: string // Error message if operation failed\n// }\n\n\n// Apply Macro example\nconst zendesk_apply_macro = new ZendeskBubble({\n operation: \"apply_macro\", // Apply a macro to a ticket. Returns the resulting ticket changes (comment text, field updates) without actually modifying the ticket. Use this to preview what a macro would do, then use update_ticket to apply the changes.\n ticket_id: \"example string\", // Zendesk ticket ID (numeric string)\n macro_id: \"example string\", // Zendesk macro ID to apply\n});\n\nconst result = await zendesk_apply_macro.action();\n// outputSchema for result.data when operation === 'apply_macro':\n// {\n// operation: \"apply_macro\",\n// success: boolean // Whether the operation was successful,\n// result: { ticket: Record<string, unknown> | undefined // Ticket fields that would be changed, comment: { body: string | undefined // Comment body text the macro would add, html_body: string | undefined // Comment body HTML the macro would add, public: boolean | undefined // Whether the comment would be public, scoped_body: string[][] | undefined // Scoped comment bodies (locale-specific) } | undefined // Comment that the macro would add to the ticket } | undefined // The result of applying the macro — shows what would change,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Macro example\nconst zendesk_create_macro = new ZendeskBubble({\n operation: \"create_macro\", // Create a new macro with a title and a set of actions\n title: \"example string\", // Macro title\n actions: [{ field: \"example string\" // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\", \"group_id\"), value: [\"example string\"] // The value to set for this field }], // Actions the macro performs. Each action has a field name and value (e.g., {field: \"comment_value\", value: \"Thanks for contacting us!\"})\n active: true // default, // Whether the macro is active (default: true)\n description: \"example string\", // Macro description\n restriction: { type: \"example string\" // Restriction type (e.g., \"Group\"), id: 42 // Restriction target ID, ids: [42] // Restriction target IDs }, // Access restriction (e.g., limit to a specific group)\n});\n\nconst result = await zendesk_create_macro.action();\n// outputSchema for result.data when operation === 'create_macro':\n// {\n// operation: \"create_macro\",\n// success: boolean // Whether the operation was successful,\n// macro: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Created macro,\n// error: string // Error message if operation failed\n// }\n\n\n// Update Macro example\nconst zendesk_update_macro = new ZendeskBubble({\n operation: \"update_macro\", // Update an existing macro\n macro_id: \"example string\", // Zendesk macro ID to update (numeric string)\n title: \"example string\", // New macro title\n actions: [{ field: \"example string\" // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\", \"group_id\"), value: [\"example string\"] // The value to set for this field }], // New actions for the macro\n active: true, // Set active status\n description: \"example string\", // New macro description\n restriction: { type: \"example string\" // Restriction type (e.g., \"Group\"), id: 42 // Restriction target ID, ids: [42] // Restriction target IDs }, // Access restriction\n});\n\nconst result = await zendesk_update_macro.action();\n// outputSchema for result.data when operation === 'update_macro':\n// {\n// operation: \"update_macro\",\n// success: boolean // Whether the operation was successful,\n// macro: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Updated macro,\n// error: string // Error message if operation failed\n// }\n\n\n// Delete Macro example\nconst zendesk_delete_macro = new ZendeskBubble({\n operation: \"delete_macro\", // Delete a macro (admin only)\n macro_id: \"example string\", // ID of the macro to delete\n});\n\nconst result = await zendesk_delete_macro.action();\n// outputSchema for result.data when operation === 'delete_macro':\n// {\n// operation: \"delete_macro\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Search Macros example\nconst zendesk_search_macros = new ZendeskBubble({\n operation: \"search_macros\", // Search macros by title keyword\n query: \"example string\", // Search query (matches macro title)\n active: true, // Filter by active status\n include: \"usage_7d\" // options: \"usage_7d\", \"usage_24h\", \"usage_30d\", // Include usage statistics for the given period\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_search_macros.action();\n// outputSchema for result.data when operation === 'search_macros':\n// {\n// operation: \"search_macros\",\n// success: boolean // Whether the operation was successful,\n// macros: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp }[] | undefined // Matching macros,\n// count: number | undefined // Total result count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`zendesk failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
|
|
81032
|
+
"usageExample": "// List Tickets example\nconst zendesk_list_tickets = new ZendeskBubble({\n operation: \"list_tickets\", // List tickets with optional filters\n status: \"new\" // options: \"new\", \"open\", \"pending\", \"hold\", \"solved\", \"closed\", // Filter by ticket status\n sort_by: \"created_at\" // options: \"created_at\", \"updated_at\", \"priority\", \"status\", // Sort field (default: updated_at)\n sort_order: \"asc\" // options: \"asc\", \"desc\", // Sort order (default: desc)\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_tickets.action();\n// outputSchema for result.data when operation === 'list_tickets':\n// {\n// operation: \"list_tickets\",\n// success: boolean // Whether the operation was successful,\n// tickets: { id: number // Ticket ID, subject: string | undefined // Ticket subject, description: string | undefined // Ticket description, status: string | undefined // Ticket status, priority: string | undefined | null // Ticket priority, type: string | undefined | null // Ticket type, requester_id: number | undefined // Requester user ID, assignee_id: number | undefined | null // Assignee user ID, organization_id: number | undefined | null // Organization ID, tags: string[] | undefined // Ticket tags, custom_fields: { id: number, value: unknown | null }[] | undefined // Custom field values on the ticket, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp }[] | undefined // List of tickets,\n// count: number | undefined // Total ticket count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Ticket example\nconst zendesk_get_ticket = new ZendeskBubble({\n operation: \"get_ticket\", // Retrieve a single ticket by ID with full details\n ticket_id: \"example string\", // Zendesk ticket ID (numeric string)\n});\n\nconst result = await zendesk_get_ticket.action();\n// outputSchema for result.data when operation === 'get_ticket':\n// {\n// operation: \"get_ticket\",\n// success: boolean // Whether the operation was successful,\n// ticket: { id: number // Ticket ID, subject: string | undefined // Ticket subject, description: string | undefined // Ticket description, status: string | undefined // Ticket status, priority: string | undefined | null // Ticket priority, type: string | undefined | null // Ticket type, requester_id: number | undefined // Requester user ID, assignee_id: number | undefined | null // Assignee user ID, organization_id: number | undefined | null // Organization ID, tags: string[] | undefined // Ticket tags, custom_fields: { id: number, value: unknown | null }[] | undefined // Custom field values on the ticket, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Retrieved ticket,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Ticket example\nconst zendesk_create_ticket = new ZendeskBubble({\n operation: \"create_ticket\", // Create a new support ticket\n subject: \"example string\", // Ticket subject line\n body: \"example string\", // Ticket description / initial comment body\n requester_email: \"example string\", // Email of the requester (creates user if not found)\n requester_name: \"example string\", // Name of the requester (used when creating a new requester alongside email)\n assignee_id: 42, // Agent ID to assign the ticket to\n priority: \"urgent\" // options: \"urgent\", \"high\", \"normal\", \"low\", // Ticket priority\n type: \"problem\" // options: \"problem\", \"incident\", \"question\", \"task\", // Ticket type\n tags: [\"example string\"], // Tags to apply to the ticket\n custom_fields: [{ id: 42 // Custom ticket field ID, value: [\"example string\"] // Field value. For dropdowns use the tag name, for multiselect use an array of tag names, for dates use \"YYYY-MM-DD\" }], // Custom field values. Use list_ticket_fields to discover available fields and their IDs.\n uploads: [\"example string\"], // Upload tokens from upload_attachment to attach files to the initial ticket comment\n});\n\nconst result = await zendesk_create_ticket.action();\n// outputSchema for result.data when operation === 'create_ticket':\n// {\n// operation: \"create_ticket\",\n// success: boolean // Whether the operation was successful,\n// ticket: { id: number // Ticket ID, subject: string | undefined // Ticket subject, description: string | undefined // Ticket description, status: string | undefined // Ticket status, priority: string | undefined | null // Ticket priority, type: string | undefined | null // Ticket type, requester_id: number | undefined // Requester user ID, assignee_id: number | undefined | null // Assignee user ID, organization_id: number | undefined | null // Organization ID, tags: string[] | undefined // Ticket tags, custom_fields: { id: number, value: unknown | null }[] | undefined // Custom field values on the ticket, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Created ticket,\n// error: string // Error message if operation failed\n// }\n\n\n// Update Ticket example\nconst zendesk_update_ticket = new ZendeskBubble({\n operation: \"update_ticket\", // Update a ticket: add a reply/comment, change status, priority, or assignee\n ticket_id: \"example string\", // Zendesk ticket ID (numeric string)\n comment: \"example string\", // Comment body to add to the ticket (public reply or internal note)\n public: true // default, // Whether the comment is public (visible to requester) or internal note (default: true)\n status: \"new\" // options: \"new\", \"open\", \"pending\", \"hold\", \"solved\", \"closed\", // Set new ticket status\n priority: \"urgent\" // options: \"urgent\", \"high\", \"normal\", \"low\", // Set new ticket priority\n assignee_id: 42, // Reassign ticket to this agent ID\n tags: [\"example string\"], // Replace ticket tags with this list\n custom_fields: [{ id: 42 // Custom ticket field ID, value: [\"example string\"] // Field value. For dropdowns use the tag name, for multiselect use an array of tag names, for dates use \"YYYY-MM-DD\" }], // Custom field values to set. Use list_ticket_fields to discover available fields and their IDs.\n uploads: [\"example string\"], // Upload tokens from upload_attachment to attach files to the comment\n});\n\nconst result = await zendesk_update_ticket.action();\n// outputSchema for result.data when operation === 'update_ticket':\n// {\n// operation: \"update_ticket\",\n// success: boolean // Whether the operation was successful,\n// ticket: { id: number // Ticket ID, subject: string | undefined // Ticket subject, description: string | undefined // Ticket description, status: string | undefined // Ticket status, priority: string | undefined | null // Ticket priority, type: string | undefined | null // Ticket type, requester_id: number | undefined // Requester user ID, assignee_id: number | undefined | null // Assignee user ID, organization_id: number | undefined | null // Organization ID, tags: string[] | undefined // Ticket tags, custom_fields: { id: number, value: unknown | null }[] | undefined // Custom field values on the ticket, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Updated ticket,\n// error: string // Error message if operation failed\n// }\n\n\n// List Ticket Comments example\nconst zendesk_list_ticket_comments = new ZendeskBubble({\n operation: \"list_ticket_comments\", // List comments/replies on a ticket\n ticket_id: \"example string\", // Zendesk ticket ID (numeric string)\n sort_order: \"asc\" // options: \"asc\", \"desc\", // Sort order for comments (default: asc — oldest first)\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_ticket_comments.action();\n// outputSchema for result.data when operation === 'list_ticket_comments':\n// {\n// operation: \"list_ticket_comments\",\n// success: boolean // Whether the operation was successful,\n// comments: { id: number // Comment ID, body: string | undefined // Comment body text, html_body: string | undefined // Comment body HTML, public: boolean | undefined // Whether comment is public, author_id: number | undefined // Author user ID, attachments: { id: number // Attachment ID, file_name: string // Filename, content_url: string // URL to download the attachment, content_type: string // MIME type, size: number // File size in bytes }[] | undefined // File attachments on this comment, created_at: string | undefined // Created timestamp }[] | undefined // List of comments,\n// count: number | undefined // Total comment count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// List Users example\nconst zendesk_list_users = new ZendeskBubble({\n operation: \"list_users\", // List or search users\n query: \"example string\", // Search query (name or email)\n role: \"end-user\" // options: \"end-user\", \"agent\", \"admin\", // Filter by user role\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_users.action();\n// outputSchema for result.data when operation === 'list_users':\n// {\n// operation: \"list_users\",\n// success: boolean // Whether the operation was successful,\n// users: { id: number // User ID, name: string | undefined // User name, email: string | undefined // User email, role: string | undefined // User role (end-user, agent, admin), organization_id: number | undefined | null // Organization ID, active: boolean | undefined // Whether user is active, created_at: string | undefined // Created timestamp }[] | undefined // List of users,\n// count: number | undefined // Total user count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get User example\nconst zendesk_get_user = new ZendeskBubble({\n operation: \"get_user\", // Retrieve a single user by ID\n user_id: \"example string\", // Zendesk user ID (numeric string)\n});\n\nconst result = await zendesk_get_user.action();\n// outputSchema for result.data when operation === 'get_user':\n// {\n// operation: \"get_user\",\n// success: boolean // Whether the operation was successful,\n// user: { id: number // User ID, name: string | undefined // User name, email: string | undefined // User email, role: string | undefined // User role (end-user, agent, admin), organization_id: number | undefined | null // Organization ID, active: boolean | undefined // Whether user is active, created_at: string | undefined // Created timestamp } | undefined // Retrieved user,\n// error: string // Error message if operation failed\n// }\n\n\n// List Organizations example\nconst zendesk_list_organizations = new ZendeskBubble({\n operation: \"list_organizations\", // List or search organizations\n query: \"example string\", // Search by organization name or external ID\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_organizations.action();\n// outputSchema for result.data when operation === 'list_organizations':\n// {\n// operation: \"list_organizations\",\n// success: boolean // Whether the operation was successful,\n// organizations: { id: number // Organization ID, name: string | undefined // Organization name, domain_names: string[] | undefined // Associated domain names, external_id: string | undefined | null // External ID, created_at: string | undefined // Created timestamp }[] | undefined // List of organizations,\n// count: number | undefined // Total organization count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Organization example\nconst zendesk_get_organization = new ZendeskBubble({\n operation: \"get_organization\", // Retrieve a single organization by ID\n organization_id: \"example string\", // Zendesk organization ID (numeric string)\n});\n\nconst result = await zendesk_get_organization.action();\n// outputSchema for result.data when operation === 'get_organization':\n// {\n// operation: \"get_organization\",\n// success: boolean // Whether the operation was successful,\n// organization: { id: number // Organization ID, name: string | undefined // Organization name, domain_names: string[] | undefined // Associated domain names, external_id: string | undefined | null // External ID, created_at: string | undefined // Created timestamp } | undefined // Retrieved organization,\n// error: string // Error message if operation failed\n// }\n\n\n// Search example\nconst zendesk_search = new ZendeskBubble({\n operation: \"search\", // Unified search across tickets, users, and organizations using Zendesk query syntax\n query: \"example string\", // Zendesk search query (e.g., \"type:ticket status:open\", \"type:user email:john@example.com\")\n sort_by: \"updated_at\" // options: \"updated_at\", \"created_at\", \"priority\", \"status\", \"ticket_type\", // Sort field\n sort_order: \"asc\" // options: \"asc\", \"desc\", // Sort order (default: desc)\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_search.action();\n// outputSchema for result.data when operation === 'search':\n// {\n// operation: \"search\",\n// success: boolean // Whether the operation was successful,\n// results: Record<string, unknown>[] | undefined // Search results (mixed types),\n// count: number | undefined // Total result count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// List Articles example\nconst zendesk_list_articles = new ZendeskBubble({\n operation: \"list_articles\", // List or search Help Center articles\n query: \"example string\", // Search query for articles\n section_id: \"example string\", // Filter articles by section ID\n category_id: \"example string\", // Filter articles by category ID\n locale: \"example string\", // Filter by locale (e.g., \"en-us\")\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_articles.action();\n// outputSchema for result.data when operation === 'list_articles':\n// {\n// operation: \"list_articles\",\n// success: boolean // Whether the operation was successful,\n// articles: { id: number // Article ID, title: string | undefined // Article title, body: string | undefined // Article body HTML, locale: string | undefined // Article locale, section_id: number | undefined // Section ID, author_id: number | undefined // Author user ID, draft: boolean | undefined // Whether article is a draft, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp }[] | undefined // List of articles,\n// count: number | undefined // Total article count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Article example\nconst zendesk_get_article = new ZendeskBubble({\n operation: \"get_article\", // Retrieve a single Help Center article by ID with body content\n article_id: \"example string\", // Zendesk Help Center article ID\n locale: \"example string\", // Locale for the article (e.g., \"en-us\")\n});\n\nconst result = await zendesk_get_article.action();\n// outputSchema for result.data when operation === 'get_article':\n// {\n// operation: \"get_article\",\n// success: boolean // Whether the operation was successful,\n// article: { id: number // Article ID, title: string | undefined // Article title, body: string | undefined // Article body HTML, locale: string | undefined // Article locale, section_id: number | undefined // Section ID, author_id: number | undefined // Author user ID, draft: boolean | undefined // Whether article is a draft, created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Retrieved article,\n// error: string // Error message if operation failed\n// }\n\n\n// List Ticket Fields example\nconst zendesk_list_ticket_fields = new ZendeskBubble({\n operation: \"list_ticket_fields\", // List all ticket fields (system and custom) to discover field IDs, types, and allowed values\n});\n\nconst result = await zendesk_list_ticket_fields.action();\n// outputSchema for result.data when operation === 'list_ticket_fields':\n// {\n// operation: \"list_ticket_fields\",\n// success: boolean // Whether the operation was successful,\n// ticket_fields: { id: number // Field ID, type: string // Field type (text, textarea, checkbox, date, integer, decimal, tagger, multiselect, etc.), title: string // Field display title, description: string | undefined | null // Field description, active: boolean | undefined // Whether the field is active, required: boolean | undefined // Whether the field is required, custom_field_options: { name: string // Display name of the option, value: string // Tag value to use when setting this field }[] | undefined | null // Available options for dropdown/tagger/multiselect fields }[] | undefined // List of ticket fields,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Ticket Field example\nconst zendesk_create_ticket_field = new ZendeskBubble({\n operation: \"create_ticket_field\", // Create a new custom ticket field (admin only)\n type: \"text\" // options: \"text\", \"textarea\", \"checkbox\", \"date\", \"integer\", \"decimal\", \"regexp\", \"partialcreditcard\", \"multiselect\", \"tagger\", \"lookup\", // Field type\n title: \"example string\", // Field display title\n description: \"example string\", // Field description\n required: true, // Whether agents must fill this field to mark a ticket as solved\n active: true // default, // Whether field is active\n custom_field_options: [{ name: \"example string\" // Display name of the option, value: \"example string\" // Tag value for this option }], // Options for tagger/multiselect fields. Each option needs a display name and a tag value.\n tag: \"example string\", // Tag added when checkbox is selected (checkbox type only)\n regexp_for_validation: \"example string\", // Validation regex (regexp type only)\n});\n\nconst result = await zendesk_create_ticket_field.action();\n// outputSchema for result.data when operation === 'create_ticket_field':\n// {\n// operation: \"create_ticket_field\",\n// success: boolean // Whether the operation was successful,\n// ticket_field: { id: number // Created field ID, type: string // Field type, title: string // Field title, active: boolean | undefined // Whether field is active, required: boolean | undefined // Whether field is required, custom_field_options: { name: string, value: string }[] | undefined | null } | undefined // Created ticket field,\n// error: string // Error message if operation failed\n// }\n\n\n// Delete Ticket Field example\nconst zendesk_delete_ticket_field = new ZendeskBubble({\n operation: \"delete_ticket_field\", // Delete a custom ticket field (admin only). System fields cannot be deleted.\n ticket_field_id: \"example string\", // ID of the ticket field to delete\n});\n\nconst result = await zendesk_delete_ticket_field.action();\n// outputSchema for result.data when operation === 'delete_ticket_field':\n// {\n// operation: \"delete_ticket_field\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// List Macros example\nconst zendesk_list_macros = new ZendeskBubble({\n operation: \"list_macros\", // List available macros. Optionally filter by active status or category.\n active: true, // Filter by active status (true = active only, false = inactive only)\n category: \"example string\", // Filter macros by category name\n include: \"usage_7d\" // options: \"usage_7d\", \"usage_24h\", \"usage_30d\", // Include usage statistics for the given period\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_list_macros.action();\n// outputSchema for result.data when operation === 'list_macros':\n// {\n// operation: \"list_macros\",\n// success: boolean // Whether the operation was successful,\n// macros: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp }[] | undefined // List of macros,\n// count: number | undefined // Total macro count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Get Macro example\nconst zendesk_get_macro = new ZendeskBubble({\n operation: \"get_macro\", // Retrieve a single macro by ID with its full action definitions\n macro_id: \"example string\", // Zendesk macro ID (numeric string)\n});\n\nconst result = await zendesk_get_macro.action();\n// outputSchema for result.data when operation === 'get_macro':\n// {\n// operation: \"get_macro\",\n// success: boolean // Whether the operation was successful,\n// macro: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Retrieved macro,\n// error: string // Error message if operation failed\n// }\n\n\n// Apply Macro example\nconst zendesk_apply_macro = new ZendeskBubble({\n operation: \"apply_macro\", // Apply a macro to a ticket. Returns the resulting ticket changes (comment text, field updates) without actually modifying the ticket. Use this to preview what a macro would do, then use update_ticket to apply the changes.\n ticket_id: \"example string\", // Zendesk ticket ID (numeric string)\n macro_id: \"example string\", // Zendesk macro ID to apply\n});\n\nconst result = await zendesk_apply_macro.action();\n// outputSchema for result.data when operation === 'apply_macro':\n// {\n// operation: \"apply_macro\",\n// success: boolean // Whether the operation was successful,\n// result: { ticket: Record<string, unknown> | undefined // Ticket fields that would be changed, comment: { body: string | undefined // Comment body text the macro would add, html_body: string | undefined // Comment body HTML the macro would add, public: boolean | undefined // Whether the comment would be public, scoped_body: string[][] | undefined // Scoped comment bodies (locale-specific) } | undefined // Comment that the macro would add to the ticket } | undefined // The result of applying the macro — shows what would change,\n// error: string // Error message if operation failed\n// }\n\n\n// Create Macro example\nconst zendesk_create_macro = new ZendeskBubble({\n operation: \"create_macro\", // Create a new macro with a title and a set of actions\n title: \"example string\", // Macro title\n actions: [{ field: \"example string\" // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\", \"group_id\"), value: [\"example string\"] // The value to set for this field }], // Actions the macro performs. Each action has a field name and value (e.g., {field: \"comment_value\", value: \"Thanks for contacting us!\"})\n active: true // default, // Whether the macro is active (default: true)\n description: \"example string\", // Macro description\n restriction: { type: \"example string\" // Restriction type (e.g., \"Group\"), id: 42 // Restriction target ID, ids: [42] // Restriction target IDs }, // Access restriction (e.g., limit to a specific group)\n});\n\nconst result = await zendesk_create_macro.action();\n// outputSchema for result.data when operation === 'create_macro':\n// {\n// operation: \"create_macro\",\n// success: boolean // Whether the operation was successful,\n// macro: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Created macro,\n// error: string // Error message if operation failed\n// }\n\n\n// Update Macro example\nconst zendesk_update_macro = new ZendeskBubble({\n operation: \"update_macro\", // Update an existing macro\n macro_id: \"example string\", // Zendesk macro ID to update (numeric string)\n title: \"example string\", // New macro title\n actions: [{ field: \"example string\" // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\", \"group_id\"), value: [\"example string\"] // The value to set for this field }], // New actions for the macro\n active: true, // Set active status\n description: \"example string\", // New macro description\n restriction: { type: \"example string\" // Restriction type (e.g., \"Group\"), id: 42 // Restriction target ID, ids: [42] // Restriction target IDs }, // Access restriction\n});\n\nconst result = await zendesk_update_macro.action();\n// outputSchema for result.data when operation === 'update_macro':\n// {\n// operation: \"update_macro\",\n// success: boolean // Whether the operation was successful,\n// macro: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp } | undefined // Updated macro,\n// error: string // Error message if operation failed\n// }\n\n\n// Delete Macro example\nconst zendesk_delete_macro = new ZendeskBubble({\n operation: \"delete_macro\", // Delete a macro (admin only)\n macro_id: \"example string\", // ID of the macro to delete\n});\n\nconst result = await zendesk_delete_macro.action();\n// outputSchema for result.data when operation === 'delete_macro':\n// {\n// operation: \"delete_macro\",\n// success: boolean // Whether the operation was successful,\n// error: string // Error message if operation failed\n// }\n\n\n// Search Macros example\nconst zendesk_search_macros = new ZendeskBubble({\n operation: \"search_macros\", // Search macros by title keyword\n query: \"example string\", // Search query (matches macro title)\n active: true, // Filter by active status\n include: \"usage_7d\" // options: \"usage_7d\", \"usage_24h\", \"usage_30d\", // Include usage statistics for the given period\n page: 1 // default, // Page number for pagination (default 1)\n per_page: 25 // default, // Results per page (1-100, default 25)\n});\n\nconst result = await zendesk_search_macros.action();\n// outputSchema for result.data when operation === 'search_macros':\n// {\n// operation: \"search_macros\",\n// success: boolean // Whether the operation was successful,\n// macros: { id: number // Macro ID, title: string | undefined // Macro title/name, description: string | undefined | null // Macro description, active: boolean | undefined // Whether the macro is active, actions: { field: string // The ticket field this action targets (e.g., \"comment_value\", \"status\", \"priority\", \"assignee_id\"), value: unknown | null // The value to set for this field }[] | undefined // List of actions this macro performs, restriction: { type: string | undefined, id: number | undefined, ids: number[] | undefined } | undefined | null // Access restriction (e.g., limited to a group), created_at: string | undefined // Created timestamp, updated_at: string | undefined // Updated timestamp }[] | undefined // Matching macros,\n// count: number | undefined // Total result count,\n// next_page: string | undefined | null // Next page URL,\n// error: string // Error message if operation failed\n// }\n\n\n// Upload Attachment example\nconst zendesk_upload_attachment = new ZendeskBubble({\n operation: \"upload_attachment\", // Upload a file to Zendesk and get an upload token for attaching to tickets\n filename: \"example string\", // Filename with extension (e.g., \"report.pdf\", \"screenshot.png\")\n content: \"example string\", // Base64-encoded file content\n content_type: \"example string\", // MIME type of the file (e.g., \"application/pdf\"). Defaults to \"application/octet-stream\"\n});\n\nconst result = await zendesk_upload_attachment.action();\n// outputSchema for result.data when operation === 'upload_attachment':\n// {\n// operation: \"upload_attachment\",\n// success: boolean // Whether the operation was successful,\n// upload: { token: string // Upload token to include in ticket comment uploads array, attachment: { id: number // Attachment ID, file_name: string // Uploaded filename, content_url: string // URL to access the attachment, size: number // File size in bytes, content_type: string // MIME type of the file } // Attachment metadata } | undefined // Upload result with token and attachment info,\n// error: string // Error message if operation failed\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`zendesk failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
|
|
80869
81033
|
"requiredCredentials": [
|
|
80870
81034
|
"ZENDESK_CRED"
|
|
80871
81035
|
]
|
|
@@ -88929,6 +89093,514 @@
|
|
|
88929
89093
|
"requiredCredentials": [
|
|
88930
89094
|
"DOCUSIGN_CRED"
|
|
88931
89095
|
]
|
|
89096
|
+
},
|
|
89097
|
+
{
|
|
89098
|
+
"name": "metabase",
|
|
89099
|
+
"alias": "analytics",
|
|
89100
|
+
"type": "service",
|
|
89101
|
+
"shortDescription": "Metabase integration for dashboards, cards, and analytics queries",
|
|
89102
|
+
"useCase": "General purpose bubble for various workflow needs",
|
|
89103
|
+
"outputSchema": "Complex schema - see usage example for structure",
|
|
89104
|
+
"inputJsonSchema": {
|
|
89105
|
+
"anyOf": [
|
|
89106
|
+
{
|
|
89107
|
+
"type": "object",
|
|
89108
|
+
"properties": {
|
|
89109
|
+
"operation": {
|
|
89110
|
+
"type": "string",
|
|
89111
|
+
"enum": [
|
|
89112
|
+
"get_dashboard"
|
|
89113
|
+
],
|
|
89114
|
+
"description": "Get dashboard by ID"
|
|
89115
|
+
},
|
|
89116
|
+
"dashboard_id": {
|
|
89117
|
+
"type": "number",
|
|
89118
|
+
"description": "The dashboard ID to retrieve"
|
|
89119
|
+
},
|
|
89120
|
+
"credentials": {
|
|
89121
|
+
"type": "object",
|
|
89122
|
+
"additionalProperties": {
|
|
89123
|
+
"type": "string"
|
|
89124
|
+
},
|
|
89125
|
+
"description": "Credential mapping for authentication"
|
|
89126
|
+
}
|
|
89127
|
+
},
|
|
89128
|
+
"required": [
|
|
89129
|
+
"operation",
|
|
89130
|
+
"dashboard_id"
|
|
89131
|
+
],
|
|
89132
|
+
"additionalProperties": false
|
|
89133
|
+
},
|
|
89134
|
+
{
|
|
89135
|
+
"type": "object",
|
|
89136
|
+
"properties": {
|
|
89137
|
+
"operation": {
|
|
89138
|
+
"type": "string",
|
|
89139
|
+
"enum": [
|
|
89140
|
+
"list_dashboards"
|
|
89141
|
+
],
|
|
89142
|
+
"description": "List all available dashboards"
|
|
89143
|
+
},
|
|
89144
|
+
"credentials": {
|
|
89145
|
+
"type": "object",
|
|
89146
|
+
"additionalProperties": {
|
|
89147
|
+
"type": "string"
|
|
89148
|
+
},
|
|
89149
|
+
"description": "Credential mapping for authentication"
|
|
89150
|
+
}
|
|
89151
|
+
},
|
|
89152
|
+
"required": [
|
|
89153
|
+
"operation"
|
|
89154
|
+
],
|
|
89155
|
+
"additionalProperties": false
|
|
89156
|
+
},
|
|
89157
|
+
{
|
|
89158
|
+
"type": "object",
|
|
89159
|
+
"properties": {
|
|
89160
|
+
"operation": {
|
|
89161
|
+
"type": "string",
|
|
89162
|
+
"enum": [
|
|
89163
|
+
"get_card"
|
|
89164
|
+
],
|
|
89165
|
+
"description": "Get card metadata by ID"
|
|
89166
|
+
},
|
|
89167
|
+
"card_id": {
|
|
89168
|
+
"type": "number",
|
|
89169
|
+
"description": "The card ID to retrieve"
|
|
89170
|
+
},
|
|
89171
|
+
"credentials": {
|
|
89172
|
+
"type": "object",
|
|
89173
|
+
"additionalProperties": {
|
|
89174
|
+
"type": "string"
|
|
89175
|
+
},
|
|
89176
|
+
"description": "Credential mapping for authentication"
|
|
89177
|
+
}
|
|
89178
|
+
},
|
|
89179
|
+
"required": [
|
|
89180
|
+
"operation",
|
|
89181
|
+
"card_id"
|
|
89182
|
+
],
|
|
89183
|
+
"additionalProperties": false
|
|
89184
|
+
},
|
|
89185
|
+
{
|
|
89186
|
+
"type": "object",
|
|
89187
|
+
"properties": {
|
|
89188
|
+
"operation": {
|
|
89189
|
+
"type": "string",
|
|
89190
|
+
"enum": [
|
|
89191
|
+
"query_card"
|
|
89192
|
+
],
|
|
89193
|
+
"description": "Execute a card's query and return results"
|
|
89194
|
+
},
|
|
89195
|
+
"card_id": {
|
|
89196
|
+
"type": "number",
|
|
89197
|
+
"description": "The card ID to query"
|
|
89198
|
+
},
|
|
89199
|
+
"pivot": {
|
|
89200
|
+
"type": "boolean",
|
|
89201
|
+
"description": "Use the pivot endpoint (/api/card/pivot/:id/query) for pivot-table results"
|
|
89202
|
+
},
|
|
89203
|
+
"parameters": {
|
|
89204
|
+
"type": "object",
|
|
89205
|
+
"additionalProperties": {},
|
|
89206
|
+
"description": "Optional query parameters (filters)"
|
|
89207
|
+
},
|
|
89208
|
+
"credentials": {
|
|
89209
|
+
"type": "object",
|
|
89210
|
+
"additionalProperties": {
|
|
89211
|
+
"type": "string"
|
|
89212
|
+
},
|
|
89213
|
+
"description": "Credential mapping for authentication"
|
|
89214
|
+
}
|
|
89215
|
+
},
|
|
89216
|
+
"required": [
|
|
89217
|
+
"operation",
|
|
89218
|
+
"card_id"
|
|
89219
|
+
],
|
|
89220
|
+
"additionalProperties": false
|
|
89221
|
+
}
|
|
89222
|
+
]
|
|
89223
|
+
},
|
|
89224
|
+
"outputJsonSchema": {
|
|
89225
|
+
"anyOf": [
|
|
89226
|
+
{
|
|
89227
|
+
"type": "object",
|
|
89228
|
+
"properties": {
|
|
89229
|
+
"operation": {
|
|
89230
|
+
"type": "string",
|
|
89231
|
+
"enum": [
|
|
89232
|
+
"get_dashboard"
|
|
89233
|
+
]
|
|
89234
|
+
},
|
|
89235
|
+
"success": {
|
|
89236
|
+
"type": "boolean"
|
|
89237
|
+
},
|
|
89238
|
+
"error": {
|
|
89239
|
+
"type": "string",
|
|
89240
|
+
"default": ""
|
|
89241
|
+
},
|
|
89242
|
+
"data": {
|
|
89243
|
+
"type": "object",
|
|
89244
|
+
"properties": {
|
|
89245
|
+
"id": {
|
|
89246
|
+
"type": "number",
|
|
89247
|
+
"description": "Unique dashboard identifier"
|
|
89248
|
+
},
|
|
89249
|
+
"name": {
|
|
89250
|
+
"type": "string",
|
|
89251
|
+
"description": "Dashboard name"
|
|
89252
|
+
},
|
|
89253
|
+
"description": {
|
|
89254
|
+
"type": "string",
|
|
89255
|
+
"nullable": true,
|
|
89256
|
+
"description": "Dashboard description"
|
|
89257
|
+
},
|
|
89258
|
+
"collection_id": {
|
|
89259
|
+
"type": "number",
|
|
89260
|
+
"nullable": true,
|
|
89261
|
+
"description": "Collection the dashboard belongs to"
|
|
89262
|
+
},
|
|
89263
|
+
"dashcards": {
|
|
89264
|
+
"type": "array",
|
|
89265
|
+
"items": {
|
|
89266
|
+
"type": "object",
|
|
89267
|
+
"properties": {
|
|
89268
|
+
"id": {
|
|
89269
|
+
"type": "number",
|
|
89270
|
+
"description": "Unique dashcard identifier"
|
|
89271
|
+
},
|
|
89272
|
+
"card_id": {
|
|
89273
|
+
"type": "number",
|
|
89274
|
+
"nullable": true,
|
|
89275
|
+
"description": "ID of the card in this dashcard"
|
|
89276
|
+
},
|
|
89277
|
+
"card": {
|
|
89278
|
+
"type": "object",
|
|
89279
|
+
"properties": {
|
|
89280
|
+
"id": {
|
|
89281
|
+
"type": "number",
|
|
89282
|
+
"nullable": true,
|
|
89283
|
+
"description": "Card ID (null/absent for text/heading dashcards)"
|
|
89284
|
+
},
|
|
89285
|
+
"name": {
|
|
89286
|
+
"type": "string",
|
|
89287
|
+
"nullable": true,
|
|
89288
|
+
"description": "Card name (null/absent for text/heading dashcards)"
|
|
89289
|
+
},
|
|
89290
|
+
"display": {
|
|
89291
|
+
"type": "string",
|
|
89292
|
+
"description": "Card display type"
|
|
89293
|
+
},
|
|
89294
|
+
"description": {
|
|
89295
|
+
"type": "string",
|
|
89296
|
+
"nullable": true,
|
|
89297
|
+
"description": "Card description"
|
|
89298
|
+
}
|
|
89299
|
+
},
|
|
89300
|
+
"additionalProperties": true,
|
|
89301
|
+
"nullable": true,
|
|
89302
|
+
"description": "Embedded card metadata (null for virtual/text dashcards)"
|
|
89303
|
+
},
|
|
89304
|
+
"row": {
|
|
89305
|
+
"type": "number",
|
|
89306
|
+
"description": "Row position on dashboard grid"
|
|
89307
|
+
},
|
|
89308
|
+
"col": {
|
|
89309
|
+
"type": "number",
|
|
89310
|
+
"description": "Column position on dashboard grid"
|
|
89311
|
+
},
|
|
89312
|
+
"size_x": {
|
|
89313
|
+
"type": "number",
|
|
89314
|
+
"description": "Width in grid units"
|
|
89315
|
+
},
|
|
89316
|
+
"size_y": {
|
|
89317
|
+
"type": "number",
|
|
89318
|
+
"description": "Height in grid units"
|
|
89319
|
+
}
|
|
89320
|
+
},
|
|
89321
|
+
"required": [
|
|
89322
|
+
"id",
|
|
89323
|
+
"card_id",
|
|
89324
|
+
"row",
|
|
89325
|
+
"col",
|
|
89326
|
+
"size_x",
|
|
89327
|
+
"size_y"
|
|
89328
|
+
],
|
|
89329
|
+
"additionalProperties": true,
|
|
89330
|
+
"description": "Dashboard card (dashcard) object"
|
|
89331
|
+
},
|
|
89332
|
+
"description": "List of dashcards on this dashboard"
|
|
89333
|
+
},
|
|
89334
|
+
"parameters": {
|
|
89335
|
+
"type": "array",
|
|
89336
|
+
"items": {
|
|
89337
|
+
"type": "object",
|
|
89338
|
+
"additionalProperties": {}
|
|
89339
|
+
},
|
|
89340
|
+
"description": "Dashboard filter parameters"
|
|
89341
|
+
},
|
|
89342
|
+
"created_at": {
|
|
89343
|
+
"type": "string",
|
|
89344
|
+
"description": "Creation timestamp"
|
|
89345
|
+
},
|
|
89346
|
+
"updated_at": {
|
|
89347
|
+
"type": "string",
|
|
89348
|
+
"description": "Last update timestamp"
|
|
89349
|
+
}
|
|
89350
|
+
},
|
|
89351
|
+
"required": [
|
|
89352
|
+
"id",
|
|
89353
|
+
"name"
|
|
89354
|
+
],
|
|
89355
|
+
"additionalProperties": true,
|
|
89356
|
+
"description": "Metabase dashboard object"
|
|
89357
|
+
}
|
|
89358
|
+
},
|
|
89359
|
+
"required": [
|
|
89360
|
+
"operation",
|
|
89361
|
+
"success"
|
|
89362
|
+
],
|
|
89363
|
+
"additionalProperties": false
|
|
89364
|
+
},
|
|
89365
|
+
{
|
|
89366
|
+
"type": "object",
|
|
89367
|
+
"properties": {
|
|
89368
|
+
"operation": {
|
|
89369
|
+
"type": "string",
|
|
89370
|
+
"enum": [
|
|
89371
|
+
"list_dashboards"
|
|
89372
|
+
]
|
|
89373
|
+
},
|
|
89374
|
+
"success": {
|
|
89375
|
+
"type": "boolean"
|
|
89376
|
+
},
|
|
89377
|
+
"error": {
|
|
89378
|
+
"type": "string",
|
|
89379
|
+
"default": ""
|
|
89380
|
+
},
|
|
89381
|
+
"data": {
|
|
89382
|
+
"type": "object",
|
|
89383
|
+
"properties": {
|
|
89384
|
+
"dashboards": {
|
|
89385
|
+
"type": "array",
|
|
89386
|
+
"items": {
|
|
89387
|
+
"type": "object",
|
|
89388
|
+
"properties": {
|
|
89389
|
+
"id": {
|
|
89390
|
+
"type": "number",
|
|
89391
|
+
"description": "Unique dashboard identifier"
|
|
89392
|
+
},
|
|
89393
|
+
"name": {
|
|
89394
|
+
"type": "string",
|
|
89395
|
+
"description": "Dashboard name"
|
|
89396
|
+
},
|
|
89397
|
+
"description": {
|
|
89398
|
+
"type": "string",
|
|
89399
|
+
"nullable": true,
|
|
89400
|
+
"description": "Dashboard description"
|
|
89401
|
+
},
|
|
89402
|
+
"collection_id": {
|
|
89403
|
+
"type": "number",
|
|
89404
|
+
"nullable": true,
|
|
89405
|
+
"description": "Collection the dashboard belongs to"
|
|
89406
|
+
},
|
|
89407
|
+
"model": {
|
|
89408
|
+
"type": "string",
|
|
89409
|
+
"description": "Entity model type"
|
|
89410
|
+
},
|
|
89411
|
+
"created_at": {
|
|
89412
|
+
"type": "string",
|
|
89413
|
+
"description": "Creation timestamp"
|
|
89414
|
+
}
|
|
89415
|
+
},
|
|
89416
|
+
"required": [
|
|
89417
|
+
"id",
|
|
89418
|
+
"name"
|
|
89419
|
+
],
|
|
89420
|
+
"additionalProperties": true,
|
|
89421
|
+
"description": "Dashboard list item"
|
|
89422
|
+
}
|
|
89423
|
+
},
|
|
89424
|
+
"total": {
|
|
89425
|
+
"type": "number"
|
|
89426
|
+
}
|
|
89427
|
+
},
|
|
89428
|
+
"required": [
|
|
89429
|
+
"dashboards",
|
|
89430
|
+
"total"
|
|
89431
|
+
],
|
|
89432
|
+
"additionalProperties": false
|
|
89433
|
+
}
|
|
89434
|
+
},
|
|
89435
|
+
"required": [
|
|
89436
|
+
"operation",
|
|
89437
|
+
"success"
|
|
89438
|
+
],
|
|
89439
|
+
"additionalProperties": false
|
|
89440
|
+
},
|
|
89441
|
+
{
|
|
89442
|
+
"type": "object",
|
|
89443
|
+
"properties": {
|
|
89444
|
+
"operation": {
|
|
89445
|
+
"type": "string",
|
|
89446
|
+
"enum": [
|
|
89447
|
+
"get_card"
|
|
89448
|
+
]
|
|
89449
|
+
},
|
|
89450
|
+
"success": {
|
|
89451
|
+
"type": "boolean"
|
|
89452
|
+
},
|
|
89453
|
+
"error": {
|
|
89454
|
+
"type": "string",
|
|
89455
|
+
"default": ""
|
|
89456
|
+
},
|
|
89457
|
+
"data": {
|
|
89458
|
+
"type": "object",
|
|
89459
|
+
"properties": {
|
|
89460
|
+
"id": {
|
|
89461
|
+
"type": "number",
|
|
89462
|
+
"description": "Unique card identifier"
|
|
89463
|
+
},
|
|
89464
|
+
"name": {
|
|
89465
|
+
"type": "string",
|
|
89466
|
+
"description": "Card name"
|
|
89467
|
+
},
|
|
89468
|
+
"description": {
|
|
89469
|
+
"type": "string",
|
|
89470
|
+
"nullable": true,
|
|
89471
|
+
"description": "Card description"
|
|
89472
|
+
},
|
|
89473
|
+
"display": {
|
|
89474
|
+
"type": "string",
|
|
89475
|
+
"description": "Visualization type"
|
|
89476
|
+
},
|
|
89477
|
+
"collection_id": {
|
|
89478
|
+
"type": "number",
|
|
89479
|
+
"nullable": true,
|
|
89480
|
+
"description": "Collection the card belongs to"
|
|
89481
|
+
},
|
|
89482
|
+
"database_id": {
|
|
89483
|
+
"type": "number",
|
|
89484
|
+
"nullable": true,
|
|
89485
|
+
"description": "Database this card queries"
|
|
89486
|
+
},
|
|
89487
|
+
"dataset_query": {
|
|
89488
|
+
"type": "object",
|
|
89489
|
+
"additionalProperties": {},
|
|
89490
|
+
"description": "The query definition"
|
|
89491
|
+
},
|
|
89492
|
+
"result_metadata": {
|
|
89493
|
+
"type": "array",
|
|
89494
|
+
"items": {
|
|
89495
|
+
"type": "object",
|
|
89496
|
+
"additionalProperties": {}
|
|
89497
|
+
},
|
|
89498
|
+
"description": "Column metadata from the result"
|
|
89499
|
+
},
|
|
89500
|
+
"created_at": {
|
|
89501
|
+
"type": "string",
|
|
89502
|
+
"description": "Creation timestamp"
|
|
89503
|
+
},
|
|
89504
|
+
"updated_at": {
|
|
89505
|
+
"type": "string",
|
|
89506
|
+
"description": "Last update timestamp"
|
|
89507
|
+
}
|
|
89508
|
+
},
|
|
89509
|
+
"required": [
|
|
89510
|
+
"id",
|
|
89511
|
+
"name"
|
|
89512
|
+
],
|
|
89513
|
+
"additionalProperties": true,
|
|
89514
|
+
"description": "Metabase card (saved question) object"
|
|
89515
|
+
}
|
|
89516
|
+
},
|
|
89517
|
+
"required": [
|
|
89518
|
+
"operation",
|
|
89519
|
+
"success"
|
|
89520
|
+
],
|
|
89521
|
+
"additionalProperties": false
|
|
89522
|
+
},
|
|
89523
|
+
{
|
|
89524
|
+
"type": "object",
|
|
89525
|
+
"properties": {
|
|
89526
|
+
"operation": {
|
|
89527
|
+
"type": "string",
|
|
89528
|
+
"enum": [
|
|
89529
|
+
"query_card"
|
|
89530
|
+
]
|
|
89531
|
+
},
|
|
89532
|
+
"success": {
|
|
89533
|
+
"type": "boolean"
|
|
89534
|
+
},
|
|
89535
|
+
"error": {
|
|
89536
|
+
"type": "string",
|
|
89537
|
+
"default": ""
|
|
89538
|
+
},
|
|
89539
|
+
"data": {
|
|
89540
|
+
"type": "object",
|
|
89541
|
+
"properties": {
|
|
89542
|
+
"rows": {
|
|
89543
|
+
"type": "array",
|
|
89544
|
+
"items": {
|
|
89545
|
+
"type": "array",
|
|
89546
|
+
"items": {}
|
|
89547
|
+
},
|
|
89548
|
+
"description": "Result data rows"
|
|
89549
|
+
},
|
|
89550
|
+
"cols": {
|
|
89551
|
+
"type": "array",
|
|
89552
|
+
"items": {
|
|
89553
|
+
"type": "object",
|
|
89554
|
+
"properties": {
|
|
89555
|
+
"name": {
|
|
89556
|
+
"type": "string",
|
|
89557
|
+
"description": "Column name"
|
|
89558
|
+
},
|
|
89559
|
+
"display_name": {
|
|
89560
|
+
"type": "string",
|
|
89561
|
+
"description": "Display name for column"
|
|
89562
|
+
},
|
|
89563
|
+
"base_type": {
|
|
89564
|
+
"type": "string",
|
|
89565
|
+
"description": "Base data type of column"
|
|
89566
|
+
}
|
|
89567
|
+
},
|
|
89568
|
+
"required": [
|
|
89569
|
+
"name"
|
|
89570
|
+
],
|
|
89571
|
+
"additionalProperties": true
|
|
89572
|
+
},
|
|
89573
|
+
"description": "Column metadata"
|
|
89574
|
+
},
|
|
89575
|
+
"row_count": {
|
|
89576
|
+
"type": "number",
|
|
89577
|
+
"description": "Total number of rows returned"
|
|
89578
|
+
},
|
|
89579
|
+
"status": {
|
|
89580
|
+
"type": "string",
|
|
89581
|
+
"description": "Query execution status"
|
|
89582
|
+
}
|
|
89583
|
+
},
|
|
89584
|
+
"required": [
|
|
89585
|
+
"rows",
|
|
89586
|
+
"cols"
|
|
89587
|
+
],
|
|
89588
|
+
"additionalProperties": true,
|
|
89589
|
+
"description": "Flattened Metabase query result — rows and cols at top level"
|
|
89590
|
+
}
|
|
89591
|
+
},
|
|
89592
|
+
"required": [
|
|
89593
|
+
"operation",
|
|
89594
|
+
"success"
|
|
89595
|
+
],
|
|
89596
|
+
"additionalProperties": false
|
|
89597
|
+
}
|
|
89598
|
+
]
|
|
89599
|
+
},
|
|
89600
|
+
"usageExample": "// Get Dashboard example\nconst metabase_get_dashboard = new MetabaseBubble({\n operation: \"get_dashboard\", // Get dashboard by ID\n dashboard_id: 42, // The dashboard ID to retrieve\n});\n\nconst result = await metabase_get_dashboard.action();\n// outputSchema for result.data when operation === 'get_dashboard':\n// {\n// operation: \"get_dashboard\",\n// success: boolean,\n// error: string,\n// data: { id: number // Unique dashboard identifier, name: string // Dashboard name, description: string | null | undefined // Dashboard description, collection_id: number | null | undefined // Collection the dashboard belongs to, dashcards: { id: number // Unique dashcard identifier, card_id: number | null // ID of the card in this dashcard, card: { id: number | null | undefined // Card ID (null/absent for text/heading dashcards), name: string | null | undefined // Card name (null/absent for text/heading dashcards), display: string | undefined // Card display type, description: string | null | undefined // Card description } | null | undefined // Embedded card metadata (null for virtual/text dashcards), row: number // Row position on dashboard grid, col: number // Column position on dashboard grid, size_x: number // Width in grid units, size_y: number // Height in grid units }[] | undefined // List of dashcards on this dashboard, parameters: Record<string, unknown>[] | undefined // Dashboard filter parameters, created_at: string | undefined // Creation timestamp, updated_at: string | undefined // Last update timestamp } | undefined // Metabase dashboard object\n// }\n\n\n// List Dashboards example\nconst metabase_list_dashboards = new MetabaseBubble({\n operation: \"list_dashboards\", // List all available dashboards\n});\n\nconst result = await metabase_list_dashboards.action();\n// outputSchema for result.data when operation === 'list_dashboards':\n// {\n// operation: \"list_dashboards\",\n// success: boolean,\n// error: string,\n// data: { dashboards: { id: number // Unique dashboard identifier, name: string // Dashboard name, description: string | null | undefined // Dashboard description, collection_id: number | null | undefined // Collection the dashboard belongs to, model: string | undefined // Entity model type, created_at: string | undefined // Creation timestamp }[], total: number } | undefined\n// }\n\n\n// Get Card example\nconst metabase_get_card = new MetabaseBubble({\n operation: \"get_card\", // Get card metadata by ID\n card_id: 42, // The card ID to retrieve\n});\n\nconst result = await metabase_get_card.action();\n// outputSchema for result.data when operation === 'get_card':\n// {\n// operation: \"get_card\",\n// success: boolean,\n// error: string,\n// data: { id: number // Unique card identifier, name: string // Card name, description: string | null | undefined // Card description, display: string | undefined // Visualization type, collection_id: number | null | undefined // Collection the card belongs to, database_id: number | null | undefined // Database this card queries, dataset_query: Record<string, unknown> | undefined // The query definition, result_metadata: Record<string, unknown>[] | undefined // Column metadata from the result, created_at: string | undefined // Creation timestamp, updated_at: string | undefined // Last update timestamp } | undefined // Metabase card (saved question) object\n// }\n\n\n// Query Card example\nconst metabase_query_card = new MetabaseBubble({\n operation: \"query_card\", // Execute a card's query and return results\n card_id: 42, // The card ID to query\n pivot: true, // Use the pivot endpoint (/api/card/pivot/:id/query) for pivot-table results\n parameters: {}, // Optional query parameters (filters)\n});\n\nconst result = await metabase_query_card.action();\n// outputSchema for result.data when operation === 'query_card':\n// {\n// operation: \"query_card\",\n// success: boolean,\n// error: string,\n// data: { rows: unknown[][] // Result data rows, cols: { name: string // Column name, display_name: string | undefined // Display name for column, base_type: string | undefined // Base data type of column }[] // Column metadata, row_count: number | undefined // Total number of rows returned, status: string | undefined // Query execution status } | undefined // Flattened Metabase query result — rows and cols at top level\n// }\n\n\n// Always check success status before using data\nif (!result.success) {\n throw new Error(`metabase failed: ${result.error}`);\n}\n\n// Access the actual data\nconst actualData = result.data;\nconsole.log(actualData);",
|
|
89601
|
+
"requiredCredentials": [
|
|
89602
|
+
"METABASE_CRED"
|
|
89603
|
+
]
|
|
88932
89604
|
}
|
|
88933
89605
|
]
|
|
88934
89606
|
}
|