Skip to content

Commit e69c95c

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 bef5d69 commit e69c95c

8 files changed

Lines changed: 967 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
@@ -226,6 +226,13 @@ const CREDENTIAL_TYPE_CONFIG: Record<CredentialType, CredentialConfig> = {
226226
namePlaceholder: 'My Airtable Token',
227227
credentialConfigurations: {},
228228
},
229+
[CredentialType.OLOSTEP_API_KEY]: {
230+
label: 'Olostep',
231+
description: 'API key for Olostep web scraping and AI content extraction',
232+
placeholder: 'ols_...',
233+
namePlaceholder: 'My Olostep API Key',
234+
credentialConfigurations: {},
235+
},
229236
} as const satisfies Record<CredentialType, CredentialConfig>;
230237

231238
// Helper to extract error message from API error
@@ -273,6 +280,7 @@ const getServiceNameForCredentialType = (
273280
[CredentialType.GITHUB_TOKEN]: 'GitHub',
274281
[CredentialType.ELEVENLABS_API_KEY]: 'ElevenLabs',
275282
[CredentialType.AIRTABLE_CRED]: 'Airtable',
283+
[CredentialType.OLOSTEP_API_KEY]: 'Olostep',
276284
};
277285

278286
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
@@ -153,6 +153,7 @@ export class BubbleFactory {
153153
'followupboss',
154154
'agi-inc',
155155
'airtable',
156+
'olostep',
156157
];
157158
}
158159

@@ -270,6 +271,9 @@ export class BubbleFactory {
270271
const { AirtableBubble } = await import(
271272
'./bubbles/service-bubble/airtable.js'
272273
);
274+
const { OlostepBubble } = await import(
275+
'./bubbles/service-bubble/olostep.js'
276+
);
273277

274278
// Create the default factory instance
275279
this.register('hello-world', HelloWorldBubble as BubbleClassWithMetadata);
@@ -370,6 +374,7 @@ export class BubbleFactory {
370374
this.register('eleven-labs', ElevenLabsBubble as BubbleClassWithMetadata);
371375
this.register('agi-inc', AGIIncBubble as BubbleClassWithMetadata);
372376
this.register('airtable', AirtableBubble as BubbleClassWithMetadata);
377+
this.register('olostep', OlostepBubble as BubbleClassWithMetadata);
373378

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

0 commit comments

Comments
 (0)