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
2 changes: 1 addition & 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`, `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).
Supported SDK connector names: `arm`, `azuread`, `azureblob`, `azureeventgrid`, `azureiotcentral`, `azuremonitorlogs`, `azurequeues`, `azuretables`, `box`, `campfire`, `clicksendsms`, `cloudmersiveconvert`, `docusign`, `documentdb`, `docuware`, `dropbox`, `dynamicsax`, `elfsquaddata`, `etsy`, `eventbrite`, `eventhubs`, `excelonline`, `excelonlinebusiness`, `formstackforms`, `freshservice`, `ftp`, `github`, `googlecalendar`, `googledrive`, `googletasks`, `impexium`, `infusionsoft`, `insightly`, `jedoxodatahub`, `jira`, `kusto`, `mailchimp`, `meetingroommap`, `microsoftforms`, `monday`, `mq`, `msgraphgroupsanduser`, `office365`, `office365users`, `onedrive`, `onedriveforbusiness`, `orderful`, `outlook`, `pdfco`, `pipedrive`, `plivo`, `plumsail`, `projectplace`, `replicon`, `revai`, `rss`, `salesforce`, `seismicplanner`, `sendgrid`, `servicebus`, `sharepointonline`, `signinghub`, `slack`, `smtp`, `sql`, `starmind`, `starrezrestv1`, `tallyfy`, `teams`, `textrequest`, `ticketmaster`, `trello`, `twitter`, `typeform`, `universalprint`, `waywedo`, `wdatp`, `webex`, `wordpress`, `wordonlinebusiness`, `yammer`, `zendesk`, `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 Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **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)
- **25 new connector clients (batch 6)** — `BoxClient`, `DocusignClient`, `DropboxClient`, `DynamicsaxClient`, `EventbriteClient`, `FtpClient`, `GithubClient`, `GooglecalendarClient`, `GoogledriveClient`, `GoogletasksClient`, `JiraClient`, `MailchimpClient`, `MondayClient`, `OnedriveClient` (personal OneDrive), `RssClient`, `SalesforceClient`, `SendgridClient`, `SlackClient`, `SqlClient`, `TrelloClient`, `TwitterClient`, `TypeformClient`, `WebexClient`, `WordpressClient`, `ZendeskClient`

### Changed

- **Regenerated all 12 connector clients** from updated CodefulSdkGenerator with PascalCase name overrides and constructor additions
- **Regenerated 15 existing connector clients** with latest generator bug fixes — `AzureMonitorLogsClient`, `AzureTablesClient`, `DocumentDbClient`, `ExcelOnlineBusinessClient`, `ExcelOnlineClient`, `InfusionsoftClient`, `Office365Client`, `Office365GroupsClient`, `Office365UsersClient`, `OneDriveForBusinessClient`, `PipedriveClient`, `PlumsailClient`, `SmtpClient`, `WdatpClient`, `YammerClient`

## [0.9.0-preview.1] - 2026-05-08

Expand Down
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,31 @@ Authentication uses Azure.Core `TokenCredential` directly — any credential fro
| Power BI | 🔄 SDK Generated | ExecuteDatasetQuery, AddRows, RefreshDataset |
| Shifts | 🔄 SDK Generated | ListShifts, ListOpenShifts, GetSchedule |
| To Do | 🔄 SDK Generated | GetAllTodoLists, CreateToDo, GetToDo |
| Box | 🔄 SDK Generated | GetFileMetadata, CreateFile, CopyFile, ExtractFolder |
| DocuSign | 🔄 SDK Generated | CreateEnvelopeFromTemplate, SendEnvelope, GetRecipientStatus, ListEnvelopes |
| Dropbox | 🔄 SDK Generated | GetFileMetadata, CreateFile, CopyFile, ExtractFolder |
| Dynamics AX | 🔄 SDK Generated | GetTable, GetItems, PostItem, ExecuteProcedure |
| Eventbrite | 🔄 SDK Generated | GetCategories, GetOrganizations, GetOrganizationEvents, CreateEvent |
| FTP | 🔄 SDK Generated | CreateFile, GetFileMetadata, UpdateFile, DeleteFile |
| GitHub | 🔄 SDK Generated | CreateIssue, GetIssues, CreatePullRequest, MergePullRequest |
| Google Calendar | 🔄 SDK Generated | ListCalendars, ListEvents, CreateEvent, UpdateEvent |
| Google Drive | 🔄 SDK Generated | GetFileMetadata, CreateFile, ListFolder, ListRootFolder |
| Google Tasks | 🔄 SDK Generated | ListTaskLists, CreateTaskList, ListTasks |
| Jira | 🔄 SDK Generated | ListIssues, CreateIssue, EditIssue, ListProjects |
| Mailchimp | 🔄 SDK Generated | GetCampaigns, GetLists, AddMembers, Sendcampaign |
| Monday.com | 🔄 SDK Generated | GetBoards, CreateItem, GetItems, CreateBoard |
| OneDrive (Personal) | 🔄 SDK Generated | GetFileMetadata, CreateFile, ListRootFolder, FindFiles, CreateShareLink |
| RSS | 🔄 SDK Generated | ListFeedItems |
| Salesforce | 🔄 SDK Generated | GetItems, PostItem, PatchItem, ExecuteSoqlQuery |
| SendGrid | 🔄 SDK Generated | SendEmail, ListRecipientLists, AddGlobalSuppression |
| Slack | 🔄 SDK Generated | PostMessage, CreateChannel, JoinChannel |
| SQL Server | 🔄 SDK Generated | GetItems, PostItem, PatchItem, ExecuteProcedure, GetDatabases |
| Trello | 🔄 SDK Generated | ListCards, CreateCard, ListBoards, ListLists |
| Twitter | 🔄 SDK Generated | UserTimeline, HomeTimeline, SearchTweet, Tweet |
| Typeform | 🔄 SDK Generated | ListForms |
| Webex | 🔄 SDK Generated | SendMessage, GetMessages, GetSpaces, CreateSpace |
| WordPress | 🔄 SDK Generated | SiteStats, Get, Create, ListSites |
| Zendesk | 🔄 SDK Generated | PostItem, DeleteItem, PatchItem, SearchArticles |

## Related Projects

Expand Down
67 changes: 18 additions & 49 deletions src/Azure.Connectors.Sdk/Generated/AzureMonitorLogsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ public class Table
/// Item in value
/// </summary>
[DynamicSchema("QuerySchemaV2")]
public class RowV2
public class Row
{
/// <summary>
/// Dynamic properties determined at runtime by the connector's schema discovery endpoint.
Expand Down Expand Up @@ -210,20 +210,6 @@ public class VisualizeResults
public string AttachmentName { get; set; }
}

/// <summary>
/// RowV2
/// </summary>
[DynamicSchema("QuerySchemaV2")]
public class Row
{
/// <summary>
/// Dynamic properties determined at runtime by the connector's schema discovery endpoint.
/// Populate this dictionary with the properties returned by the schema API.
/// </summary>
[JsonExtensionData]
public Dictionary<string, JsonElement> AdditionalProperties { get; set; } = new();
}

#endregion Types

#region Model Factory
Expand Down Expand Up @@ -466,8 +452,7 @@ public virtual AsyncPageable<Subscription> ListSubscriptionsAsync(CancellationTo
public virtual AsyncPageable<ResourceGroup> ListResourceGroupsAsync([DynamicValues("ListSubscriptions")] string subscription, CancellationToken cancellationToken = default)
{
var queryParams = new List<string>();
if (subscription != default)
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
var path = $"/listResourceGroups" + (queryParams.Count > 0 ? "?" + string.Join("&", queryParams) : "");
return this.CreatePageable<ResourceGroupListResult, ResourceGroup>(
ct => this.CallConnectorAsync<ResourceGroupListResult>(HttpMethod.Get, path, cancellationToken: ct),
Expand All @@ -487,12 +472,9 @@ public virtual AsyncPageable<ResourceGroup> ListResourceGroupsAsync([DynamicValu
public virtual AsyncPageable<ResourceItem> ListResourcesAsync([DynamicValues("ListSubscriptions")] string subscription, [DynamicValues("ListResourceGroups")] string resourceGroup, string resourceType, CancellationToken cancellationToken = default)
{
var queryParams = new List<string>();
if (subscription != default)
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
if (resourceGroup != default)
queryParams.Add($"resourcegroups={Uri.EscapeDataString(resourceGroup.ToString())}");
if (resourceType != default)
queryParams.Add($"resourcetype={Uri.EscapeDataString(resourceType.ToString())}");
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
queryParams.Add($"resourcegroups={Uri.EscapeDataString(resourceGroup.ToString())}");
queryParams.Add($"resourcetype={Uri.EscapeDataString(resourceType.ToString())}");
var path = $"/listResources" + (queryParams.Count > 0 ? "?" + string.Join("&", queryParams) : "");
return this.CreatePageable<ResourceItemListResult, ResourceItem>(
ct => this.CallConnectorAsync<ResourceItemListResult>(HttpMethod.Get, path, cancellationToken: ct),
Expand All @@ -514,14 +496,10 @@ public virtual AsyncPageable<ResourceItem> ListResourcesAsync([DynamicValues("Li
public virtual async Task<Table> QueryDataAsync(QueryDataInput input, [DynamicValues("ListSubscriptions")] string subscription, [DynamicValues("ListResourceGroups")] string resourceGroup, string resourceType, [DynamicValues("ListResources")] string resourceName, CancellationToken cancellationToken = default)
{
var queryParams = new List<string>();
if (subscription != default)
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
if (resourceGroup != default)
queryParams.Add($"resourcegroups={Uri.EscapeDataString(resourceGroup.ToString())}");
if (resourceType != default)
queryParams.Add($"resourcetype={Uri.EscapeDataString(resourceType.ToString())}");
if (resourceName != default)
queryParams.Add($"resourcename={Uri.EscapeDataString(resourceName.ToString())}");
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
queryParams.Add($"resourcegroups={Uri.EscapeDataString(resourceGroup.ToString())}");
queryParams.Add($"resourcetype={Uri.EscapeDataString(resourceType.ToString())}");
queryParams.Add($"resourcename={Uri.EscapeDataString(resourceName.ToString())}");
var path = $"/queryDataV2" + (queryParams.Count > 0 ? "?" + string.Join("&", queryParams) : "");
return await this
.CallConnectorAsync<Table>(HttpMethod.Post, path, input, cancellationToken)
Expand All @@ -542,14 +520,10 @@ public virtual async Task<Table> QueryDataAsync(QueryDataInput input, [DynamicVa
public virtual async Task<ObjectEntity> QuerySchemaAsync(string input, [DynamicValues("ListSubscriptions")] string subscription, [DynamicValues("ListResourceGroups")] string resourceGroup, string resourceType, [DynamicValues("ListResources")] string resourceName, CancellationToken cancellationToken = default)
{
var queryParams = new List<string>();
if (subscription != default)
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
if (resourceGroup != default)
queryParams.Add($"resourcegroups={Uri.EscapeDataString(resourceGroup.ToString())}");
if (resourceType != default)
queryParams.Add($"resourcetype={Uri.EscapeDataString(resourceType.ToString())}");
if (resourceName != default)
queryParams.Add($"resourcename={Uri.EscapeDataString(resourceName.ToString())}");
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
queryParams.Add($"resourcegroups={Uri.EscapeDataString(resourceGroup.ToString())}");
queryParams.Add($"resourcetype={Uri.EscapeDataString(resourceType.ToString())}");
queryParams.Add($"resourcename={Uri.EscapeDataString(resourceName.ToString())}");
var path = $"/querySchemaV2" + (queryParams.Count > 0 ? "?" + string.Join("&", queryParams) : "");
return await this
.CallConnectorAsync<ObjectEntity>(HttpMethod.Post, path, input, cancellationToken)
Expand All @@ -571,16 +545,11 @@ public virtual async Task<ObjectEntity> QuerySchemaAsync(string input, [DynamicV
public virtual async Task<VisualizeResults> VisualizeQueryAsync(VisualizeQueryInput input, [DynamicValues("ListSubscriptions")] string subscription, [DynamicValues("ListResourceGroups")] string resourceGroup, string resourceType, [DynamicValues("ListResources")] string resourceName, string chartType, CancellationToken cancellationToken = default)
{
var queryParams = new List<string>();
if (subscription != default)
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
if (resourceGroup != default)
queryParams.Add($"resourcegroups={Uri.EscapeDataString(resourceGroup.ToString())}");
if (resourceType != default)
queryParams.Add($"resourcetype={Uri.EscapeDataString(resourceType.ToString())}");
if (resourceName != default)
queryParams.Add($"resourcename={Uri.EscapeDataString(resourceName.ToString())}");
if (chartType != default)
queryParams.Add($"visType={Uri.EscapeDataString(chartType.ToString())}");
queryParams.Add($"subscriptions={Uri.EscapeDataString(subscription.ToString())}");
queryParams.Add($"resourcegroups={Uri.EscapeDataString(resourceGroup.ToString())}");
queryParams.Add($"resourcetype={Uri.EscapeDataString(resourceType.ToString())}");
queryParams.Add($"resourcename={Uri.EscapeDataString(resourceName.ToString())}");
queryParams.Add($"visType={Uri.EscapeDataString(chartType.ToString())}");
var path = $"/visualizeQueryV2" + (queryParams.Count > 0 ? "?" + string.Join("&", queryParams) : "");
return await this
.CallConnectorAsync<VisualizeResults>(HttpMethod.Post, path, input, cancellationToken)
Expand Down
24 changes: 15 additions & 9 deletions src/Azure.Connectors.Sdk/Generated/AzuretablesExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ public class InsertEntityResponse
public string RowKey { get; set; }

/// <summary>Dynamic entity columns returned by the service.</summary>
[JsonExtensionData]
public Dictionary<string, JsonElement> AdditionalProperties { get; set; } = new();
[JsonPropertyName("additionalProperties")]
public string EntityData { get; set; }
}

/// <summary>
Expand Down Expand Up @@ -123,8 +123,8 @@ public class EntityItem
public string RowKey { get; set; }

/// <summary>Dynamic entity columns returned by the service.</summary>
[JsonExtensionData]
public Dictionary<string, JsonElement> AdditionalProperties { get; set; } = new();
[JsonPropertyName("additionalProperties")]
public string EntityData { get; set; }
}

/// <summary>
Expand All @@ -145,8 +145,8 @@ public class GetEntityResponse
public string RowKey { get; set; }

/// <summary>Dynamic entity columns returned by the service.</summary>
[JsonExtensionData]
public Dictionary<string, JsonElement> AdditionalProperties { get; set; } = new();
[JsonPropertyName("additionalProperties")]
public string EntityData { get; set; }
}

/// <summary>
Expand Down Expand Up @@ -254,13 +254,15 @@ public static StorageAccount StorageAccount(
public static InsertEntityResponse InsertEntityResponse(
string entityMetadataLocation = default,
string partitionKey = default,
string rowKey = default)
string rowKey = default,
string entityData = default)
{
return new InsertEntityResponse
{
EntityMetadataLocation = entityMetadataLocation,
PartitionKey = partitionKey,
RowKey = rowKey,
EntityData = entityData,
};
}

Expand Down Expand Up @@ -297,12 +299,14 @@ public static GetEntitiesResponse GetEntitiesResponse(
/// </summary>
public static EntityItem EntityItem(
string partitionKey = default,
string rowKey = default)
string rowKey = default,
string entityData = default)
{
return new EntityItem
{
PartitionKey = partitionKey,
RowKey = rowKey,
EntityData = entityData,
};
}

Expand All @@ -312,13 +316,15 @@ public static EntityItem EntityItem(
public static GetEntityResponse GetEntityResponse(
string tableMetadataLocation = default,
string partitionKey = default,
string rowKey = default)
string rowKey = default,
string entityData = default)
{
return new GetEntityResponse
{
TableMetadataLocation = tableMetadataLocation,
PartitionKey = partitionKey,
RowKey = rowKey,
EntityData = entityData,
};
}

Expand Down
Loading