microsoft-graph-client 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -0
- package/dist/api/files.d.ts.map +1 -1
- package/dist/api/files.js +3 -1
- package/dist/api/files.js.map +1 -1
- package/dist/types/file.d.ts +1 -0
- package/dist/types/file.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Microsoft Graph Client
|
|
2
|
+
|
|
3
|
+
TypeScript client for Microsoft Graph API with built-in authentication.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install microsoft-graph-client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { GraphClient } from 'microsoft-graph-client';
|
|
15
|
+
|
|
16
|
+
// Create client with pre-seeded auth (for production/CI)
|
|
17
|
+
const client = new GraphClient({
|
|
18
|
+
clientId: process.env.MS_GRAPH_CLIENT_ID,
|
|
19
|
+
tenantId: process.env.MS_GRAPH_TENANT_ID,
|
|
20
|
+
authRecord: process.env.MS_GRAPH_AUTH_RECORD,
|
|
21
|
+
tokenCache: process.env.MS_GRAPH_TOKEN_CACHE,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
await client.initialize();
|
|
25
|
+
|
|
26
|
+
// Get current user
|
|
27
|
+
const me = await client.users.getCurrentUser();
|
|
28
|
+
|
|
29
|
+
// Search chats by member name
|
|
30
|
+
const result = await client.chats.search({ memberName: 'John' });
|
|
31
|
+
|
|
32
|
+
// Send a message to a chat
|
|
33
|
+
await client.messages.sendChatMessage({
|
|
34
|
+
chatId: '19:xxx@thread.v2',
|
|
35
|
+
message: 'Hello!',
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Get messages from a chat
|
|
39
|
+
const messages = await client.messages.getChatMessages({
|
|
40
|
+
chatId: '19:xxx@thread.v2',
|
|
41
|
+
limit: 20,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Send mail
|
|
45
|
+
await client.mail.send({
|
|
46
|
+
to: [{ emailAddress: { address: 'user@example.com' } }],
|
|
47
|
+
subject: 'Hello',
|
|
48
|
+
body: { content: 'Message body', contentType: 'text' },
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Get calendar events
|
|
52
|
+
const events = await client.calendar.getEvents({
|
|
53
|
+
startDateTime: '2025-01-01T00:00:00Z',
|
|
54
|
+
endDateTime: '2025-01-31T23:59:59Z',
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Download SharePoint file
|
|
58
|
+
const file = await client.files.download({
|
|
59
|
+
siteHost: 'company.sharepoint.com',
|
|
60
|
+
sitePath: '/sites/TeamSite',
|
|
61
|
+
filePath: '/Documents/report.pdf',
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Get meeting transcripts
|
|
65
|
+
const transcripts = await client.transcripts.list({ meetingId: 'xxx' });
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## API Structure
|
|
69
|
+
|
|
70
|
+
| Domain | Methods |
|
|
71
|
+
|--------|---------|
|
|
72
|
+
| `client.users` | `getCurrentUser`, `get`, `search`, `setPresence`, `setPreferredPresence` |
|
|
73
|
+
| `client.chats` | `get`, `search`, `create` |
|
|
74
|
+
| `client.messages` | `get`, `getChatMessages`, `sendChatMessage`, `updateChatMessage`, `search`, `setReaction`, `unsetReaction` |
|
|
75
|
+
| `client.mail` | `list`, `send` |
|
|
76
|
+
| `client.calendar` | `getEvents`, `createEvent`, `findMeetingTimes`, `cancelEvent` |
|
|
77
|
+
| `client.files` | `download`, `upload`, `update`, `grantPermission` |
|
|
78
|
+
| `client.transcripts` | `getMeetingByJoinUrl`, `list`, `getContent` |
|
|
79
|
+
| `client.subscriptions` | `create`, `renew`, `delete`, `list`, `get` |
|
|
80
|
+
|
|
81
|
+
## Authentication
|
|
82
|
+
|
|
83
|
+
The client supports two authentication modes:
|
|
84
|
+
|
|
85
|
+
### 1. Device Code Auth (Interactive)
|
|
86
|
+
|
|
87
|
+
For local development or first-time setup:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
const client = new GraphClient({
|
|
91
|
+
clientId: 'your-app-client-id',
|
|
92
|
+
tenantId: 'your-tenant-id',
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// This will prompt you to visit a URL and enter a code
|
|
96
|
+
const result = await client.authenticate((info) => {
|
|
97
|
+
console.log(info.message);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// Save these for later use
|
|
101
|
+
console.log('Auth Record:', result.authRecord);
|
|
102
|
+
console.log('Token Cache:', result.tokenCache);
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 2. Pre-seeded Auth (Non-interactive)
|
|
106
|
+
|
|
107
|
+
For production deployments with credentials from environment:
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
const client = new GraphClient({
|
|
111
|
+
clientId: process.env.MS_GRAPH_CLIENT_ID,
|
|
112
|
+
tenantId: process.env.MS_GRAPH_TENANT_ID,
|
|
113
|
+
authRecord: process.env.MS_GRAPH_AUTH_RECORD,
|
|
114
|
+
tokenCache: process.env.MS_GRAPH_TOKEN_CACHE,
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
await client.initialize();
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Environment Variables
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
MS_GRAPH_CLIENT_ID=your-azure-app-client-id
|
|
124
|
+
MS_GRAPH_TENANT_ID=your-azure-tenant-id
|
|
125
|
+
MS_GRAPH_AUTH_RECORD={"homeAccountId":"...","environment":"..."}
|
|
126
|
+
MS_GRAPH_TOKEN_CACHE={"Account":{"..."},"RefreshToken":{"..."}}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Azure App Registration
|
|
130
|
+
|
|
131
|
+
1. Go to [Azure Portal](https://portal.azure.com) > Azure Active Directory > App registrations
|
|
132
|
+
2. Create a new registration with "Accounts in this organizational directory only"
|
|
133
|
+
3. Add a Mobile/Desktop redirect URI: `http://localhost`
|
|
134
|
+
4. Under API permissions, add Microsoft Graph delegated permissions as needed
|
|
135
|
+
5. Copy the Application (client) ID and Directory (tenant) ID
|
|
136
|
+
|
|
137
|
+
## Raw SDK Access
|
|
138
|
+
|
|
139
|
+
For operations not covered by the typed APIs:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
const sdkClient = await client.getSDKClient();
|
|
143
|
+
const result = await sdkClient.api('/me/photo/$value').get();
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Requirements
|
|
147
|
+
|
|
148
|
+
- Node.js >= 22.0.0
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
MIT
|
package/dist/api/files.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/api/files.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,QAAS,SAAQ,OAAO;IACnC;;OAEG;IACU,QAAQ,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,4BAA4B,CAAC;IA0BlG;;OAEG;IACU,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/api/files.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,QAAS,SAAQ,OAAO;IACnC;;OAEG;IACU,QAAQ,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,4BAA4B,CAAC;IA0BlG;;OAEG;IACU,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA2BxF;;OAEG;IACU,MAAM,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAY5F;;OAEG;IACU,eAAe,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ/E"}
|
package/dist/api/files.js
CHANGED
|
@@ -36,8 +36,10 @@ export class FilesApi extends BaseApi {
|
|
|
36
36
|
async upload(params) {
|
|
37
37
|
const filename = basename(params.filePath);
|
|
38
38
|
const fileContent = await readFile(params.filePath);
|
|
39
|
+
// Build path, normalizing slashes
|
|
40
|
+
const uploadPath = `${params.destinationPath}/${filename}`.replace(/\/+/g, '/');
|
|
39
41
|
// Step 1: Upload file to OneDrive
|
|
40
|
-
const uploadResponse = (await this.client.api(`/me/drive/root
|
|
42
|
+
const uploadResponse = (await this.client.api(`/me/drive/root:${uploadPath}:/content`).put(fileContent));
|
|
41
43
|
// Step 2: Create a sharing link
|
|
42
44
|
const linkResponse = (await this.client.api(`/me/drive/items/${uploadResponse.id}/createLink`).post({
|
|
43
45
|
type: 'view',
|
package/dist/api/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/api/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAY7D;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,OAAO;IACnC;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,MAAoC;QACxD,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1D,iEAAiE;QACjE,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM;aACjC,GAAG,CAAC,WAAW,UAAU,YAAY,CAAC;aACtC,MAAM,CAAC,yBAAyB,CAAC;aACjC,GAAG,EAAE,CAAyE,CAAC;QAElF,mBAAmB;QACnB,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM;aAChC,GAAG,CAAC,WAAW,UAAU,oBAAoB,CAAC;aAC9C,YAAY,CAAC,aAA6B,CAAC;aAC3C,GAAG,EAAE,CAAgB,CAAC;QAEzB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnC,OAAO;YACL,IAAI;YACJ,QAAQ,EAAE,SAAS,CAAC,IAAI;YACxB,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,MAAM,EAAE,SAAS,CAAC,EAAE;YACpB,OAAO,EAAE,SAAS,CAAC,eAAe,EAAE,OAAO;SAC5C,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CAAC,MAAgC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEpD,kCAAkC;QAClC,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/api/files.ts"],"names":[],"mappings":"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"}
|
package/dist/types/file.d.ts
CHANGED
package/dist/types/file.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/types/file.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/types/file.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|