Skip to content

Commit 67f8a68

Browse files
authored
v0.5.100: multiple credentials, 40% speedup, gong, attio, audit log improvements
2 parents af59234 + 43c0f5b commit 67f8a68

File tree

401 files changed

+50265
-4218
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

401 files changed

+50265
-4218
lines changed

apps/docs/components/icons.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,17 @@ export function NotionIcon(props: SVGProps<SVGSVGElement>) {
710710
)
711711
}
712712

713+
export function GongIcon(props: SVGProps<SVGSVGElement>) {
714+
return (
715+
<svg {...props} viewBox='0 0 55.4 60' fill='none' xmlns='http://www.w3.org/2000/svg'>
716+
<path
717+
fill='currentColor'
718+
d='M54.1,25.7H37.8c-0.9,0-1.6,1-1.3,1.8l3.9,10.1c0.2,0.4-0.2,0.9-0.7,0.9l-5-0.3c-0.2,0-0.4,0.1-0.6,0.3L30.3,44c-0.2,0.3-0.6,0.4-1,0.2l-5.8-3.9c-0.2-0.2-0.5-0.2-0.8,0l-8,5.4c-0.5,0.4-1.2-0.1-1-0.7L16,37c0.1-0.3-0.1-0.7-0.4-0.8l-4.2-1.7c-0.4-0.2-0.6-0.7-0.3-1l3.7-4.6c0.2-0.2,0.2-0.6,0-0.8l-3.1-4.5c-0.3-0.4,0-1,0.5-1l4.9-0.4c0.4,0,0.6-0.3,0.6-0.7l-0.4-6.8c0-0.5,0.5-0.8,0.9-0.7l6,2.5c0.3,0.1,0.6,0,0.8-0.2l4.2-4.6c0.3-0.4,0.9-0.3,1.1,0.2l2.5,6.4c0.3,0.8,1.3,1.1,2,0.6l9.8-7.3c1.1-0.8,0.4-2.6-1-2.4L37.3,10c-0.3,0-0.6-0.1-0.7-0.4l-3.4-8.7c-0.4-0.9-1.5-1.1-2.2-0.4l-7.4,8c-0.2,0.2-0.5,0.3-0.8,0.2l-9.7-4.1c-0.9-0.4-1.8,0.2-1.9,1.2l-0.4,10c0,0.4-0.3,0.6-0.6,0.6l-8.9,0.6c-1,0.1-1.6,1.2-1,2.1l5.9,8.7c0.2,0.2,0.2,0.6,0,0.8l-6,6.9C-0.3,36,0,37.1,0.8,37.4l6.9,3c0.3,0.1,0.5,0.5,0.4,0.8L3.7,58.3c-0.3,1.2,1.1,2.1,2.1,1.4l16.5-11.8c0.2-0.2,0.5-0.2,0.8,0l7.5,5.3c0.6,0.4,1.5,0.3,1.9-0.4l4.7-7.2c0.1-0.2,0.4-0.3,0.6-0.3l11.2,1.4c0.9,0.1,1.8-0.6,1.5-1.5l-4.7-12.1c-0.1-0.3,0-0.7,0.4-0.9l8.5-4C55.9,27.6,55.5,25.7,54.1,25.7z'
719+
/>
720+
</svg>
721+
)
722+
}
723+
713724
export function GmailIcon(props: SVGProps<SVGSVGElement>) {
714725
return (
715726
<svg
@@ -3541,6 +3552,15 @@ export function TrelloIcon(props: SVGProps<SVGSVGElement>) {
35413552
)
35423553
}
35433554

3555+
export function AttioIcon(props: SVGProps<SVGSVGElement>) {
3556+
return (
3557+
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 60.9 50' fill='currentColor'>
3558+
<path d='M60.3,34.8l-5.1-8.1c0,0,0,0,0,0L54.7,26c-0.8-1.2-2.1-1.9-3.5-1.9L43,24L42.5,25l-9.8,15.7l-0.5,0.9l4.1,6.6c0.8,1.2,2.1,1.9,3.5,1.9h11.5c1.4,0,2.8-0.7,3.5-1.9l0.4-0.6c0,0,0,0,0,0l5.1-8.2C61.1,37.9,61.1,36.2,60.3,34.8L60.3,34.8z M58.7,38.3l-5.1,8.2c0,0,0,0.1-0.1,0.1c-0.2,0.2-0.4,0.2-0.5,0.2c-0.1,0-0.4,0-0.6-0.3l-5.1-8.2c-0.1-0.1-0.1-0.2-0.2-0.3c0-0.1-0.1-0.2-0.1-0.3c-0.1-0.4-0.1-0.8,0-1.3c0.1-0.2,0.1-0.4,0.3-0.6l5.1-8.1c0,0,0,0,0,0c0.1-0.2,0.3-0.3,0.4-0.3c0.1,0,0.1,0,0.1,0c0,0,0,0,0.1,0c0.1,0,0.4,0,0.6,0.3l5.1,8.1C59.2,36.6,59.2,37.5,58.7,38.3L58.7,38.3z' />
3559+
<path d='M45.2,15.1c0.8-1.3,0.8-3.1,0-4.4l-5.1-8.1l-0.4-0.7C38.9,0.7,37.6,0,36.2,0H24.7c-1.4,0-2.7,0.7-3.5,1.9L0.6,34.9C0.2,35.5,0,36.3,0,37c0,0.8,0.2,1.5,0.6,2.2l5.5,8.8C6.9,49.3,8.2,50,9.7,50h11.5c1.4,0,2.8-0.7,3.5-1.9l0.4-0.7c0,0,0,0,0,0c0,0,0,0,0,0l4.1-6.6l12.1-19.4L45.2,15.1L45.2,15.1z M44,13c0,0.4-0.1,0.8-0.4,1.2L23.5,46.4c-0.2,0.3-0.5,0.3-0.6,0.3c-0.1,0-0.4,0-0.6-0.3l-5.1-8.2c-0.5-0.7-0.5-1.7,0-2.4L37.4,3.6c0.2-0.3,0.5-0.3,0.6-0.3c0.1,0,0.4,0,0.6,0.3l5.1,8.1C43.9,12.1,44,12.5,44,13z' />
3560+
</svg>
3561+
)
3562+
}
3563+
35443564
export function AsanaIcon(props: SVGProps<SVGSVGElement>) {
35453565
return (
35463566
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none'>
@@ -5824,7 +5844,7 @@ export function HexIcon(props: SVGProps<SVGSVGElement>) {
58245844
return (
58255845
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1450.3 600'>
58265846
<path
5827-
fill='#5F509D'
5847+
fill='#EDB9B8'
58285848
fillRule='evenodd'
58295849
d='m250.11,0v199.49h-50V0H0v600h200.11v-300.69h50v300.69h200.18V0h-200.18Zm249.9,0v600h450.29v-250.23h-200.2v149h-50v-199.46h250.2V0h-450.29Zm200.09,199.49v-99.49h50v99.49h-50Zm550.02,0V0h200.18v150l-100,100.09,100,100.09v249.82h-200.18v-300.69h-50v300.69h-200.11v-249.82l100.11-100.09-100.11-100.09V0h200.11v199.49h50Z'
58305850
/>

apps/docs/components/ui/icon-mapping.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
ApolloIcon,
1414
ArxivIcon,
1515
AsanaIcon,
16+
AttioIcon,
1617
BrainIcon,
1718
BrowserUseIcon,
1819
CalComIcon,
@@ -40,6 +41,7 @@ import {
4041
GithubIcon,
4142
GitLabIcon,
4243
GmailIcon,
44+
GongIcon,
4345
GoogleBooksIcon,
4446
GoogleCalendarIcon,
4547
GoogleDocsIcon,
@@ -158,6 +160,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
158160
apollo: ApolloIcon,
159161
arxiv: ArxivIcon,
160162
asana: AsanaIcon,
163+
attio: AttioIcon,
161164
browser_use: BrowserUseIcon,
162165
calcom: CalComIcon,
163166
calendly: CalendlyIcon,
@@ -183,6 +186,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
183186
github_v2: GithubIcon,
184187
gitlab: GitLabIcon,
185188
gmail_v2: GmailIcon,
189+
gong: GongIcon,
186190
google_books: GoogleBooksIcon,
187191
google_calendar_v2: GoogleCalendarIcon,
188192
google_docs: GoogleDocsIcon,

apps/docs/content/docs/de/variables/environment-variables.mdx

Lines changed: 0 additions & 96 deletions
This file was deleted.

apps/docs/content/docs/en/blocks/api.mdx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,17 @@ const apiUrl = `https://api.example.com/users/${userId}/profile`;
9595

9696
### Request Retries
9797

98-
The API block automatically handles:
99-
- Network timeouts with exponential backoff
100-
- Rate limit responses (429 status codes)
101-
- Server errors (5xx status codes) with retry logic
102-
- Connection failures with reconnection attempts
98+
The API block supports **configurable retries** (see the block’s **Advanced** settings):
99+
100+
- **Retries**: Number of retry attempts (additional tries after the first request)
101+
- **Retry delay (ms)**: Initial delay before retrying (uses exponential backoff)
102+
- **Max retry delay (ms)**: Maximum delay between retries
103+
- **Retry non-idempotent methods**: Allow retries for **POST/PATCH** (may create duplicate requests)
104+
105+
Retries are attempted for:
106+
107+
- Network/connection failures and timeouts (with exponential backoff)
108+
- Rate limits (**429**) and server errors (**5xx**)
103109

104110
### Response Validation
105111

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
---
2+
title: Credentials
3+
description: Manage secrets, API keys, and OAuth connections for your workflows
4+
---
5+
6+
import { Callout } from 'fumadocs-ui/components/callout'
7+
import { Image } from '@/components/ui/image'
8+
import { Step, Steps } from 'fumadocs-ui/components/steps'
9+
10+
Credentials provide a secure way to manage API keys, tokens, and third-party service connections across your workflows. Instead of hardcoding sensitive values into your workflow, you store them as credentials and reference them at runtime.
11+
12+
Sim supports two categories of credentials: **secrets** for static values like API keys, and **OAuth accounts** for authenticated service connections like Google or Slack.
13+
14+
## Getting Started
15+
16+
To manage credentials, open your workspace **Settings** and navigate to the **Secrets** tab.
17+
18+
<Image
19+
src="/static/credentials/settings-secrets.png"
20+
alt="Settings modal showing the Secrets tab with a list of saved credentials"
21+
width={700}
22+
height={200}
23+
/>
24+
25+
From here you can search, create, and delete both secrets and OAuth connections.
26+
27+
## Secrets
28+
29+
Secrets are key-value pairs that store sensitive data like API keys, tokens, and passwords. Each secret has a **key** (used to reference it in workflows) and a **value** (the actual secret).
30+
31+
### Creating a Secret
32+
33+
<Image
34+
src="/static/credentials/create-secret.png"
35+
alt="Create Secret dialog with fields for key, value, description, and scope toggle"
36+
width={500}
37+
height={400}
38+
/>
39+
40+
<Steps>
41+
<Step>
42+
Click **+ Add** and select **Secret** as the type
43+
</Step>
44+
<Step>
45+
Enter a **Key** name (letters, numbers, and underscores only, e.g. `OPENAI_API_KEY`)
46+
</Step>
47+
<Step>
48+
Enter the **Value**
49+
</Step>
50+
<Step>
51+
Optionally add a **Description** to help your team understand what the secret is for
52+
</Step>
53+
<Step>
54+
Choose the **Scope** — Workspace or Personal
55+
</Step>
56+
<Step>
57+
Click **Create**
58+
</Step>
59+
</Steps>
60+
61+
### Using Secrets in Workflows
62+
63+
To reference a secret in any input field, type `{{` to open the dropdown. It will show your available secrets grouped by scope.
64+
65+
<Image
66+
src="/static/credentials/secret-dropdown.png"
67+
alt="Typing {{ in a code block opens a dropdown showing available workspace secrets"
68+
width={400}
69+
height={250}
70+
/>
71+
72+
Select the secret you want to use. The reference will appear highlighted in blue, indicating it will be resolved at runtime.
73+
74+
<Image
75+
src="/static/credentials/secret-resolved.png"
76+
alt="A resolved secret reference shown in blue text as {{OPENAI_API_KEY}}"
77+
width={400}
78+
height={200}
79+
/>
80+
81+
<Callout type="warn">
82+
Secret values are never exposed in the workflow editor or logs. They are only resolved during execution.
83+
</Callout>
84+
85+
### Bulk Import
86+
87+
You can import multiple secrets at once by pasting `.env`-style content:
88+
89+
1. Click **+ Add**, then switch to **Bulk** mode
90+
2. Paste your environment variables in `KEY=VALUE` format
91+
3. Choose the scope for all imported secrets
92+
4. Click **Create**
93+
94+
The parser supports standard `KEY=VALUE` pairs, quoted values, comments (`#`), and blank lines.
95+
96+
## OAuth Accounts
97+
98+
OAuth accounts are authenticated connections to third-party services like Google, Slack, GitHub, and more. Sim handles the OAuth flow, token storage, and automatic refresh.
99+
100+
You can connect **multiple accounts per provider** — for example, two separate Gmail accounts for different workflows.
101+
102+
### Connecting an OAuth Account
103+
104+
<Image
105+
src="/static/credentials/create-oauth.png"
106+
alt="Create Secret dialog with OAuth Account type selected, showing display name and provider dropdown"
107+
width={500}
108+
height={400}
109+
/>
110+
111+
<Steps>
112+
<Step>
113+
Click **+ Add** and select **OAuth Account** as the type
114+
</Step>
115+
<Step>
116+
Enter a **Display name** to identify this connection (e.g. "Work Gmail" or "Marketing Slack")
117+
</Step>
118+
<Step>
119+
Optionally add a **Description**
120+
</Step>
121+
<Step>
122+
Select the **Account** provider from the dropdown
123+
</Step>
124+
<Step>
125+
Click **Connect** and complete the authorization flow
126+
</Step>
127+
</Steps>
128+
129+
### Using OAuth Accounts in Workflows
130+
131+
Blocks that require authentication (e.g. Gmail, Slack, Google Sheets) display a credential selector dropdown. Select the OAuth account you want the block to use.
132+
133+
<Image
134+
src="/static/credentials/oauth-selector.png"
135+
alt="Gmail block showing the account selector dropdown with a connected account and option to connect another"
136+
width={500}
137+
height={350}
138+
/>
139+
140+
You can also connect additional accounts directly from the block by selecting **Connect another account** at the bottom of the dropdown.
141+
142+
<Callout type="info">
143+
If a block requires an OAuth connection and none is selected, the workflow will fail at that step.
144+
</Callout>
145+
146+
## Workspace vs. Personal
147+
148+
Credentials can be scoped to your **workspace** (shared with your team) or kept **personal** (private to you).
149+
150+
| | Workspace | Personal |
151+
|---|---|---|
152+
| **Visibility** | All workspace members | Only you |
153+
| **Use in workflows** | Any member can use | Only you can use |
154+
| **Best for** | Production workflows, shared services | Testing, personal API keys |
155+
| **Who can edit** | Workspace admins | Only you |
156+
| **Auto-shared** | Yes — all members get access on creation | No — only you have access |
157+
158+
<Callout type="info">
159+
When a workspace and personal secret share the same key name, the **workspace secret takes precedence**.
160+
</Callout>
161+
162+
### Resolution Order
163+
164+
When a workflow runs, Sim resolves secrets in this order:
165+
166+
1. **Workspace secrets** are checked first
167+
2. **Personal secrets** are used as a fallback — from the user who triggered the run (manual) or the workflow owner (automated runs via API, webhook, or schedule)
168+
169+
## Access Control
170+
171+
Each credential has role-based access control:
172+
173+
- **Admin** — can view, edit, delete, and manage who has access
174+
- **Member** — can use the credential in workflows (read-only)
175+
176+
When you create a workspace secret, all current workspace members are automatically granted access. Personal secrets are only accessible to you by default.
177+
178+
### Sharing a Credential
179+
180+
To share a credential with specific team members:
181+
182+
1. Click **Details** on the credential
183+
2. Invite members by email
184+
3. Assign them an **Admin** or **Member** role
185+
186+
## Best Practices
187+
188+
- **Use workspace credentials for production** so workflows work regardless of who triggers them
189+
- **Use personal credentials for development** to keep your test keys separate
190+
- **Name keys descriptively**`STRIPE_SECRET_KEY` over `KEY1`
191+
- **Connect multiple OAuth accounts** when you need different permissions or identities per workflow
192+
- **Never hardcode secrets** in workflow input fields — always use `{{KEY}}` references

apps/docs/content/docs/en/meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"skills",
1414
"knowledgebase",
1515
"variables",
16+
"credentials",
1617
"execution",
1718
"permissions",
1819
"sdks",

0 commit comments

Comments
 (0)