Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
728c636
feat(connectors): add AzureAD, AzureIoTCentral, and MicrosoftForms cl…
daviburg May 14, 2026
ccbe92b
feat(sdk): add 8 new connector clients in batch 5
daviburg May 14, 2026
cda5159
docs: add credential-based connection setup instructions to SKILL.md
daviburg May 14, 2026
04de1e6
fix: remove empty \ param from WordOnlineBusiness GetSourcesAsync; ma…
daviburg May 14, 2026
f9ced66
fix: address Copilot review comments on batch-5 connector generated code
daviburg May 14, 2026
cb2fbff
fix: address Copilot review comments — nullable optional params, Date…
daviburg May 14, 2026
9d0b3e8
fix: iteration 3 — rename DocumentDB constant to DocumentDb, test fil…
daviburg May 14, 2026
dfcbc70
fix: iteration 4 — factory param rename customProperties, remove requ…
daviburg May 14, 2026
e2ef9fb
fix: iteration 5 — remove graphql scratch files, typed QueueMessage l…
daviburg May 14, 2026
e45a784
fix: iteration 6 — rename AzureTablesModelFactory.Item() to EntityItem()
daviburg May 14, 2026
eb8c44f
fix: iteration 7 — purviewAccountName typo, Queue->QueueInfo rename, …
daviburg May 14, 2026
f44b971
fix: iteration 8 — QueueInfo_SerializationRoundTrip rename, correct R…
daviburg May 14, 2026
ac38757
fix: iteration 9 — OnMessagesV2/OnMessageThresholdReachedV2 constant …
daviburg May 14, 2026
7af0701
fix: iteration 10 — ServiceBusClient->ServiceBusConnectorClient renam…
daviburg May 14, 2026
6af2bb6
fix: iteration 12 — update constructor doc comments to PascalCase cli…
daviburg May 14, 2026
90f9116
fix: iteration 13 — OnMessagesV2/OnMessageThresholdReachedV2 doc comm…
daviburg May 14, 2026
60e347b
fix: iteration 14 — rename Eventhubs/Azurequeues trigger types to Pas…
daviburg May 14, 2026
aa972c2
fix: iteration 15 — update example comments in ManagedConnectors.cs t…
daviburg May 14, 2026
707f738
fix: iteration 16 — blank line in Event model, remove empty trigger-p…
daviburg May 14, 2026
7026e8a
fix: iteration 17 — remove extra blank line before Related Projects, …
daviburg May 14, 2026
11f0ba1
fix: iteration 18 — rename AddServiceBusClient to AddServiceBusConnec…
daviburg May 14, 2026
1e8ac84
fix: iteration 19 — GetQuestionsAsync return type, EnqueuedTimeUtc re…
daviburg May 14, 2026
a8c0792
fix: iteration 20 - rename ServiceBusClient to ServiceBusConnectorCli…
daviburg May 14, 2026
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
43 changes: 42 additions & 1 deletion .github/skills/connection-setup/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ Remove-Item $tempFile -ErrorAction SilentlyContinue

### Step 2: Create Connection

Supported SDK connector names: `arm`, `azureblob`, `azureeventgrid`, `azuremonitorlogs`, `campfire`, `clicksendsms`, `cloudmersiveconvert`, `docuware`, `elfsquaddata`, `etsy`, `excelonline`, `formstackforms`, `freshservice`, `impexium`, `infusionsoft`, `insightly`, `jedoxodatahub`, `kusto`, `meetingroommap`, `mq`, `msgraphgroupsanduser`, `office365`, `office365users`, `onedriveforbusiness`, `orderful`, `pdfco`, `pipedrive`, `plivo`, `plumsail`, `projectplace`, `replicon`, `revai`, `seismicplanner`, `sharepointonline`, `signinghub`, `smtp`, `starmind`, `starrezrestv1`, `tallyfy`, `teams`, `textrequest`, `ticketmaster`, `universalprint`, `waywedo`, `wdatp`, `yammer`, `azureautomation`, `azuredatafactory`, `azuredigitaltwins`, `azurevm`, `keyvault`, `microsoftbookings`, `office365groups`, `office365groupsmail`, `onenote`, `planner`, `powerbi`, `shifts`, `todo`, `zohosign` (and any `Microsoft.Web/connections` connector name).
Supported SDK connector names: `arm`, `azuread`, `azureblob`, `azureeventgrid`, `azureiotcentral`, `azuremonitorlogs`, `azurequeues`, `azuretables`, `campfire`, `clicksendsms`, `cloudmersiveconvert`, `documentdb`, `docuware`, `elfsquaddata`, `etsy`, `eventhubs`, `excelonline`, `excelonlinebusiness`, `formstackforms`, `freshservice`, `impexium`, `infusionsoft`, `insightly`, `jedoxodatahub`, `kusto`, `meetingroommap`, `microsoftforms`, `mq`, `msgraphgroupsanduser`, `office365`, `office365users`, `onedriveforbusiness`, `orderful`, `outlook`, `pdfco`, `pipedrive`, `plivo`, `plumsail`, `projectplace`, `replicon`, `revai`, `seismicplanner`, `servicebus`, `sharepointonline`, `signinghub`, `smtp`, `starmind`, `starrezrestv1`, `tallyfy`, `teams`, `textrequest`, `ticketmaster`, `universalprint`, `waywedo`, `wdatp`, `wordonlinebusiness`, `yammer`, `azureautomation`, `azuredatafactory`, `azuredigitaltwins`, `azurevm`, `keyvault`, `microsoftbookings`, `office365groups`, `office365groupsmail`, `onenote`, `planner`, `powerbi`, `shifts`, `todo`, `zohosign` (and any `Microsoft.Web/connections` connector name).

```powershell
$connectorName = "<connector-name>" # e.g., "arm", "azureblob", "azuremonitorlogs", "kusto", "mq", "msgraphgroupsanduser", "office365", "office365users", "onedriveforbusiness", "sharepointonline", "smtp", "teams"
Expand All @@ -83,6 +83,8 @@ Remove-Item $tempFile -ErrorAction SilentlyContinue

The connection starts in **Error** state (unauthenticated). Proceed to Step 3.

For **credential-based (non-OAuth) connectors** (e.g., `azurequeues`, `azuretables`, `smtp`, `eventhubs`, `servicebus`, `documentdb`), include `parameterValues` directly in the PUT body instead of using OAuth consent (Step 3). See [Step 3b: Credential-Based Authentication](#step-3b-credential-based-authentication).

### Step 3: OAuth Consent (In-Browser)

Retrieve the consent link and open it in the default browser — no portal needed:
Expand Down Expand Up @@ -110,6 +112,45 @@ az rest --method GET `

Expected: `Connected`.

### Step 3b: Credential-Based Authentication

For connectors that use connection strings or API keys (not OAuth), include `parameterValues` directly in the PUT body. The connection becomes `Connected` immediately without browser consent.

> **Critical:** Always use `[System.IO.File]::WriteAllText($tempFile, $connBody, [System.Text.Encoding]::UTF8)` and `Content-Type=application/json;charset=utf-8` header. Missing the `charset=utf-8` header causes credentials with `+`, `=`, or `/` characters (common in base64 keys) to not be stored, leaving the connection in `Error` state.

```powershell
# Example: Azure Storage (azurequeues / azuretables)
$connObj = @{
properties = @{
connectorName = "azurequeues"
parameterValues = @{
storageaccount = "<storage-account-name>"
sharedkey = "<storage-account-key>"
}
}
}
$connBody = $connObj | ConvertTo-Json -Depth 5 -Compress
$tempFile = Join-Path $env:TEMP "conn-body.json"
[System.IO.File]::WriteAllText($tempFile, $connBody, [System.Text.Encoding]::UTF8)
az rest --method PUT `
--uri "https://management.azure.com${nsId}/connections/${connectionName}?api-version=2026-05-01-preview" `
--body "@$tempFile" --headers "Content-Type=application/json;charset=utf-8" -o json | ConvertFrom-Json | Select-Object name, @{n='status';e={$_.properties.overallStatus}}
Remove-Item $tempFile -ErrorAction SilentlyContinue
# Expected: status = Connected
```

**Parameter names by connector:**

| Connector | Parameters |
|-----------|-----------|
| `azurequeues`, `azuretables` | `storageaccount` (name), `sharedkey` (access key) |
| `eventhubs`, `servicebus` | `connectionString` (namespace connection string) |
| `documentdb` | `databaseAccount` (account name), `accessKey` (primary key) |
| `smtp` | `serverAddress`, `port`, `enableSSL`, `userName`, `password` |
| `mq` | see managed API definition for parameter names |

**If the connection shows Error after PUT:** The credentials may not have been stored. Delete the connection and recreate it — do NOT retry PUT on an existing connection. The first PUT after DELETE reliably stores `parameterValues`.

### Step 4: Get Connection Runtime URL

```powershell
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,7 @@ publish/
Thumbs.db

# Local generator output (staging area — canonical location is src/.../Generated/)
# GraphQL scratch files (used for GitHub API calls, not part of the SDK)
*.graphql
samples/generated/*.cs
_generated/
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **15 more connector clients (batch 2)** — `CampfireClient`, `ClickSendSmsClient`, `CloudmersiveConvertClient`, `EtsyClient`, `FormstackFormsClient`, `FreshServiceClient`, `InfusionsoftClient`, `InsightlyClient`, `PipedriveClient`, `PlivoClient`, `PlumsailClient`, `RepliconClient`, `RevaiClient`, `SigningHubClient`, `ZohoSignClient` (#7)
- **15 more connector clients (batch 3)** — `DocuwareClient`, `ElfsquadDataClient`, `ImpexiumClient`, `JedoxOdataHubClient`, `MeetingRoomMapClient`, `OrderfulClient`, `PdfCoClient`, `ProjectplaceClient`, `SeismicPlannerClient`, `StarmindClient`, `StarrezRestV1Client`, `TallyfyClient`, `TextRequestClient`, `TicketmasterClient`, `WaywedoClient` (#7)
- **13 Microsoft 1st-party connector clients (batch 4)** — `AzureAutomationClient`, `AzureDataFactoryClient`, `AzureDigitalTwinsClient`, `AzureVMClient`, `KeyVaultClient`, `MicrosoftBookingsClient`, `Office365GroupsClient`, `Office365GroupsMailClient`, `OnenoteClient`, `PlannerClient`, `PowerBIClient`, `ShiftsClient`, `TodoClient` (#7)
- **11 connector clients (batch 5)** — `AzureADClient`, `AzureIoTCentralClient`, `MicrosoftFormsClient` regenerated with generator bug fixes; plus 8 new clients: `AzureQueuesClient`, `AzureTablesClient`, `DocumentDbClient`, `EventHubsClient`, `ExcelOnlineBusinessClient`, `OutlookClient`, `ServiceBusConnectorClient`, `WordOnlineBusinessClient`; also fixes generator bugs #135, #136, #137, #138, #139 (IPageable property name derived from x-ms-summary; array-typed `$ref` definitions resolved to `` `List<T>` `` instead of undefined class name)

### Changed

Expand Down
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,8 @@ Authentication uses Azure.Core `TokenCredential` directly — any credential fro

| Connector | Status | Validated Operations |
|-----------|--------|----------------------|
| Azure AD | 🔄 SDK Generated | GetUser, CreateUser, GetGroup, GetGroupMembers, CreateGroup, UpdateUser, CheckMemberGroups |
| Azure IoT Central | 🔄 SDK Generated | ApplicationsList, DeviceGroupsList, DeviceGroupsGet, DeviceGroupsSet, DevicesGetCloudProperties (pageable) |
| Azure Monitor Logs | 🔄 SDK Generated | QueryData, QueryDataV2, VisualizeQuery, VisualizeQueryV2 |
| IBM MQ | 🔄 SDK Generated | SendAsync, ReadAsync, ReadAllAsync, ReceiveAsync, ReceiveAllAsync, DeleteAsync, DeleteAllAsync |
| Office365 | ✅ Validated | SendEmail, GetOutlookCategoryNames, ExportEmail, CalendarPostItem |
Expand All @@ -185,6 +187,7 @@ Authentication uses Azure.Core `TokenCredential` directly — any credential fro
| ClickSend SMS | 🔄 SDK Generated | SmsSend, CreateList, GetContactLists (trigger: OnSmsInboundAutomation) |
| Cloudmersive Convert | 🔄 SDK Generated | ConvertDocumentAutodetectGetInfo, ConvertDocumentAutodetectToPdf |
| Etsy | 🔄 SDK Generated | Ping, PaymentLedgerEntries, PaymentGetEntryID |
| Excel Online (Business) | 🔄 SDK Generated | CreateTableAsync |
| Formstack Forms | 🔄 SDK Generated | GetAvailableForms (trigger: OnFormstackFormSubmitted) |
| FreshService | 🔄 SDK Generated | AddNote, CreateTicket, UpdateTicket (trigger: OnTicketCreated) |
| Infusionsoft (Keap) | 🔄 SDK Generated | CreateTask, UpdateTask, ListTasks (trigger: OnNewTask) |
Expand All @@ -202,21 +205,29 @@ Authentication uses Azure.Core `TokenCredential` directly — any credential fro
| Jedox OData Hub | 🔄 SDK Generated | Databases, GetCubes |
| Meeting Room Map | 🔄 SDK Generated | GetCategories, GetCustomLocations |
| Orderful | 🔄 SDK Generated | ListTransactions |
| Outlook | 🔄 SDK Generated | GetEmailAsync, SendEmailAsync, DeleteEmailAsync, CalendarGetItemsAsync, ContactGetItemsAsync |
| PDF.co | 🔄 SDK Generated | HtmlToPdf, UrlToPdf, PdfFiller |
| Projectplace | 🔄 SDK Generated | ListBoards, CreateCard |
| Seismic Planner | 🔄 SDK Generated | GetComments, CreateComment |
| Service Bus | 🔄 SDK Generated | GetQueuesAsync, GetTopicsAsync |
| Starmind | 🔄 SDK Generated | FindExperts, FindQuestions |
| StarRez REST V1 | 🔄 SDK Generated | SelectEntry, CreateEntry, UpdateEntry |
| Tallyfy | 🔄 SDK Generated | GetUserOrganizations, EditTaskDeadline |
| TextRequest | 🔄 SDK Generated | GetMessagesByContactPhone, SendMessageByPhoneNumber |
| Ticketmaster | 🔄 SDK Generated | EventsGet, EventsGetDetails |
| Way We Do | 🔄 SDK Generated | GetAllChecklistInstances, CommentAdd |
| Word Online (Business) | 🔄 SDK Generated | GetFileSchemaAsync, CreateFileItemAsync, GetSourcesAsync |
| Azure Automation | 🔄 SDK Generated | CreateJob, GetStatusOfJob, GetJobOutput |
| Azure Cosmos DB | 🔄 SDK Generated | GetCosmosDbAccountsAsync, CreateDocumentAsync |
| Azure Data Factory | 🔄 SDK Generated | CreatePipelineRun, GetPipelineRun, CancelPipelineRun |
| Azure Digital Twins | 🔄 SDK Generated | AddTwin, GetTwinById, QueryTwins |
| Azure Event Hubs | 🔄 SDK Generated | GetEventHubsAsync, SendEventAsync, SendEventsAsync |
| Azure Queues | 🔄 SDK Generated | GetMessagesAsync, PutMessageAsync, DeleteMessageAsync, ListQueuesAsync, PutQueueAsync |
| Azure Tables | 🔄 SDK Generated | GetTableAsync, GetEntitiesAsync, CreateEntityAsync, MergeEntityAsync, DeleteEntityAsync |
| Azure VM | 🔄 SDK Generated | VirtualMachineGet, VirtualMachineStart, VirtualMachineDeallocate |
| Key Vault | 🔄 SDK Generated | GetSecret, ListSecrets, EncryptData |
| Microsoft Bookings | 🔄 SDK Generated | ListBookingsBusinessUserAsAdmin |
| Microsoft Forms | 🔄 SDK Generated | ListForms, GetFormDetailsById, GetFormResponseById, GetQuestions |
| Office 365 Groups | 🔄 SDK Generated | ListGroups, AddMemberToGroup, CreateCalendarEvent |
| Office 365 Groups Mail | 🔄 SDK Generated | ListConversations, CreateConversation, ReplyToAThread |
| OneNote | 🔄 SDK Generated | GetNotebooks, CreatePageInSection, GetPageContent |
Expand Down
Loading
Loading