Skip to content

Commit a29b5d3

Browse files
feat(olostep): add Olostep service bubble for web scraping and AI content extraction
- Add OlostepBubble with 5 operations: scrape, batch, crawl, map, answer - Add OLOSTEP_API_KEY credential type and configuration - Add 'olostep' to BubbleName type - Register bubble in BubbleFactory - Export from bubble-core index - Add comprehensive unit tests - Add credential UI configuration in bubble-studio
1 parent f356929 commit a29b5d3

8 files changed

Lines changed: 966 additions & 1 deletion

File tree

apps/bubble-studio/src/pages/CredentialsPage.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,13 @@ const CREDENTIAL_TYPE_CONFIG: Record<CredentialType, CredentialConfig> = {
249249
namePlaceholder: 'My InsForge API Key',
250250
credentialConfigurations: {},
251251
},
252+
[CredentialType.OLOSTEP_API_KEY]: {
253+
label: 'Olostep',
254+
description: 'API key for Olostep web scraping and AI content extraction',
255+
placeholder: 'ols_...',
256+
namePlaceholder: 'My Olostep API Key',
257+
credentialConfigurations: {},
258+
},
252259
} as const satisfies Record<CredentialType, CredentialConfig>;
253260

254261
// Helper to extract error message from API error
@@ -299,6 +306,7 @@ const getServiceNameForCredentialType = (
299306
[CredentialType.NOTION_OAUTH_TOKEN]: 'Notion',
300307
[CredentialType.INSFORGE_BASE_URL]: 'InsForge',
301308
[CredentialType.INSFORGE_API_KEY]: 'InsForge',
309+
[CredentialType.OLOSTEP_API_KEY]: 'Olostep',
302310
};
303311

304312
return typeToServiceMap[credentialType] || credentialType;

packages/bubble-core/src/bubble-factory.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ export class BubbleFactory {
156156
'notion',
157157
'firecrawl',
158158
'insforge-db',
159+
'olostep',
159160
];
160161
}
161162

@@ -282,6 +283,9 @@ export class BubbleFactory {
282283
const { InsForgeDbBubble } = await import(
283284
'./bubbles/service-bubble/insforge-db.js'
284285
);
286+
const { OlostepBubble } = await import(
287+
'./bubbles/service-bubble/olostep.js'
288+
);
285289

286290
// Create the default factory instance
287291
this.register('hello-world', HelloWorldBubble as BubbleClassWithMetadata);
@@ -385,6 +389,7 @@ export class BubbleFactory {
385389
this.register('airtable', AirtableBubble as BubbleClassWithMetadata);
386390
this.register('firecrawl', FirecrawlBubble as BubbleClassWithMetadata);
387391
this.register('insforge-db', InsForgeDbBubble as BubbleClassWithMetadata);
392+
this.register('olostep', OlostepBubble as BubbleClassWithMetadata);
388393

389394
// After all default bubbles are registered, auto-populate bubbleDependencies
390395
if (!BubbleFactory.dependenciesPopulated) {

0 commit comments

Comments
 (0)