@microsoft/rayfin-guide 1.35.0-alpha.1286 → 1.35.0-alpha.1315

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.
@@ -0,0 +1,78 @@
1
+ ---
2
+ sidebar_position: 2
3
+ ---
4
+
5
+ # connector add
6
+
7
+ ```bash
8
+ npx rayfin connector add --type <type> --workspace-id <ws-id> --item-id <item-id> [--name <name>] [--operations <ops>]
9
+ ```
10
+
11
+ `connector add` declares a connector in `rayfin/rayfin.yml` and scaffolds its supporting files.
12
+
13
+ The CLI verifies the Fabric item, derives a connector `name` from the item's display name (override with `--name`), writes the entry to `rayfin.yml`, scaffolds `rayfin/connectors/<name>/schema.ts`, and runs schema discovery. `rayfin/connectors/<name>/metadata.json` is written so a subset of entities can be generated later.
14
+
15
+ If you do not already know the workspace and item IDs, run [`connector search`](./search.md) first — its `--json` output includes a ready-to-run `addCommand` for each result.
16
+
17
+ ## Options
18
+
19
+ | Flag | Required | Purpose |
20
+ | --------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
21
+ | `--type <type>` | yes | The connector type, for example `fabric-sqlanalytics`, `fabric-warehouse`, `fabric-sqldatabase`, `kusto`, or `fabric-semanticmodel`. |
22
+ | `--workspace-id <id>` | yes (Fabric) | Fabric workspace ID. Must be a literal — `${VAR}` placeholders are rejected. |
23
+ | `--item-id <id>` | yes (Fabric) | Fabric item or artifact ID. Must be a literal. |
24
+ | `--name <name>` | no | Connector name. Derived from the item display name when omitted. |
25
+ | `--operations <ops>` | no | Comma-separated subset of the type's allowed operations, for example `read,update`. Narrows the emitted `operations:` at add time. Omit for all allowed operations. Each value must be in the type's catalog allowlist. |
26
+ | `-y, --yes` | no | Auto-accept overwrite and confirmation prompts (non-interactive). |
27
+ | `-v, --verbose` | no | Verbose diagnostics. |
28
+
29
+ ## Scoping operations
30
+
31
+ Without `--operations`, `connector add` writes **every** operation the catalog allows for the type. Prefer scoping at add time over hand-editing YAML afterwards:
32
+
33
+ ```bash
34
+ npx rayfin connector add --type fabric-warehouse --workspace-id <ws> --item-id <item> --operations read,update
35
+ ```
36
+
37
+ The resulting `rayfin.yml` entry lists operations as objects, not bare strings:
38
+
39
+ ```yaml
40
+ connectors:
41
+ - name: inventory
42
+ type: fabric-warehouse
43
+ config:
44
+ workspaceId: ${WS_ID}
45
+ itemId: ${ITEM_ID}
46
+ auth:
47
+ type: delegated
48
+ operations:
49
+ - name: read
50
+ - name: update
51
+ ```
52
+
53
+ Rules:
54
+
55
+ - You can narrow below the catalog default; you cannot widen above it.
56
+ - There is no `all` meta-operation — list every action explicitly.
57
+ - The host validator rejects unknown or duplicate operation names at `rayfin up` time.
58
+
59
+ ## Category B connectors
60
+
61
+ For `kusto` and `fabric-semanticmodel`, `connector add` writes the `rayfin.yml` entry but there are no GraphQL entities to discover, so no entity files are generated and no row-level security applies:
62
+
63
+ - `executeQuery` is the only allowed operation.
64
+ - `auth.type` must be `delegated`.
65
+ - The connector is pinned to an adapter version.
66
+ - There is no `metadata.json` entity list to generate from.
67
+
68
+ After adding, exercise the connector with [`connector invoke`](./invoke.md) rather than writing entity code.
69
+
70
+ ## Related commands
71
+
72
+ ```bash
73
+ npx rayfin connector list [--verbose] [--json]
74
+
75
+ # Removes the rayfin.yml entry AND the rayfin/connectors/<name>/ directory.
76
+ # Re-add after remove to refresh metadata, then regenerate entity files yourself.
77
+ npx rayfin connector remove <name> [--yes]
78
+ ```
@@ -0,0 +1,58 @@
1
+ ---
2
+ sidebar_position: 6
3
+ ---
4
+
5
+ # Connectors
6
+
7
+ Connectors let a Rayfin app read from — and, for some types, write to — Microsoft Fabric data sources: warehouses, SQL databases, Lakehouse SQL analytics endpoints, semantic models, and KQL databases.
8
+
9
+ ## Prerequisite — the `connector` command group is feature-flagged
10
+
11
+ `rayfin connector ...` is only registered when the `RAYFIN_FEATURE_FLAGS` environment variable contains `connectors`. Without it the commands do not exist and the CLI reports an unknown command.
12
+
13
+ ```bash
14
+ RAYFIN_FEATURE_FLAGS=connectors npx rayfin connector search --help
15
+ ```
16
+
17
+ Each command has its own reference page:
18
+
19
+ - [`connector search`](./search.md) — discover Fabric sources the signed-in identity can add.
20
+ - [`connector add`](./add.md) — declare a connector in `rayfin.yml` and scaffold its files.
21
+ - [`connector inspect`](./inspect.md) — run a single read-only sample query against a source.
22
+ - [`connector invoke`](./invoke.md) — run one named operation against a configured connector.
23
+
24
+ A typical loop is search → add → inspect (Category A) or search → add → invoke (Category B).
25
+
26
+ ## Two categories of connector
27
+
28
+ The commands available to a connector, and the code you write against it, depend on its category.
29
+
30
+ | | Category A — GraphQL entity connectors | Category B — function-bridge connectors |
31
+ | ------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------ |
32
+ | **Types** | `fabric-sqlanalytics`, `fabric-warehouse`, `fabric-sqldatabase` | `kusto`, `fabric-semanticmodel` |
33
+ | **App surface** | Generated entity files with typed CRUD through the data client | A single `executeQuery` operation carrying a raw query |
34
+ | **Operations** | `read` only for `fabric-sqlanalytics` (Lakehouse SQL endpoints are read-only); `read`, `create`, `update`, `delete` for `fabric-warehouse` and `fabric-sqldatabase` (narrowable) | `executeQuery` only |
35
+ | **Auth** | `delegated` or configured per project | Must be `delegated` |
36
+ | **Entity files and `@role` policies** | Yes | No |
37
+ | **`metadata.json` entities** | Yes | No |
38
+ | **`connector inspect`** | Supported | `fabric-semanticmodel` only — `kusto` is not supported |
39
+ | **`connector invoke`** | Rarely needed | The main way to exercise the connector |
40
+
41
+ Category B connectors are pinned to an adapter version and expose no GraphQL entities, so there is nothing to generate and no row-level security to author.
42
+
43
+ ## Where connector state lives
44
+
45
+ - `rayfin/rayfin.yml` — the `connectors:` block: each connector's `name`, `type`, `config` (workspace and item IDs), `auth`, and `operations`.
46
+ - `rayfin/connectors/<name>/metadata.json` — discovered schema for Category A connectors; the source for generating entity files.
47
+ - `rayfin/connectors/<name>/schema.ts` — placeholder scaffold written by `connector add`.
48
+
49
+ `npx rayfin connector list` prints the configured connectors; `npx rayfin connector remove <name>` deletes both the `rayfin.yml` entry and the `rayfin/connectors/<name>/` directory.
50
+
51
+ ## Deploying connectors
52
+
53
+ ```bash
54
+ npx rayfin up # deploy connectors to the cloud
55
+ npx rayfin up connector apply [--name <name>] # re-apply DAB config only
56
+ ```
57
+
58
+ Most connector commands work before deployment. The exception is [`connector invoke`](./invoke.md) for every type except `fabric-semanticmodel`, which posts to the deployed item and therefore requires a prior `rayfin up`.
@@ -0,0 +1,78 @@
1
+ ---
2
+ sidebar_position: 3
3
+ ---
4
+
5
+ # connector inspect
6
+
7
+ ```bash
8
+ npx rayfin connector inspect (--name <name> | <direct-selector-flags>) (--entity <name> | --query <path>) [--rows <n>] [--verbose] [--json]
9
+ ```
10
+
11
+ `connector inspect` takes no positional arguments — every selector and query mode is a flag.
12
+
13
+ `connector inspect` runs a single read-only sample query against a connector's underlying source, before you have written any app code. Use it to check a table's real data and shape ahead of entity generation, or to debug a row-level-security or query issue on an already-wired connector. It is a development aid — never use it to power app functionality.
14
+
15
+ Supported types: the three Category A SQL types (`fabric-sqlanalytics`, `fabric-warehouse`, `fabric-sqldatabase`) and `fabric-semanticmodel` (DAX). `kusto` is **not** supported today — the command errors with `Unsupported connector type: kusto`.
16
+
17
+ ## Pick exactly one selector and one query mode
18
+
19
+ Two independent choices, each a mutually exclusive pair. Passing zero or both options in a pair fails validation before any network call.
20
+
21
+ | Choice | Option A | Option B |
22
+ | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
23
+ | **Selector** — which connector or item to query | `--name <name>` — a connector already declared in `rayfin.yml` | Direct mode — `--workspace-id`/`--workspace <name>` plus `--item-id`/`--item <name>` plus `--type <type>`, or `--url <portal-url>` for a semantic model (auto-extracts workspace and item IDs) |
24
+ | **Query mode** | `--entity <name>` — structured: builds `SELECT TOP (n) * FROM <entity>` (SQL) or `EVALUATE TOPN(n, '<entity>')` (DAX) for you | `--query <path>` — raw: runs the literal `.sql` or `.dax` file verbatim, still capped and validated |
25
+
26
+ All four combinations of `{--name, direct} × {--entity, --query}` are valid.
27
+
28
+ `--workspace` and `--item` accept display names and are resolved to IDs the same way [`connector add`](./add.md) fuzzy matching works; `--workspace-id` and `--item-id` take literal IDs directly.
29
+
30
+ ## Entity resolution
31
+
32
+ Applies to `--entity` mode only.
33
+
34
+ - **`--name` plus `--entity` with an unqualified name (no `.`)** — first checked against the connector's local `rayfin/connectors/<name>/metadata.json`, with no network call. Zero matches falls through to live resolution; exactly one match auto-qualifies to `schema.table`; more than one match fails immediately asking you to disambiguate with a schema-qualified name. It does **not** fall through to live resolution in the ambiguous case.
35
+ - **Any other combination** — direct mode, or `--query` mode — never consults `metadata.json`. For SQL types, an unqualified `--entity` is resolved live via `SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_NAME) = LOWER('<entity>')`: zero matches passes the name through unqualified, one match auto-qualifies, more than one match throws asking you to disambiguate with `--entity <schema>.<table>`.
36
+ - A schema-qualified `--entity <schema>.<table>` skips resolution entirely, in both cases.
37
+
38
+ ## Validation
39
+
40
+ Applies to both query modes.
41
+
42
+ - **SQL** — must start with `SELECT` or `WITH`; must be a single statement (a trailing `;` is fine, an embedded one is not); rejects `INSERT`, `UPDATE`, `DELETE`, `MERGE`, `CREATE`, `ALTER`, `DROP`, `TRUNCATE`, `EXEC`/`EXECUTE`, and `INTO` anywhere outside a string literal.
43
+ - **DAX** — must start with `EVALUATE`.
44
+ - `--query <path>` must resolve to a `.sql` or `.dax` file inside the project root; paths outside it are rejected. The project root is the directory containing `rayfin/rayfin.yml` when one is found. Direct mode (no `--name`) falls back to the current working directory if no `rayfin.yml` exists, so `--query` never requires a Rayfin project.
45
+ - `--rows <n>` caps the sample size — default 10, maximum 100. The result reports `truncated: true` when the source had more rows than the cap.
46
+
47
+ ## Examples
48
+
49
+ ```bash
50
+ # --name selector + structured entity mode
51
+ npx rayfin connector inspect --name inventory --entity Order
52
+
53
+ # --name selector + raw query file
54
+ npx rayfin connector inspect --name inventory --query rayfin/queries/order.sql
55
+
56
+ # Direct selector (literal IDs) + structured entity mode
57
+ npx rayfin connector inspect --workspace-id <ws-id> --item-id <item-id> --type fabric-warehouse --entity Order
58
+
59
+ # Direct selector (fuzzy display names) + raw query file
60
+ npx rayfin connector inspect --workspace "Sales Analytics" --item "Inventory Warehouse" --type fabric-warehouse --query rayfin/queries/order.sql
61
+
62
+ # Semantic model (DAX), resolved from a Fabric portal URL
63
+ npx rayfin connector inspect --url <fabric-portal-semantic-model-url> --query rayfin/queries/model.dax
64
+ ```
65
+
66
+ Combine `--workspace-id`, `--item-id`, and `--type` with either `--entity` or `--query` freely — none of the four combinations require `--name` or a `rayfin.yml` entry to exist.
67
+
68
+ ## Errors
69
+
70
+ SQL errors are categorized before being shown:
71
+
72
+ | Condition | Surfaced as |
73
+ | -------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
74
+ | SQL Server error `229`, `230`, `262`, `297`, `300` | "Permission denied", with a permissions recovery hint. |
75
+ | SQL Server error `18456`, `4060`, or `ELOGIN` | "Authentication failed", with a `rayfin login` recovery hint. |
76
+ | Anything else, including invalid object name / table not found | The underlying message, with a generic "verify the entity/table name and access" hint. |
77
+
78
+ Semantic model HTTP errors map `401` to re-login, `403` to permissions, and everything else to the generic hint.
@@ -0,0 +1,76 @@
1
+ ---
2
+ sidebar_position: 4
3
+ ---
4
+
5
+ # connector invoke
6
+
7
+ ```bash
8
+ npx rayfin connector invoke <connector-name> <operation> (--input '<json>' | --file <path>) [--verbose] [--json]
9
+ ```
10
+
11
+ `connector invoke` runs a single named operation against a configured connector and prints the result. It is the loop for exercising [Category B connectors](./index.md#two-categories-of-connector) — `executeQuery` over DAX or KQL — without writing any app code.
12
+
13
+ Both positionals also have flag forms, `--name <name>` and `--operation <operation>`, which win over the positionals when both are given.
14
+
15
+ Run it from inside a Rayfin project: it resolves `rayfin/rayfin.yml`, and fails with a recovery hint if there is no project root or the `connectors:` block is empty.
16
+
17
+ ## Payload input
18
+
19
+ Exactly one of these is required — passing both, or neither, fails:
20
+
21
+ - `--input '<json>'` — inline JSON payload for the operation input.
22
+ - `--file <path>` — path to a JSON file. The path is resolved against the project root, and **the resolved path must stay inside it**; a `../` escape is rejected before the file is read. An absolute path is accepted as long as it resolves inside the project root.
23
+
24
+ ## Operation resolution
25
+
26
+ The requested operation is matched **case-insensitively** against the connector's `operations:` list in `rayfin.yml`. If that entry has no `operations:`, the connector type's full catalog allowlist is used instead. A miss fails with the allowed set listed.
27
+
28
+ ## Transports
29
+
30
+ Two transports, chosen by connector type:
31
+
32
+ - **`fabric-semanticmodel`** — the CLI calls Fabric/Power BI **directly under the developer's own identity**, so this works whether or not `npx rayfin up` has been run. It requires `workspaceId` **and** `itemId` under the connector's `config:` block; without both, it fails up front rather than falling through to the deployed transport. The Power BI scope and audience are derived from the configured Fabric API base URL, so an INT ring mints an INT-audience token.
33
+ - **Every other type, including `kusto`** — POSTs to the deployed item at `<remote-endpoint>/__private/connectors/<name>/invoke`, so it requires a prior `npx rayfin up`.
34
+
35
+ ## Token handling (semantic model path)
36
+
37
+ `npx rayfin login` only consents to the Fabric scope, not the Power BI scope this path needs. Consequences:
38
+
39
+ - Interactively (no `--json`), the CLI prompts to complete Power BI consent.
40
+ - With `--json`, token acquisition is **silent-only** so prompts cannot corrupt the single-JSON-object contract. If consent is still needed the command fails and tells you to drop `--json` or set `RAYFIN_TOKEN`.
41
+ - `RAYFIN_TOKEN`, when set, is passed through **unchanged** regardless of the scopes requested. Its audience is decoded and checked locally, so a wrong-audience or undecodable token fails with a clear message instead of surfacing later as a phantom workspace-permission error.
42
+
43
+ ## Output
44
+
45
+ `--verbose` cannot be combined with `--json` — narration would break the single-object contract.
46
+
47
+ Success emits `{status: 'ok', connector, operation, output}`. In non-JSON modes it prints `✅ Invoked <name>.<operation>` followed by the output.
48
+
49
+ What `output` holds depends on the connector. `fabric-semanticmodel` normalises inside its `invoke` middleware, so `output` is already a discriminated result rather than the raw service envelope: `{status: 'success', table, requestId}`, where `table.columns` are `{name, dataType}` and `table.rows` are column-aligned arrays. No caller-side conversion is needed, and the same shape comes back whether the operation ran locally or through the deployed item.
50
+
51
+ A resolved call is **not** automatically a success, and the failure signal depends on the same distinction. A connector that normalises reports Power BI failures — expired token, missing Build permission, throttling — as `{status: 'error', error, requestId}`, where `error` carries `category`, `message`, and optional `code` and `details`. A connector that returns the raw envelope reports failure as `status: 'Failed'` instead. The CLI reads both, converts either into a non-zero exit, and surfaces the service-supplied request id for tracing.
52
+
53
+ ## Examples
54
+
55
+ ```bash
56
+ # Inline payload, positional args
57
+ npx rayfin connector invoke mymodel executeQuery --input '{"query":"EVALUATE TOPN(10, Sales)"}'
58
+
59
+ # Same thing with flag forms and a payload file
60
+ npx rayfin connector invoke --name mymodel --operation executeQuery --file ./payload.json
61
+
62
+ # Machine-readable (no --verbose allowed alongside)
63
+ npx rayfin connector invoke mymodel executeQuery --input '{"query":"EVALUATE TOPN(1, Sales)"}' --json
64
+ ```
65
+
66
+ ## Errors
67
+
68
+ | Message | Fix |
69
+ | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
70
+ | `Missing required connector invoke arguments` | Supply both the connector name and the operation. |
71
+ | `Choose exactly one payload source` / `Missing payload input` | Pass exactly one of `--input` or `--file`. |
72
+ | `Input file must be inside the project` | Use a relative path under the project root. |
73
+ | `Operation "<op>" is not allowed for connector "<name>"` | Check the connector's `operations:` in `rayfin.yml`, or the type's allowlist. |
74
+ | `missing workspaceId/itemId in rayfin.yml` | Add both under `config:`, or re-run [`connector add`](./add.md). |
75
+ | `Access token has the wrong audience for the Power BI query API` | Unset or replace `RAYFIN_TOKEN`, or re-run without `--json` to consent interactively. |
76
+ | `No remote endpoint configured` | The non-semantic-model transport needs a deployed item — run `npx rayfin up` first. |
@@ -0,0 +1,66 @@
1
+ ---
2
+ sidebar_position: 1
3
+ ---
4
+
5
+ # connector search
6
+
7
+ ```bash
8
+ npx rayfin connector search [query] [--workspace-id <id> --type <types> | --all-workspaces --type <types>] [--limit <n>] [--json]
9
+ ```
10
+
11
+ `connector search` finds Fabric data sources — warehouses, SQL databases, Lakehouses, semantic models, and KQL databases — that the signed-in identity can add as connectors, before you know exact workspace or item IDs.
12
+
13
+ Use it to find candidates for [`connector add`](./add.md). It never touches app data itself.
14
+
15
+ ## Scope resolution
16
+
17
+ The search scope is resolved in priority order:
18
+
19
+ 1. `--workspace-id <id>` — search exactly one workspace. **Requires** `--type`: without it, every discoverable item type would be fetched with a separate request to that workspace.
20
+ 2. `--all-workspaces` — tenant-wide scan across every workspace the identity can access. **Requires** `--type` (the only server-side filter) to keep the scan bounded.
21
+ 3. No scope flag, run inside a Rayfin project with deployments — defaults to the union of every workspace recorded in the project's deployments registry (dev, prod, and so on), without switching the active deployment. This is the only scope that does **not** require `--type`.
22
+
23
+ Only one of `--workspace-id` and `--all-workspaces` may be given. Outside a Rayfin project with zero deployments, one of them is required; omitting both fails with `workspace scope is required`.
24
+
25
+ ## Filtering
26
+
27
+ | Flag | Purpose |
28
+ | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
29
+ | `[query]` (positional) or `--query <text>` | Case-insensitive name filter. Omit to list every connectable source in scope. `--query` wins if both are given. |
30
+ | `--type <types>` | Comma-separated subset of connector types, for example `fabric-warehouse,fabric-sqldatabase`. Required with `--workspace-id` and with `--all-workspaces`. |
31
+ | `--limit <n>` | Caps the rows shown. Ignored in interactive mode, where the picker paginates the full result set instead; applies only to plain and `--json` output. |
32
+
33
+ ## Output modes
34
+
35
+ - **Interactive** (default on a TTY) — a paginated picker. Page size comes from `RAYFIN_CONNECTOR_SEARCH_PAGE_SIZE`, default 30. Picking a source runs a pre-flight access check (SQL endpoint, Kusto endpoint, or semantic model probe, depending on type) before handing off to [`connector add`](./add.md); a failed check re-shows the picker instead of aborting. `--yes` and `--verbose` are forwarded to the `connector add` it runs.
36
+ - **Plain** (non-TTY) — prints the list and exits, with no prompt.
37
+ - **`--json`** — a machine-readable envelope on stdout: `{status, query, scope, count, sources}`. Each row carries `workspaceId`, `itemId`, and `connectorType`, plus `suggestedName` (the sanitized display name to use as the connector name) and `addCommand` (the exact `rayfin connector add …` string to run). Skips both the picker and the access-check pre-flight.
38
+
39
+ Duplicate-looking entries — for example a SQL Database and its SQL-analytics-endpoint twin sharing a workspace and display name — are grouped visually next to each other in interactive and plain output only. They are never deduplicated, and `--json` always returns the canonical, ungrouped order.
40
+
41
+ The SQL-endpoint-permissions note ("Schema discovery for SQL-based connectors requires SQL endpoint permissions") only prints when at least one result is a SQL-dialect connector type — never for a semantic-model-only or Kusto-only result set.
42
+
43
+ ## Examples
44
+
45
+ ```bash
46
+ # Query text as a positional argument, scoped to one workspace (--type is required with --workspace-id)
47
+ npx rayfin connector search "sales" --workspace-id <ws-id> --type fabric-warehouse
48
+
49
+ # Tenant-wide scan, narrowed to one or more types (--type is required with --all-workspaces)
50
+ npx rayfin connector search --all-workspaces --type fabric-warehouse,fabric-sqldatabase
51
+
52
+ # No scope flag inside a deployed project — searches every deployment workspace, no --type needed
53
+ npx rayfin connector search
54
+
55
+ # Machine-readable output, capped to 5 rows, skips the interactive picker
56
+ npx rayfin connector search --workspace-id <ws-id> --type fabric-warehouse --json --limit 5
57
+ ```
58
+
59
+ ## Errors
60
+
61
+ | Message | Fix |
62
+ | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
63
+ | `Command incomplete: workspace scope is required` | No `--workspace-id` or `--all-workspaces` and no deployments found. Pass one of those flags. |
64
+ | `--type is required with --all-workspaces` | Add a `--type` filter to bound the tenant-wide scan. |
65
+ | `--type is required with --workspace-id` | Add a `--type` filter so a single request is made instead of one per discoverable item type. |
66
+ | `You don't have the required permission on <source>` | The pre-flight access check failed during the interactive add handoff. Pick a different source or request access. |
@@ -55,6 +55,20 @@ For the full walkthrough, see the [CLI Quickstart](./quickstart.md) or the [Buil
55
55
  | `npx rayfin up secrets apply` | Read secrets from `rayfin/.env` file (prefixed with `RAYFIN_SECRET_`) and securely apply them to the remote Rayfin item workload. Validates that secrets are persisted. Use `--env-file <path>` to specify a custom .env file location. |
56
56
  | `npx rayfin up staticapp deploy` | Build, package, and deploy static content to the remote Rayfin item. Add `--skip-build` to deploy existing build output without rebuilding. |
57
57
 
58
+ ### Connectors
59
+
60
+ Connectors let a Rayfin app read from existing Fabric sources. The `connector` command group is only registered when `RAYFIN_FEATURE_FLAGS` contains `connectors`. See [Connectors](./connectors/index.md) for the full guide.
61
+
62
+ | Command | Description |
63
+ | --- | --- |
64
+ | `npx rayfin connector search [query]` | Discover Fabric sources you can connect to. See [Searching for sources](./connectors/search.md). |
65
+ | `npx rayfin connector add` | Declare a connector in `rayfin.yml` and run schema discovery. See [Adding a connector](./connectors/add.md). |
66
+ | `npx rayfin connector list` | List the connectors declared in the current project. |
67
+ | `npx rayfin connector remove <name>` | Remove a connector's `rayfin.yml` entry and its `rayfin/connectors/<name>/` directory. |
68
+ | `npx rayfin connector inspect` | Run a read-only sample query against a connector's source. See [Inspecting a source](./connectors/inspect.md). |
69
+ | `npx rayfin connector invoke <name> <operation>` | Run one named operation against a configured connector. See [Invoking an operation](./connectors/invoke.md). |
70
+ | `npx rayfin up connector apply` | Re-apply connector configuration to the remote Rayfin item. |
71
+
58
72
  ## Update the CLI
59
73
 
60
74
  To get the latest version of the Rayfin CLI and its dependencies:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microsoft/rayfin-guide",
3
- "version": "1.35.0-alpha.1286",
3
+ "version": "1.35.0-alpha.1315",
4
4
  "description": "Cross-cutting Builder guides for the Rayfin platform — discovered by `@microsoft/rayfin-docs` via the `rayfinDocs` package.json field convention.",
5
5
  "type": "module",
6
6
  "files": [