microsoft-graph-client
v1.0.12
Published
TypeScript client library for Microsoft Graph API with built-in authentication
Maintainers
Readme
Microsoft Graph Client
TypeScript client for Microsoft Graph API with built-in authentication.
Installation
npm install microsoft-graph-clientUsage
import { GraphClient } from 'microsoft-graph-client';
// Create client with pre-seeded auth (for production/CI)
const client = new GraphClient({
clientId: process.env.MS_GRAPH_CLIENT_ID,
tenantId: process.env.MS_GRAPH_TENANT_ID,
authRecord: process.env.MS_GRAPH_AUTH_RECORD,
tokenCache: process.env.MS_GRAPH_TOKEN_CACHE,
});
await client.initialize();
// Get current user
const me = await client.users.getCurrentUser();
// Search chats by member name
const result = await client.chats.search({ memberName: 'John' });
// Send a message to a chat
await client.messages.sendChatMessage({
chatId: '19:[email protected]',
message: 'Hello!',
});
// Get messages from a chat
const messages = await client.messages.getChatMessages({
chatId: '19:[email protected]',
limit: 20,
});
// Send mail
await client.mail.send({
to: [{ emailAddress: { address: '[email protected]' } }],
subject: 'Hello',
body: { content: 'Message body', contentType: 'text' },
});
// Get calendar events
const events = await client.calendar.getEvents({
startDateTime: '2025-01-01T00:00:00Z',
endDateTime: '2025-01-31T23:59:59Z',
});
// Download SharePoint file
const file = await client.files.download({
siteHost: 'company.sharepoint.com',
sitePath: '/sites/TeamSite',
filePath: '/Documents/report.pdf',
});
// Get meeting transcripts
const transcripts = await client.transcripts.list({ meetingId: 'xxx' });API Structure
| Domain | Methods |
|--------|---------|
| client.users | getCurrentUser, get, search, setPresence, setPreferredPresence |
| client.chats | get, search, create |
| client.messages | get, getChatMessages, sendChatMessage, updateChatMessage, search, setReaction, unsetReaction |
| client.mail | list, send |
| client.calendar | getEvents, createEvent, findMeetingTimes, cancelEvent |
| client.files | download, upload, update, grantPermission |
| client.transcripts | getMeetingByJoinUrl, list, getContent |
| client.subscriptions | create, renew, delete, list, get |
Authentication
The client supports two authentication modes:
1. Device Code Auth (Interactive)
For local development or first-time setup:
const client = new GraphClient({
clientId: 'your-app-client-id',
tenantId: 'your-tenant-id',
});
// This will prompt you to visit a URL and enter a code
const result = await client.authenticate((info) => {
console.log(info.message);
});
// Save these for later use
console.log('Auth Record:', result.authRecord);
console.log('Token Cache:', result.tokenCache);2. Pre-seeded Auth (Non-interactive)
For production deployments with credentials from environment:
const client = new GraphClient({
clientId: process.env.MS_GRAPH_CLIENT_ID,
tenantId: process.env.MS_GRAPH_TENANT_ID,
authRecord: process.env.MS_GRAPH_AUTH_RECORD,
tokenCache: process.env.MS_GRAPH_TOKEN_CACHE,
});
await client.initialize();Environment Variables
MS_GRAPH_CLIENT_ID=your-azure-app-client-id
MS_GRAPH_TENANT_ID=your-azure-tenant-id
MS_GRAPH_AUTH_RECORD={"homeAccountId":"...","environment":"..."}
MS_GRAPH_TOKEN_CACHE={"Account":{"..."},"RefreshToken":{"..."}}Azure App Registration
- Go to Azure Portal > Azure Active Directory > App registrations
- Create a new registration with "Accounts in this organizational directory only"
- Add a Mobile/Desktop redirect URI:
http://localhost - Under API permissions, add Microsoft Graph delegated permissions as needed
- Copy the Application (client) ID and Directory (tenant) ID
Raw SDK Access
For operations not covered by the typed APIs:
const sdkClient = await client.getSDKClient();
const result = await sdkClient.api('/me/photo/$value').get();Requirements
- Node.js >= 22.0.0
License
MIT
