Type-safe TypeScript/JavaScript clients for Azure connectors — call Office 365, SharePoint, Teams, Azure Resource Manager, Azure Blob Storage, and 1,000+ connectors directly from Azure Functions and other Node.js apps.
Caution
Early Preview — Not for Production Use
This SDK is currently in early preview and is under active development. It is intended for evaluation, experimentation, and feedback purposes only.
- Do not use this SDK in production environments.
- Breaking changes should be expected across APIs, data models, and behavior in future releases.
- Features may be added, modified, or removed without prior notice.
We welcome feedback and contributions — please open an issue with questions, suggestions, or bug reports.
Azure provides a rich ecosystem of managed connectors that bridge your code to SaaS services, PaaS resources, and on-premises systems. Originally powering Azure Logic Apps and Power Automate, these connectors are now available as standalone, strongly-typed TypeScript/JavaScript clients for any Node.js application — no workflow service required.
- Fully typed — Generated async methods with TypeScript interfaces and JSDoc for full IntelliSense
- ESM and CommonJS — Dual-format package with separate entry points for both module systems
- Standard authentication — Azure
TokenCredentialsupport via@azure/core-authand@azure/identity - Resilient HTTP — Azure Core pipeline with configurable retries, timeouts, tracing, and request correlation
- Lazy pagination — Paginated list operations follow validated
nextLinkURLs as you iterate - 1,000+ connectors — Any Azure managed connector available via API Hub can be generated
Note: This is the Node.js SDK. A Python SDK and .NET SDK are also available.
┌─────────────────────────────────────┐
│ Your Azure Function / Node.js App │
│ │
│ const client = new Office365Client │
│ await client.sendEmail(...) │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Generated Connector Clients │
│ (Office365, Teams, etc.) │
│ │
│ • Typed async methods per action │
│ • Interface models from Swagger │
│ • JSDoc from connector metadata │
└──────────────┬──────────────────────┘
│ depends on
▼
┌─────────────────────────────────────┐
│ Azure Connectors Node.js SDK │
│ @azure/connectors │
│ │
│ • Standard TokenCredential │
│ • ConnectorHttpClient pipeline │
│ • ConnectorClientBase │
└─────────────────────────────────────┘
Install from npm:
npm install @azure/connectorsimport { ManagedIdentityCredential } from "@azure/identity";
import { ConnectorError } from "@azure/connectors";
import { Office365Client, SendEmailInput } from "@azure/connectors/generated/Office365Extensions";
async function sendEmailExample(): Promise<void> {
// Connection runtime URL from Azure Portal
const connectionUrl = "https://example.azure.com/connections/office365";
// Use managed identity for authentication
const credential = new ManagedIdentityCredential();
// Create client and send email
const client = new Office365Client(connectionUrl, credential);
const email: SendEmailInput = {
To: "recipient@example.com",
Subject: "Hello from Node.js SDK",
Body: "<p>This email was sent using the Azure Connectors Node.js SDK!</p>",
};
await client.sendEmail(email);
console.log("Email sent successfully!");
}
sendEmailExample().catch(console.error);import { ManagedIdentityCredential } from "@azure/identity";
import { ConnectorError } from "@azure/connectors";
import { Office365Client } from "@azure/connectors/generated/Office365Extensions";
async function sendEmailExample() {
const connectionUrl = "https://example.azure.com/connections/office365";
const credential = new ManagedIdentityCredential();
const client = new Office365Client(connectionUrl, credential);
await client.sendEmail({
To: "recipient@example.com",
Subject: "Hello from Node.js SDK",
Body: "<p>This email was sent using the Azure Connectors Node.js SDK!</p>",
});
console.log("Email sent successfully!");
}
sendEmailExample().catch(console.error);import { ManagedIdentityCredential } from "@azure/identity";
import { SharepointonlineClient } from "@azure/connectors/generated/SharepointonlineExtensions";
async function listSharePointItems(): Promise<void> {
const connectionUrl = "https://example.azure.com/connections/sharepointonline";
const credential = new ManagedIdentityCredential();
const client = new SharepointonlineClient(connectionUrl, credential);
for await (const item of client.getItems(
"https://contoso.sharepoint.com/sites/MySite",
"MyList",
)) {
console.log(`Item: ${item.Title}`);
}
}
listSharePointItems().catch(console.error);import { ManagedIdentityCredential } from "@azure/identity";
import { SharepointonlineClient } from "@azure/connectors/generated/SharepointonlineExtensions";
async function listSharePointItems() {
const connectionUrl = "https://example.azure.com/connections/sharepointonline";
const credential = new ManagedIdentityCredential();
const client = new SharepointonlineClient(connectionUrl, credential);
for await (const item of client.getItems(
"https://contoso.sharepoint.com/sites/MySite",
"MyList",
)) {
console.log(`Item: ${item.Title}`);
}
}
listSharePointItems().catch(console.error);Paginated list operations return a lazy PagedAsyncIterableIterator. Requests are made only as items or pages are consumed, and continuation links are routed through the connector connection URL.
import { ManagedIdentityCredential } from "@azure/identity";
import { ArmClient } from "@azure/connectors/generated/ArmExtensions";
const connectionUrl = "https://example.azure.com/connections/arm";
const client = new ArmClient(connectionUrl, new ManagedIdentityCredential());
for await (const subscription of client.listSubscriptions()) {
console.log(subscription.displayName);
}
for await (const page of client.listSubscriptions().byPage()) {
console.log(`Received ${page.length} subscriptions`);
}Every generated operation accepts an onResponse callback through its options. The
callback exposes the complete status, headers, and raw body while the method keeps its
typed return value. HTTP failures also provide the resulting ConnectorError as the
third callback argument.
const subscription = await client.getSubscription(
"subscription-id",
"2016-06-01",
{
onResponse: (rawResponse, parsedResponse, error) => {
console.log(rawResponse.status);
console.log(rawResponse.headers.toJSON());
console.log(rawResponse.bodyAsText);
},
},
);import { ManagedIdentityCredential } from "@azure/identity";
import { TeamsClient } from "@azure/connectors/generated/TeamsExtensions";
async function postTeamsMessage(): Promise<void> {
const connectionUrl = "https://example.azure.com/connections/teams";
const credential = new ManagedIdentityCredential();
const client = new TeamsClient(connectionUrl, credential);
await client.postMessageToConversation(
"team-group-id",
"19:channel-id",
{
body: {
content: "Hello from Node.js!",
contentType: "text",
},
},
);
console.log("Message posted to Teams!");
}
postTeamsMessage().catch(console.error);import { ManagedIdentityCredential } from "@azure/identity";
import { TeamsClient } from "@azure/connectors/generated/TeamsExtensions";
async function postTeamsMessage() {
const connectionUrl = "https://example.azure.com/connections/teams";
const credential = new ManagedIdentityCredential();
const client = new TeamsClient(connectionUrl, credential);
await client.postMessageToConversation("team-group-id", "19:channel-id", {
body: {
content: "Hello from Node.js!",
contentType: "text",
},
});
console.log("Message posted to Teams!");
}
postTeamsMessage().catch(console.error);The following connectors have been generated and validated with comprehensive test coverage:
| Connector | Import Path | Status | Tests |
|---|---|---|---|
| Azure Resource Manager | @azure/connectors/generated/ArmExtensions |
✅ Complete | 16 tests |
| Azure Blob Storage | @azure/connectors/generated/AzureblobExtensions |
✅ Complete | 13 tests |
| Azure Monitor Logs | @azure/connectors/generated/AzuremonitorlogsExtensions |
✅ Complete | 10 tests |
| Azure Data Explorer | @azure/connectors/generated/KustoExtensions |
✅ Complete | 17 tests |
| IBM MQ | @azure/connectors/generated/MqExtensions |
✅ Complete | 13 tests |
| MS Graph Groups & Users | @azure/connectors/generated/MsgraphgroupsanduserExtensions |
✅ Complete | 13 tests |
| Office 365 Outlook | @azure/connectors/generated/Office365Extensions |
✅ Complete | 14 tests |
| Office 365 Users | @azure/connectors/generated/Office365usersExtensions |
✅ Complete | 14 tests |
| OneDrive for Business | @azure/connectors/generated/OnedriveforbusinessExtensions |
✅ Complete | 15 tests |
| SharePoint Online | @azure/connectors/generated/SharepointonlineExtensions |
✅ Complete | 12 tests |
| SMTP | @azure/connectors/generated/SmtpExtensions |
✅ Complete | 9 tests |
| Microsoft Teams | @azure/connectors/generated/TeamsExtensions |
✅ Complete | 14 tests |
| DocuSign | @azure/connectors/generated/DocusignExtensions |
✅ Complete | 6 tests |
| GitHub | @azure/connectors/generated/GithubExtensions |
✅ Complete | 6 tests |
| Jira | @azure/connectors/generated/JiraExtensions |
✅ Complete | 6 tests |
| Microsoft Forms | @azure/connectors/generated/MicrosoftformsExtensions |
✅ Complete | 6 tests |
| Power BI | @azure/connectors/generated/PowerbiExtensions |
✅ Complete | 6 tests |
| Salesforce | @azure/connectors/generated/SalesforceExtensions |
✅ Complete | 6 tests |
| Shifts for Microsoft Teams | @azure/connectors/generated/ShiftsExtensions |
✅ Complete | 6 tests |
| Slack | @azure/connectors/generated/SlackExtensions |
✅ Complete | 7 tests |
| Microsoft To Do Business | @azure/connectors/generated/TodoExtensions |
✅ Complete | 6 tests |
| Box | @azure/connectors/generated/BoxExtensions |
✅ Complete | 8 tests |
| Dropbox | @azure/connectors/generated/DropboxExtensions |
✅ Complete | 8 tests |
| Excel Online | @azure/connectors/generated/ExcelonlineExtensions |
✅ Complete | 9 tests |
| FTP | @azure/connectors/generated/FtpExtensions |
✅ Complete | 8 tests |
| Google Calendar | @azure/connectors/generated/GooglecalendarExtensions |
✅ Complete | 8 tests |
| Google Drive | @azure/connectors/generated/GoogledriveExtensions |
✅ Complete | 8 tests |
| Google Tasks | @azure/connectors/generated/GoogletasksExtensions |
✅ Complete | 8 tests |
| Office 365 Groups Mail | @azure/connectors/generated/Office365groupsmailExtensions |
✅ Complete | 9 tests |
| RSS | @azure/connectors/generated/RssExtensions |
✅ Complete | 8 tests |
| Azure Event Grid | @azure/connectors/generated/AzureeventgridExtensions |
✅ Complete | 5 tests |
| Azure IoT Central | @azure/connectors/generated/AzureiotcentralExtensions |
✅ Complete | 7 tests |
| Cloudmersive Document Conversion | @azure/connectors/generated/CloudmersiveconvertExtensions |
✅ Complete | 7 tests |
| Fin & Ops Apps (Dynamics 365) | @azure/connectors/generated/DynamicsaxExtensions |
✅ Complete | 7 tests |
| PDF.co | @azure/connectors/generated/PdfcoExtensions |
✅ Complete | 7 tests |
| Plumsail Documents | @azure/connectors/generated/PlumsailExtensions |
✅ Complete | 7 tests |
| SQL Server | @azure/connectors/generated/SqlExtensions |
✅ Complete | 7 tests |
| Zendesk | @azure/connectors/generated/ZendeskExtensions |
✅ Complete | 7 tests |
| Pipedrive | @azure/connectors/generated/PipedriveExtensions |
✅ Complete | 7 tests |
| DocuWare | @azure/connectors/generated/DocuwareExtensions |
✅ Complete | 7 tests |
| SigningHub | @azure/connectors/generated/SigninghubExtensions |
✅ Complete | 7 tests |
| Campfire | @azure/connectors/generated/CampfireExtensions |
✅ Complete | 7 tests |
| ClickSend SMS | @azure/connectors/generated/ClicksendsmsExtensions |
✅ Complete | 7 tests |
| Freshservice | @azure/connectors/generated/FreshserviceExtensions |
✅ Complete | 7 tests |
| Infusionsoft | @azure/connectors/generated/InfusionsoftExtensions |
✅ Complete | 7 tests |
| Insightly | @azure/connectors/generated/InsightlyExtensions |
✅ Complete | 7 tests |
| Mailchimp | @azure/connectors/generated/MailchimpExtensions |
✅ Complete | 7 tests |
| Monday | @azure/connectors/generated/MondayExtensions |
✅ Complete | 7 tests |
| Projectplace | @azure/connectors/generated/ProjectplaceExtensions |
✅ Complete | 7 tests |
| SendGrid | @azure/connectors/generated/SendgridExtensions |
✅ Complete | 7 tests |
| Text Request | @azure/connectors/generated/TextrequestExtensions |
✅ Complete | 7 tests |
| Webex | @azure/connectors/generated/WebexExtensions |
✅ Complete | 7 tests |
The following clients have generated SDK coverage and compile-checked ESM/CJS samples, but have not been validated end to end against live connector services.
| Connector | Import Path | Validation |
|---|---|---|
| Twitter (X) | @azure/connectors/generated/TwitterExtensions |
Mocked SDK tests |
| WordPress | @azure/connectors/generated/WordpressExtensions |
Mocked SDK tests |
| Plivo | @azure/connectors/generated/PlivoExtensions |
Mocked SDK tests |
| Rev.ai | @azure/connectors/generated/RevaiExtensions |
Mocked SDK tests |
| Starmind | @azure/connectors/generated/StarmindExtensions |
Mocked SDK tests |
| Tallyfy | @azure/connectors/generated/TallyfyExtensions |
Mocked SDK tests |
| Eventbrite | @azure/connectors/generated/EventbriteExtensions |
Mocked SDK tests |
| Formstack Forms | @azure/connectors/generated/FormstackformsExtensions |
Mocked SDK tests |
| Typeform | @azure/connectors/generated/TypeformExtensions |
Mocked SDK tests |
| Ticketmaster | @azure/connectors/generated/TicketmasterExtensions |
Mocked SDK tests |
| Zoho Sign | @azure/connectors/generated/ZohosignExtensions |
Mocked SDK tests |
| Seismic Planner | @azure/connectors/generated/SeismicplannerExtensions |
Mocked SDK tests |
| Way We Do | @azure/connectors/generated/WaywedoExtensions |
Mocked SDK tests |
| Meeting Room Map | @azure/connectors/generated/MeetingroommapExtensions |
Mocked SDK tests |
| StarRez REST V1 | @azure/connectors/generated/Starrezrestv1Extensions |
Mocked SDK tests |
| Replicon | @azure/connectors/generated/RepliconExtensions |
Mocked SDK tests |
| Etsy | @azure/connectors/generated/EtsyExtensions |
Mocked SDK tests |
| Elfsquad Data | @azure/connectors/generated/ElfsquaddataExtensions |
Mocked SDK tests |
| Impexium | @azure/connectors/generated/ImpexiumExtensions |
Mocked SDK tests |
| Jedox OData Hub | @azure/connectors/generated/JedoxodatahubExtensions |
Mocked SDK tests |
| Orderful | @azure/connectors/generated/OrderfulExtensions |
Mocked SDK tests; retired connector fixture |
| Zoho ZeptoMail | @azure/connectors/generated/ZeptomailExtensions |
Mocked SDK tests |
Test coverage: 1,252 tests across 69 test suites and 75 generated connectors.
Generated clients accept any TokenCredential from @azure/core-auth, so
credentials from @azure/identity can be passed directly. The existing
ManagedIdentityTokenProvider and ConnectionStringTokenProvider classes
remain available as compatibility credentials.
import { ManagedIdentityCredential } from "@azure/identity";
// System-assigned managed identity
const credential = new ManagedIdentityCredential();
// User-assigned managed identity
const credential = new ManagedIdentityCredential("your-client-id");import { ManagedIdentityCredential } from "@azure/identity";
// System-assigned managed identity
const credential = new ManagedIdentityCredential();
// User-assigned managed identity
const credential = new ManagedIdentityCredential("your-client-id");import { ConnectionStringTokenProvider } from "@azure/connectors";
const credential = new ConnectionStringTokenProvider("your-api-key");import { ConnectionStringTokenProvider } from "@azure/connectors";
const credential = new ConnectionStringTokenProvider("your-api-key");Customize client behavior with ConnectorClientOptions:
import { ConnectorClientOptions } from "@azure/connectors";
import { Office365Client } from "@azure/connectors/generated/Office365Extensions";
const options: ConnectorClientOptions = {
retryOptions: {
maxRetries: 4,
retryDelayInMs: 1000,
maxRetryDelayInMs: 60000,
},
telemetryOptions: {
clientRequestIdHeaderName: "x-custom-request-id",
},
};
const client = new Office365Client(connectionUrl, credential, options);import { Office365Client } from "@azure/connectors/generated/Office365Extensions";
const client = new Office365Client(connectionUrl, credential, {
retryOptions: {
maxRetries: 4,
retryDelayInMs: 1000,
maxRetryDelayInMs: 60000,
},
});For testing or a custom host transport, set httpClient to an implementation
of HttpClient from @azure/core-rest-pipeline. Authentication, retries,
request correlation, tracing, and logging remain pipeline policies.
Connector requests, responses, retries, and terminal errors use the standard
azure:connectors logger. Logging is disabled by default; enable it with an
Azure SDK log level:
$env:AZURE_LOG_LEVEL = "info"Request URLs are logged without query strings so credentials and signed query parameters are not written to diagnostics.
All connector errors are thrown as ConnectorError with structured details:
import { ConnectorError } from "@azure/connectors";
try {
await client.sendEmail(email);
} catch (error) {
if (error instanceof ConnectorError) {
console.error(`Operation: '${error.message}'.`);
console.error(`Status code: '${error.statusCode}'.`);
console.error(`Response: '${error.responseBody}'.`);
} else {
throw error;
}
}import { ConnectorError } from "@azure/connectors";
try {
await client.sendEmail(email);
} catch (error) {
if (error instanceof ConnectorError) {
console.error(`Operation: '${error.message}'.`);
console.error(`Status code: '${error.statusCode}'.`);
console.error(`Response: '${error.responseBody}'.`);
} else {
throw error;
}
}@azure/connectors/
├── src/azureConnectors/ # Core SDK infrastructure
│ ├── authentication.ts # Token providers
│ ├── clientBase.ts # Base connector client
│ ├── connectorHttpClient.ts # Azure Core HTTP pipeline
│ ├── options.ts # Configuration options
│ ├── connectorError.ts # Connector error type
│ └── triggerPayload.ts # Trigger callback types
├── src/generated/ # Auto-generated connector clients
│ ├── ArmExtensions.ts # Azure Resource Manager client
│ ├── AzureblobExtensions.ts # Azure Blob Storage client
│ ├── AzuremonitorlogsExtensions.ts # Azure Monitor Logs client
│ ├── BoxExtensions.ts # Box client
│ ├── DocusignExtensions.ts # DocuSign client
│ ├── DropboxExtensions.ts # Dropbox client
│ ├── ExcelonlineExtensions.ts # Excel Online client
│ ├── FtpExtensions.ts # FTP client
│ ├── GithubExtensions.ts # GitHub client
│ ├── GooglecalendarExtensions.ts # Google Calendar client
│ ├── GoogledriveExtensions.ts # Google Drive client
│ ├── GoogletasksExtensions.ts # Google Tasks client
│ ├── JiraExtensions.ts # Jira client
│ ├── KustoExtensions.ts # Azure Data Explorer client
│ ├── MicrosoftformsExtensions.ts # Microsoft Forms client
│ ├── MqExtensions.ts # IBM MQ client
│ ├── MsgraphgroupsanduserExtensions.ts # MS Graph Groups & Users client
│ ├── Office365Extensions.ts # Office 365 Outlook client
│ ├── Office365groupsmailExtensions.ts # Office 365 Groups Mail client
│ ├── Office365usersExtensions.ts # Office 365 Users client
│ ├── OnedriveforbusinessExtensions.ts # OneDrive for Business client
│ ├── PowerbiExtensions.ts # Power BI client
│ ├── RssExtensions.ts # RSS client
│ ├── SalesforceExtensions.ts # Salesforce client
│ ├── SharepointonlineExtensions.ts # SharePoint Online client
│ ├── ShiftsExtensions.ts # Shifts for Microsoft Teams client
│ ├── SlackExtensions.ts # Slack client
│ ├── SmtpExtensions.ts # SMTP client
│ ├── TeamsExtensions.ts # Microsoft Teams client
│ ├── TodoExtensions.ts # Microsoft To Do Business client
│ ├── connectorNames.ts # Connector name constants
│ ├── index.ts # Generated export barrel
│ └── ManagedConnectors.ts # Connector registry
├── tests/ # Jest test suite
├── samples/ # Usage examples (ESM/CJS, TS/JS)
└── docs/ # Additional documentation
Complete working samples are included for both TypeScript and JavaScript in ESM and CommonJS formats:
samples/
├── esm/
│ ├── typescript/ # TypeScript ESM samples
│ │ ├── arm.ts
│ │ └── ... (52 connectors)
│ └── javascript/ # JavaScript ESM samples (.mjs)
│ ├── arm.mjs
│ └── ... (52 connectors)
└── cjs/
├── typescript/ # TypeScript CJS samples
│ ├── arm.ts
│ └── ... (52 connectors)
└── javascript/ # JavaScript CJS samples (.cjs)
├── arm.cjs
└── ... (52 connectors)
See docs/connection-setup.md for instructions on creating the Azure connections required to run the samples.
- Connectors .NET SDK — .NET implementation of this SDK
- Azure Functions Connector Extension - An Azure Functions trigger extension for receiving webhook callbacks from Connector Namespace
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit the Microsoft CLA website.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot.
See CONTRIBUTING.md for detailed guidelines.
For issues and questions:
- 🐛 Bug reports: File an issue
- 📚 Documentation: See docs/ folder
See SECURITY.md for security-related information.
This project is licensed under the MIT License - see the LICENSE file for details.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.