TypeScript client library for Microsoft Graph API with built-in authentication
npm install microsoft-graph-clientTypeScript client for Microsoft Graph API with built-in authentication.
``bash`
npm install microsoft-graph-client
`typescript
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:xxx@thread.v2',
message: 'Hello!',
});
// Get messages from a chat
const messages = await client.messages.getChatMessages({
chatId: '19:xxx@thread.v2',
limit: 20,
});
// Send mail
await client.mail.send({
to: [{ emailAddress: { address: 'user@example.com' } }],
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' });
`
| 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 |
The client supports two authentication modes:
For local development or first-time setup:
`typescript
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);
`
For production deployments with credentials from environment:
`typescript
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();
`
`bash`
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":{"..."}}
1. Go to Azure Portal > Azure Active Directory > App registrations
2. Create a new registration with "Accounts in this organizational directory only"
3. Add a Mobile/Desktop redirect URI: http://localhost
4. Under API permissions, add Microsoft Graph delegated permissions as needed
5. Copy the Application (client) ID and Directory (tenant) ID
For operations not covered by the typed APIs:
`typescript``
const sdkClient = await client.getSDKClient();
const result = await sdkClient.api('/me/photo/$value').get();
- Node.js >= 22.0.0
MIT