@bubblelab/bubble-core 0.1.288 → 0.1.291
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 +180 -160
- 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 +5 -0
- 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 +24 -24
- package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +32 -32
- 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 +1 -1
- package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +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/granola/granola.d.ts +446 -0
- package/dist/bubbles/service-bubble/granola/granola.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/granola/granola.js +187 -0
- package/dist/bubbles/service-bubble/granola/granola.js.map +1 -0
- package/dist/bubbles/service-bubble/granola/granola.schema.d.ts +766 -0
- package/dist/bubbles/service-bubble/granola/granola.schema.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/granola/granola.schema.js +196 -0
- package/dist/bubbles/service-bubble/granola/granola.schema.js.map +1 -0
- package/dist/bubbles/service-bubble/granola/index.d.ts +3 -0
- package/dist/bubbles/service-bubble/granola/index.d.ts.map +1 -0
- package/dist/bubbles/service-bubble/granola/index.js +3 -0
- package/dist/bubbles/service-bubble/granola/index.js.map +1 -0
- 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/metabase.d.ts +2 -2
- package/dist/bubbles/service-bubble/metabase/metabase.schema.d.ts +2 -2
- 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 +388 -388
- 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 +20 -20
- package/dist/bubbles/service-bubble/zendesk/zendesk.schema.d.ts +20 -20
- 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 +458 -2
- 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
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { CredentialType } from '@bubblelab/shared-schemas';
|
|
2
|
+
import { ServiceBubble } from '../../../types/service-bubble-class.js';
|
|
3
|
+
import { GranolaParamsSchema, GranolaResultSchema, } from './granola.schema.js';
|
|
4
|
+
const GRANOLA_API_BASE = 'https://public-api.granola.ai';
|
|
5
|
+
/**
|
|
6
|
+
* GranolaBubble - Integration with Granola meeting notes API
|
|
7
|
+
*
|
|
8
|
+
* Provides read-only operations for accessing Granola meeting notes:
|
|
9
|
+
* - List notes with pagination and date filtering
|
|
10
|
+
* - Get note details with optional transcript
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // List recent notes
|
|
15
|
+
* const result = await new GranolaBubble({
|
|
16
|
+
* operation: 'list_notes',
|
|
17
|
+
* page_size: 10,
|
|
18
|
+
* }).action();
|
|
19
|
+
*
|
|
20
|
+
* // Get a specific note with transcript
|
|
21
|
+
* const note = await new GranolaBubble({
|
|
22
|
+
* operation: 'get_note',
|
|
23
|
+
* note_id: 'not_1d3tmYTlCICgjy',
|
|
24
|
+
* include_transcript: true,
|
|
25
|
+
* }).action();
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export class GranolaBubble extends ServiceBubble {
|
|
29
|
+
static service = 'granola';
|
|
30
|
+
static authType = 'apikey';
|
|
31
|
+
static bubbleName = 'granola';
|
|
32
|
+
static type = 'service';
|
|
33
|
+
static schema = GranolaParamsSchema;
|
|
34
|
+
static resultSchema = GranolaResultSchema;
|
|
35
|
+
static shortDescription = 'Granola meeting notes and transcription integration';
|
|
36
|
+
static longDescription = `
|
|
37
|
+
Granola is an AI meeting notes tool that captures and summarizes meetings.
|
|
38
|
+
This bubble provides read-only access to:
|
|
39
|
+
- List meeting notes with filtering by creation/update dates
|
|
40
|
+
- Paginate through notes using cursor-based pagination
|
|
41
|
+
- Get full note details including summaries, attendees, and calendar events
|
|
42
|
+
- Optionally retrieve meeting transcripts
|
|
43
|
+
|
|
44
|
+
Authentication:
|
|
45
|
+
- Uses Bearer token (API key) from Granola Settings > API
|
|
46
|
+
- Requires Business or Enterprise plan for personal keys
|
|
47
|
+
- Enterprise keys access all Team space notes
|
|
48
|
+
|
|
49
|
+
Rate Limits:
|
|
50
|
+
- 25 request burst capacity
|
|
51
|
+
- 5 requests/second sustained rate
|
|
52
|
+
`;
|
|
53
|
+
static alias = 'granola-notes';
|
|
54
|
+
constructor(params = {
|
|
55
|
+
operation: 'list_notes',
|
|
56
|
+
page_size: 10,
|
|
57
|
+
}, context) {
|
|
58
|
+
super(params, context);
|
|
59
|
+
}
|
|
60
|
+
chooseCredential() {
|
|
61
|
+
const params = this.params;
|
|
62
|
+
const credentials = params.credentials;
|
|
63
|
+
if (!credentials || typeof credentials !== 'object') {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
return credentials[CredentialType.GRANOLA_API_KEY];
|
|
67
|
+
}
|
|
68
|
+
async testCredential() {
|
|
69
|
+
const apiKey = this.chooseCredential();
|
|
70
|
+
if (!apiKey) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
// Validate by listing notes with page_size=1
|
|
74
|
+
const response = await fetch(`${GRANOLA_API_BASE}/v1/notes?page_size=1`, {
|
|
75
|
+
method: 'GET',
|
|
76
|
+
headers: {
|
|
77
|
+
Authorization: `Bearer ${apiKey}`,
|
|
78
|
+
'Content-Type': 'application/json',
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
if (!response.ok) {
|
|
82
|
+
throw new Error(`Granola API key validation failed: ${response.status}`);
|
|
83
|
+
}
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
async performAction(context) {
|
|
87
|
+
void context;
|
|
88
|
+
const params = this.params;
|
|
89
|
+
const { operation } = params;
|
|
90
|
+
try {
|
|
91
|
+
switch (operation) {
|
|
92
|
+
case 'list_notes':
|
|
93
|
+
return (await this.listNotes(params));
|
|
94
|
+
case 'get_note':
|
|
95
|
+
return (await this.getNote(params));
|
|
96
|
+
default:
|
|
97
|
+
return {
|
|
98
|
+
operation: operation,
|
|
99
|
+
success: false,
|
|
100
|
+
error: `Unknown operation: ${operation}`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
return {
|
|
106
|
+
operation: operation,
|
|
107
|
+
success: false,
|
|
108
|
+
error: error instanceof Error ? error.message : String(error),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ============================================================================
|
|
113
|
+
// API Methods
|
|
114
|
+
// ============================================================================
|
|
115
|
+
async listNotes(params) {
|
|
116
|
+
const queryParams = new URLSearchParams();
|
|
117
|
+
if (params.created_before)
|
|
118
|
+
queryParams.set('created_before', params.created_before);
|
|
119
|
+
if (params.created_after)
|
|
120
|
+
queryParams.set('created_after', params.created_after);
|
|
121
|
+
if (params.updated_after)
|
|
122
|
+
queryParams.set('updated_after', params.updated_after);
|
|
123
|
+
if (params.cursor)
|
|
124
|
+
queryParams.set('cursor', params.cursor);
|
|
125
|
+
if (params.page_size)
|
|
126
|
+
queryParams.set('page_size', String(params.page_size));
|
|
127
|
+
const url = `${GRANOLA_API_BASE}/v1/notes${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
|
|
128
|
+
const response = await this.makeGranolaRequest(url);
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
const errorText = await response.text();
|
|
131
|
+
return {
|
|
132
|
+
operation: 'list_notes',
|
|
133
|
+
success: false,
|
|
134
|
+
error: `Granola API error (${response.status}): ${errorText}`,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const data = (await response.json());
|
|
138
|
+
return {
|
|
139
|
+
operation: 'list_notes',
|
|
140
|
+
success: true,
|
|
141
|
+
error: '',
|
|
142
|
+
notes: data.notes,
|
|
143
|
+
hasMore: data.hasMore,
|
|
144
|
+
cursor: data.cursor,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async getNote(params) {
|
|
148
|
+
const queryParams = new URLSearchParams();
|
|
149
|
+
if (params.include_transcript) {
|
|
150
|
+
queryParams.set('include', 'transcript');
|
|
151
|
+
}
|
|
152
|
+
const url = `${GRANOLA_API_BASE}/v1/notes/${params.note_id}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
|
|
153
|
+
const response = await this.makeGranolaRequest(url);
|
|
154
|
+
if (!response.ok) {
|
|
155
|
+
const errorText = await response.text();
|
|
156
|
+
return {
|
|
157
|
+
operation: 'get_note',
|
|
158
|
+
success: false,
|
|
159
|
+
error: `Granola API error (${response.status}): ${errorText}`,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const note = (await response.json());
|
|
163
|
+
return {
|
|
164
|
+
operation: 'get_note',
|
|
165
|
+
success: true,
|
|
166
|
+
error: '',
|
|
167
|
+
note,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
// ============================================================================
|
|
171
|
+
// Helpers
|
|
172
|
+
// ============================================================================
|
|
173
|
+
async makeGranolaRequest(url) {
|
|
174
|
+
const apiKey = this.chooseCredential();
|
|
175
|
+
if (!apiKey) {
|
|
176
|
+
throw new Error('No Granola API key provided');
|
|
177
|
+
}
|
|
178
|
+
return fetch(url, {
|
|
179
|
+
method: 'GET',
|
|
180
|
+
headers: {
|
|
181
|
+
Authorization: `Bearer ${apiKey}`,
|
|
182
|
+
'Content-Type': 'application/json',
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=granola.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"granola.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/granola/granola.ts"],"names":[],"mappings":"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"}
|