-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathgraphHelper.js
More file actions
130 lines (112 loc) · 3.18 KB
/
graphHelper.js
File metadata and controls
130 lines (112 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
// <UserAuthConfigSnippet>
import 'isomorphic-fetch';
import { DeviceCodeCredential } from '@azure/identity';
import { Client } from '@microsoft/microsoft-graph-client';
// prettier-ignore
import { TokenCredentialAuthenticationProvider } from
'@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials/index.js';
let _settings = undefined;
let _deviceCodeCredential = undefined;
let _userClient = undefined;
export function initializeGraphForUserAuth(settings, deviceCodePrompt) {
// Ensure settings isn't null
if (!settings) {
throw new Error('Settings cannot be undefined');
}
_settings = settings;
_deviceCodeCredential = new DeviceCodeCredential({
clientId: settings.clientId,
tenantId: settings.tenantId,
userPromptCallback: deviceCodePrompt,
});
const authProvider = new TokenCredentialAuthenticationProvider(
_deviceCodeCredential,
{
scopes: settings.graphUserScopes,
},
);
_userClient = Client.initWithMiddleware({
authProvider: authProvider,
});
}
// </UserAuthConfigSnippet>
// <GetUserTokenSnippet>
export async function getUserTokenAsync() {
// Ensure credential isn't undefined
if (!_deviceCodeCredential) {
throw new Error('Graph has not been initialized for user auth');
}
// Ensure scopes isn't undefined
if (!_settings?.graphUserScopes) {
throw new Error('Setting "scopes" cannot be undefined');
}
// Request token with given scopes
const response = await _deviceCodeCredential.getToken(
_settings?.graphUserScopes,
);
return response.token;
}
// </GetUserTokenSnippet>
// <GetUserSnippet>
export async function getUserAsync() {
// Ensure client isn't undefined
if (!_userClient) {
throw new Error('Graph has not been initialized for user auth');
}
// Only request specific properties with .select()
return _userClient
.api('/me')
.select(['displayName', 'mail', 'userPrincipalName'])
.get();
}
// </GetUserSnippet>
// <GetInboxSnippet>
export async function getInboxAsync() {
// Ensure client isn't undefined
if (!_userClient) {
throw new Error('Graph has not been initialized for user auth');
}
return _userClient
.api('/me/mailFolders/inbox/messages')
.select(['from', 'isRead', 'receivedDateTime', 'subject'])
.top(25)
.orderby('receivedDateTime DESC')
.get();
}
// </GetInboxSnippet>
// <SendMailSnippet>
export async function sendMailAsync(subject, body, recipient) {
// Ensure client isn't undefined
if (!_userClient) {
throw new Error('Graph has not been initialized for user auth');
}
// Create a new message
const message = {
subject: subject,
body: {
content: body,
contentType: 'text',
},
toRecipients: [
{
emailAddress: {
address: recipient,
},
},
],
};
// Send the message
return _userClient.api('me/sendMail').post({
message: message,
});
}
// </SendMailSnippet>
// <MakeGraphCallSnippet>
// This function serves as a playground for testing Graph snippets
// or other code
export async function makeGraphCallAsync() {
// INSERT YOUR CODE HERE
}
// </MakeGraphCallSnippet>