Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,8 @@ Read `src/configs/{{provider}}/{{provider}}.connector.s1.yaml` and add a `$ref`

```yaml
actions:
$ref: {{provider}}.employees
$ref: {{provider}}.departments
- $ref: {{provider}}.employees.s1.partial.yaml
- $ref: {{provider}}.departments.s1.partial.yaml
```

---
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ If unavailable:

**If CLI available, first check if a pullable connector exists:**
```bash
npx @stackone/cli list | grep -iw {{provider}}
npx @stackone/cli list | grep -ix "{{provider}}"
```
Use `-w` for word-boundary matching to avoid substring matches (e.g., `bamboo` matching `bamboohr`). If found in the CLI list, pull it:
Use `-x` for full-line matching to avoid false positives from substring or hyphenated-name matches. If found in the CLI list, pull it:
```bash
npx @stackone/cli pull {{provider}}
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ For connectors that normalise data to a standard schema, use `/build-unified-con
| Step | Command | What it does |
|------|---------|-------------|
| 1 | `/setup-connector` | Provider name, index check, CLI pull or scaffold |
| 2 | `/configure-auth` | Set up authentication (API key, OAuth2, Basic Auth) |
| 2 | `/configure-auth` | Set up authentication (custom or OAuth2) |
| 3 | `/discover-actions` | Choose scoped actions or discover everything |
| 4 | `/build-config` | Generate YAML for all confirmed actions |
| 5 | `/validate-connector` | Validate the YAML config |
Expand Down Expand Up @@ -95,7 +95,7 @@ Execute `/test-connector` logic. Saves: `tested: true`, `test_artifacts`, `compl

## Rules

- Do not write YAML until Step 4 (`build-config`)
- Do not write action YAML until Step 4 (`build-config`) — auth config written in Step 2 is the exception
- Do not run tests until Step 5 (`validate-connector`) passes
- Always clean up test records — log anything that cannot be removed
- Always run `scramble_credentials` after testing
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,29 +73,7 @@ For each error from the CLI output or the manual checklist, identify the cause a

**`Missing required field: entrypointUrl`**

Cause: A non-custom action (e.g., `actionType: list`) is missing the `entrypointUrl` key. Note: this error does not apply to `actionType: custom` actions, which do not require `entrypointUrl`.

Fix — add the field to the non-custom action:
```yaml
- actionId: list_employees
categories:
- {{category}}
actionType: list
entrypointUrl: /employees # <-- add this
entrypointHttpMethod: get # <-- add this
label: List Employees
description: List all employees
steps:
- stepId: fetch_employees
description: Retrieve all employees
stepFunction:
functionName: request
parameters:
url: '/employees'
method: get
result:
data: $.steps.fetch_employees.output.data
```
Cause: This error applies to non-custom actions (`actionType: list`, `get`, etc.) that are missing the `entrypointUrl` key. This error should not occur in this plugin's workflow since all actions use `actionType: custom`, which does not require `entrypointUrl`. If you see this error, check that the action has `actionType: custom`.

---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
````markdown
# Field Mapping Guide

Detailed reference for writing `fieldConfigs` in unified connectors.
Expand Down Expand Up @@ -318,4 +317,3 @@ This shows exactly what the provider returns before any mapping. Use it to find
- Do NOT use `objectMapping` — it is not supported by the validator
- Use the inline block scalar `expression: |` pattern instead
- In `group_data` context, confirm the step ID prefix is correct
````
Original file line number Diff line number Diff line change
Expand Up @@ -728,7 +728,7 @@
| `remote_policy_id` | `string` | Provider's unique identifier of the time off policy id associated with this balance |
| `policy` | `TimeOffPolicies` | The time off policy associated with this balance |
| `current_balance` | `number` | The current numeric balance for the associated employee and time off policy |
| `initial_balance` | `number` | The initial numeric balance for the associated employee and time off policy as of the balance sta... |
| `initial_balance` | `number` | The initial numeric balance for the associated employee and time off policy as of the balance start date |
| `balance_unit` | `TimeOffBalanceUnitEnum` | The duration unit of the current balance |
| `balance_start_date` | `string` | The date of when the initial balance quantity was set |
| `balance_expiry_date` | `string` | The date of when the current balance expires |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@
| `last_active_at` | `string` | The date this user was last active |
| `last_login_at` | `string` | The date this user last logged in |
| `created_at` | `string` | The date the user was created |
| `updated_at` | `string` | The date the user was created |
| `updated_at` | `string` | The date the user was last updated |
| `multi_factor_enabled` | `array<IamMfaTypeEnum>` | The list of Multi-Factor Authentication (MFA) types enabled for the user. |
| `avatar` | `File` | The user's avatar data. This generally contains a URL within this property's 'contents' array. |

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,9 +169,12 @@ Once confirmed, save to `.connector-build-session.json`:
>
> These fields will be used as your `targetFieldKey` names in `/map-fields`. The next step is deciding which provider operations to build.
>
> - If you haven't set a provider yet: tell me which provider you're building for (ask directly — do not redirect to `/choose-schema`), then run `/check-connector`
> - If provider is already set but connector hasn't been pulled/scaffolded: run `/check-connector`
> - If provider + connector + actions are already set: run `/map-fields` directly"
> - If you haven't set a provider yet: tell me which provider you're building for"
>
> If the builder provides a provider name, **save it to session as `provider` immediately**, then run `/check-connector`.
> If provider is already set but connector hasn't been pulled/scaffolded: run `/check-connector`.
> If provider + connector + actions are already set: run `/map-fields` directly.

Update session:
- `session_step` → `"map-fields"` (if provider, connector, and action_scope are all set) or `"check-connector"` (if provider is set but connector not yet pulled/scaffolded) or `"choose-schema"` (if provider is not set — ask for provider name directly before redirecting)
- `provider` → the builder's answer (if just collected)
- `session_step` → `"map-fields"` (if provider, connector, and action_scope are all set) or `"check-connector"` (if provider is set but connector not yet pulled/scaffolded) or `"choose-schema"` (if provider is still not set after prompting)
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ npx @stackone/cli test {{provider}} unified_{{action}}_{{resource}}

**Field is null or missing in output:**
> "Field `{{field}}` is missing. Let's debug:
> 1. Run with `--debug` to see the raw provider response: `npx @stackone/cli test {{provider}} {{action}} --debug`
> 1. Run with `--debug` to see the raw provider response: `npx @stackone/cli test {{provider}} unified_{{action}}_{{resource}} --debug`
> 2. Find `{{field}}` in the raw response — what is the actual JSONPath?
> 3. Update the `expression` in `fieldConfigs` to match."

Expand Down
Loading