@futura-dev/microsoft-sdk 0.0.2 → 1.1.1

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.
Files changed (39) hide show
  1. package/.github/workflows/deploy-npm-package.yml +19 -0
  2. package/dist/graph-api/graph-api.module.d.ts +12 -0
  3. package/dist/graph-api/graph-api.module.d.ts.map +1 -0
  4. package/dist/graph-api/graph-api.module.js +33 -0
  5. package/dist/graph-api/graph-api.module.js.map +1 -0
  6. package/dist/graph-api/graph-api.service.d.ts +53 -0
  7. package/dist/graph-api/graph-api.service.d.ts.map +1 -0
  8. package/dist/graph-api/graph-api.service.js +112 -0
  9. package/dist/graph-api/graph-api.service.js.map +1 -0
  10. package/dist/graph-api/types.d.ts +163 -0
  11. package/dist/graph-api/types.d.ts.map +1 -0
  12. package/dist/graph-api/types.js +3 -0
  13. package/dist/graph-api/types.js.map +1 -0
  14. package/dist/index.d.ts +6 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +13 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/sharepoint-api/sharepoint-api.module.d.ts +12 -0
  19. package/dist/sharepoint-api/sharepoint-api.module.d.ts.map +1 -0
  20. package/dist/sharepoint-api/sharepoint-api.module.js +33 -0
  21. package/dist/sharepoint-api/sharepoint-api.module.js.map +1 -0
  22. package/dist/sharepoint-api/sharepoint-api.service.d.ts +39 -0
  23. package/dist/sharepoint-api/sharepoint-api.service.d.ts.map +1 -0
  24. package/dist/sharepoint-api/sharepoint-api.service.js +132 -0
  25. package/dist/sharepoint-api/sharepoint-api.service.js.map +1 -0
  26. package/dist/sharepoint-api/types.d.ts +163 -0
  27. package/dist/sharepoint-api/types.d.ts.map +1 -0
  28. package/dist/sharepoint-api/types.js +3 -0
  29. package/dist/sharepoint-api/types.js.map +1 -0
  30. package/package.json +12 -7
  31. package/src/graph-api/graph-api.module.ts +29 -0
  32. package/src/graph-api/graph-api.service.ts +104 -0
  33. package/src/{microsoft-api → graph-api}/types.ts +4 -0
  34. package/src/index.ts +6 -5
  35. package/src/sharepoint-api/sharepoint-api.module.ts +30 -0
  36. package/src/sharepoint-api/sharepoint-api.service.ts +113 -0
  37. package/src/sharepoint-api/types.ts +108 -0
  38. package/src/microsoft-api/microsoft-api.module.ts +0 -14
  39. package/src/microsoft-api/microsoft-api.service.ts +0 -299
@@ -0,0 +1,108 @@
1
+ type MicrosoftGraphIdentitySet = {
2
+ id: string;
3
+ email: string;
4
+ displayName: string;
5
+ };
6
+
7
+ export type ListWebhook = {
8
+ value: {
9
+ subscriptionId: string;
10
+ clientState: null;
11
+ expirationDateTime: string;
12
+ resource: string;
13
+ tenantId: string;
14
+ siteUrl: string;
15
+ webId: string;
16
+ }[];
17
+ };
18
+
19
+ export type ListLog = {
20
+ 'odata.type': string;
21
+ 'odata.id': string;
22
+ 'odata.editLink': string;
23
+ ChangeToken: {
24
+ StringValue: `${number};${number};${string};${string};${string}`;
25
+ };
26
+ ChangeType: number;
27
+ SiteId: string;
28
+ Time: string;
29
+ Editor: string;
30
+ EditorEmailHint: null | any;
31
+ ItemId: number;
32
+ ListId: string;
33
+ ServerRelativeUrl: string;
34
+ SharedByUser: null | any;
35
+ SharedWithUsers: null | any;
36
+ UniqueId: string;
37
+ WebId: string;
38
+ };
39
+
40
+ export type ListItem<T> = {
41
+ '@odata.context': string;
42
+ '@odata.etag': string;
43
+ createdDateTime: string;
44
+ eTag: string;
45
+ id: string;
46
+ name: string;
47
+ lastModifiedDateTime: string;
48
+ description: string;
49
+ webUrl: string;
50
+ createdBy: {
51
+ user: MicrosoftGraphIdentitySet;
52
+ };
53
+ lastModifiedBy: {
54
+ user: MicrosoftGraphIdentitySet;
55
+ };
56
+ parentReference: {
57
+ id: string;
58
+ siteId: string;
59
+ };
60
+ contentType: {
61
+ id: string;
62
+ name: string;
63
+ };
64
+ 'fields@odata.context': string;
65
+ fields: T;
66
+ };
67
+ export type HRListItem = ListItem<{
68
+ '@odata.etag': string;
69
+ Title: string;
70
+ Attachments: boolean;
71
+ LinkTitle: string;
72
+ Position: string;
73
+ Progress: string;
74
+ RecruiterLookupId: string;
75
+ Email: string;
76
+ Telefono: string;
77
+ ApplicationDate: string;
78
+ PhoneScreenDate: string;
79
+ PhoneScreenerLookupId: string;
80
+ InterviewDate: string;
81
+ Interviewers: {
82
+ LookupId: number;
83
+ LookupValue: string;
84
+ Email: string;
85
+ };
86
+ Notes: string;
87
+ Profilo_x0020_LinkedIn: string;
88
+ Curriculum_x0020_URL: string;
89
+ id: string;
90
+ ContentType: string;
91
+ Modified: string;
92
+ Created: string;
93
+ AuthorLookupId: string;
94
+ EditorLookupId: string;
95
+ _UIVersionString: string;
96
+ Edit: string;
97
+ LinkTitleNoMenu: string;
98
+ ItemChildCount: string;
99
+ FolderChildCount: string;
100
+ _ComplianceFlags: string;
101
+ _ComplianceTag: string;
102
+ _ComplianceTagWrittenTime: string;
103
+
104
+ _ComplianceTagUserId: string;
105
+ }>;
106
+
107
+
108
+ export type ColumnValue = { columnGroup: string; description: string; displayName: string; enforceUniqueValues: boolean; hidden: boolean; id: string; indexed: boolean; name: string; readOnly: boolean; required: boolean; geolocation?: Record<string, never>; boolean?: Record<string, never>; calculated?: { format: string; formula: string; outputType: 'boolean' | 'currency' | 'dateTime' | 'number' | 'text'; }; choice?: { allowTextEntry: boolean; choices: string[]; displayAs: 'checkBoxes' | 'dropDownMenu' | 'radioButtons'; }; currency?: { locale: string; }; dateTime?: { displayAs: 'default' | 'friendly' | 'standard'; format: string; }; lookup?: { allowMultipleValues: boolean; allowUnlimitedLength: boolean; columnName: string; listId: string; primaryLookupColumnId: string; }; number?: { decimalPlaces: string; displayAs: 'number' | 'percentage'; maximum: number; minimum: number; }; personOrGroup?: { allowMultipleSelection: boolean; displayAs: string; chooseFromType: 'peopleAndGroups' | 'peopleOnly'; }; text?: { allowMultipleLines: boolean; appendChangesToExistingText: boolean; linesForEditing: number; maxLength: number; textType: 'plain' | 'richText'; }; }; export type GetColumnsResponse = { '@odata.context': string; value: ColumnValue[]; };
@@ -1,14 +0,0 @@
1
- import { Module } from '@nestjs/common';
2
- import { HttpModule } from '@nestjs/axios';
3
- import { MicrosoftApiService } from './microsoft-api.service';
4
-
5
- @Module({
6
- imports: [
7
- HttpModule.register({
8
- headers: {},
9
- }),
10
- ],
11
- providers: [MicrosoftApiService],
12
- exports: [MicrosoftApiService],
13
- })
14
- export class MicrosoftApiModule {}
@@ -1,299 +0,0 @@
1
- import { Injectable } from '@nestjs/common';
2
- import { HttpService } from '@nestjs/axios';
3
- import { firstValueFrom } from 'rxjs';
4
- import * as msal from '@azure/msal-node';
5
- import * as process from 'process';
6
- import { HRListItem, ListLog } from './types';
7
-
8
- @Injectable()
9
- export class MicrosoftApiService {
10
- constructor(private readonly http: HttpService) {}
11
-
12
- simpleLogin = (options: {
13
- clientId: string;
14
- scope: string;
15
- clientSecret: string;
16
- grantType: string;
17
- tenantId: string;
18
- }) => {
19
- const body = new FormData();
20
- body.set('client_id', options.clientId);
21
- body.set('scope', options.scope);
22
- body.set('client_secret', options.clientSecret);
23
- body.set('grant_type', options.grantType);
24
-
25
- return firstValueFrom(
26
- this.http.post<any>(
27
- `https://login.microsoft.com/${options.tenantId}/oauth2/v2.0/token`,
28
- body,
29
- {
30
- headers: { 'Content-Type': 'multipart/form-data' },
31
- },
32
- ),
33
- );
34
- };
35
-
36
- loginWithCertificate = (options: {
37
- tenantId: string;
38
- clientId: string;
39
- thumbprint: string;
40
- privateKey: string;
41
- scopes: string[];
42
- }) => {
43
- const B = new msal.ConfidentialClientApplication({
44
- auth: {
45
- knownAuthorities: [
46
- `https://login.microsoftonline.com/${options.tenantId}`,
47
- ],
48
- clientId: `${options.clientId}`,
49
- clientCertificate: {
50
- thumbprint: options.thumbprint,
51
- privateKey: options.privateKey,
52
- },
53
- },
54
- });
55
- return B.acquireTokenByClientCredential({
56
- authority: `https://login.microsoftonline.com/${options.tenantId}`,
57
- scopes: options.scopes,
58
- });
59
- };
60
-
61
- subscribe = async (
62
- listId: string,
63
- notificationUrl: string,
64
- expirationTimestamp: number,
65
- ) => {
66
- console.log('[SUBSCRIPTION REQUEST]:', listId, notificationUrl);
67
- // read key from files
68
- // login
69
- const auth = await this.loginWithCertificate({
70
- clientId: process.env.AZURE_AD_CLIENT_ID,
71
- scopes: [`${process.env.AZURE_AD_SCOPE}`],
72
- tenantId: process.env.AZURE_AD_TENANT_ID,
73
- thumbprint: process.env.CERTIFICATE_THUMBPRINT,
74
- privateKey:
75
- '-----BEGIN RSA PRIVATE KEY-----\n' +
76
- 'MIIEpAIBAAKCAQEAwRdWyopVfuYKxbg4+4JQKAnHcA/lGsotrZAjhQJoix+aFlw/\n' +
77
- '3vKQC/33fKEApK2odsmVAJUP1k1p31Fb8eddNlsM4cPacsWSHZ2x+Qcds1gouSdO\n' +
78
- 'CROkQmro0jybH+3puFEV2Gr3E5LIo62p9LFL9nvCvM1fHrsXTOV2mJAVdLTgqkoC\n' +
79
- 'oVTUZji+tcde64jsFx6zvgedKWRkUOXZOJC5gkfkcrkbjWwEq/lSYtbm4sRif9Eu\n' +
80
- 'FdqjYM3XqiF+TwEu1HIm37UyEE4jKn22PyG7JhiIffKvVHo7dIZPFcI9j8wBfeBA\n' +
81
- 'PZjZ0qh+i9/b8odQ6u0S/siYP82rHovKg5kzJwIDAQABAoIBAC/wanTouWdDF+OU\n' +
82
- '5FjVNq9qFiDlYV0wWvzfb2Ijge8gjnIEvzrMACVqDVrc4jsAfnXXgG3flEoBeEqg\n' +
83
- 'eXJqncLUAjO/G2opUSiXMUuBj8cqGRo2/vHT9ZEj19/yehUITWGciA7uJ5+tbrDs\n' +
84
- 'eeitaA2vFl8nofkQPC20PqiMBTevDd6h6wsuZFKQWKI5P0fu67UvD8kLXyUApx+h\n' +
85
- 'Z+vV41cgWuOBit5q1k6CZs4eZZw0mr81Wu7i6ueUwQTZbHE1AF5luh1lxrT+v05B\n' +
86
- 'Nu0XNMCuEjjsgKe91xVdyqwTg9EpQ8kO+4NTn/ZMDXLOix36S12w/22WkC5f8hy3\n' +
87
- 'B05JjnkCgYEA8WGCMFvj+y0r71b+H7KhdlnOKA4zEAlo2yJAGylky0lHtzEztnrL\n' +
88
- 'SplLK2Q3AF8i7XWiXQ9ubmGSLDB1NsKHfCHjtVu7jh3G+LOQoFBEKHY5gDzAZkZQ\n' +
89
- 'iGhxWO1FrX2xIykZXSNqlx9JOKpSkDdiSS97Map+BYJqio18h5Q2cysCgYEAzMkf\n' +
90
- 'RflUuY1O50a3OWHe/DZTIF3rTIhwx6/fylflGHOAsBkYSvCl6FL0znxE7vwtcGK2\n' +
91
- 'uGoAn+H1WOl77QIXlyxdIGQ+DE+137r3IvSjPE/SJeWNk+1h1t6A/LyhYYEuqX4w\n' +
92
- '8A/TbSqp1o2NA4mX5Sp4dHW5o8OxwXJ4sQB1cfUCgYEAkaJoPy8h9SkC6gvNlWhc\n' +
93
- 'XKDAbpBqpJFYz2Xx0bF+29whxdiMv9uEjkTBArQbL0E3PJgN1yH5WeXKoJi4D8r8\n' +
94
- 'nZuA3Ko1FgDHTMRiTSdAiD0UYlfFKa/g5PxG7wVxVcSRPIqOgBBfPkClF+hDmjmg\n' +
95
- 'NlHMfWHFWSOfjmrhKJf25jMCgYEAiDqfCECWAR2kyKu9RXn7CZLl95ki53W4eM5h\n' +
96
- 'tEyGRZ7Ik90N0QSHiaZt3lLC1KyDWckBPmqd4b5CJZSk8QS8Rr+nb93ffPclySCq\n' +
97
- 'OOG/GWcMKFOtvCNlO7gm3HprbN6v+ObOjVQp1OxVsTnW/exxVGzNVsPd67hKLqME\n' +
98
- '8NKaTmUCgYAdBEPSHuPesPXXYgsE9aaBjUwBEP5an9ZsdH4CAOgaJ+qi6lNpHow2\n' +
99
- 'O+9rSx/VldqwlnFj++6gPEdyVGw4NRnrO2kZvRoY7zrizmVZok1Kcv2fdThzWjWB\n' +
100
- '4fdduO1lx6pBaBa4LZbOIRCNsHXYLdOInjnOJC9RJ86lsGTWr1lH6A==\n' +
101
- '-----END RSA PRIVATE KEY-----',
102
- });
103
- return firstValueFrom(
104
- this.http.post(
105
- `https://futuraitsrl.sharepoint.com/sites/hr/_api/web/lists('${listId}')/subscriptions`,
106
- {
107
- resource:
108
- 'https://futuraitsrl.sharepoint.com/sites/hr/Lists/Recruiting%20Board/AllItems.aspx',
109
- notificationUrl: `${notificationUrl}`,
110
- expirationDateTime: new Date(expirationTimestamp).toISOString(),
111
- },
112
- {
113
- headers: {
114
- Authorization: `Bearer ${auth.accessToken}`,
115
- },
116
- },
117
- ),
118
- );
119
- };
120
-
121
- deleteSubscription = async (listId: string, subscriptionId: string) => {
122
- const auth = await this.loginWithCertificate({
123
- clientId: process.env.AZURE_AD_CLIENT_ID,
124
- scopes: [`${process.env.AZURE_AD_SCOPE}`],
125
- tenantId: process.env.AZURE_AD_TENANT_ID,
126
- thumbprint: process.env.CERTIFICATE_THUMBPRINT,
127
- privateKey:
128
- '-----BEGIN RSA PRIVATE KEY-----\n' +
129
- 'MIIEpAIBAAKCAQEAwRdWyopVfuYKxbg4+4JQKAnHcA/lGsotrZAjhQJoix+aFlw/\n' +
130
- '3vKQC/33fKEApK2odsmVAJUP1k1p31Fb8eddNlsM4cPacsWSHZ2x+Qcds1gouSdO\n' +
131
- 'CROkQmro0jybH+3puFEV2Gr3E5LIo62p9LFL9nvCvM1fHrsXTOV2mJAVdLTgqkoC\n' +
132
- 'oVTUZji+tcde64jsFx6zvgedKWRkUOXZOJC5gkfkcrkbjWwEq/lSYtbm4sRif9Eu\n' +
133
- 'FdqjYM3XqiF+TwEu1HIm37UyEE4jKn22PyG7JhiIffKvVHo7dIZPFcI9j8wBfeBA\n' +
134
- 'PZjZ0qh+i9/b8odQ6u0S/siYP82rHovKg5kzJwIDAQABAoIBAC/wanTouWdDF+OU\n' +
135
- '5FjVNq9qFiDlYV0wWvzfb2Ijge8gjnIEvzrMACVqDVrc4jsAfnXXgG3flEoBeEqg\n' +
136
- 'eXJqncLUAjO/G2opUSiXMUuBj8cqGRo2/vHT9ZEj19/yehUITWGciA7uJ5+tbrDs\n' +
137
- 'eeitaA2vFl8nofkQPC20PqiMBTevDd6h6wsuZFKQWKI5P0fu67UvD8kLXyUApx+h\n' +
138
- 'Z+vV41cgWuOBit5q1k6CZs4eZZw0mr81Wu7i6ueUwQTZbHE1AF5luh1lxrT+v05B\n' +
139
- 'Nu0XNMCuEjjsgKe91xVdyqwTg9EpQ8kO+4NTn/ZMDXLOix36S12w/22WkC5f8hy3\n' +
140
- 'B05JjnkCgYEA8WGCMFvj+y0r71b+H7KhdlnOKA4zEAlo2yJAGylky0lHtzEztnrL\n' +
141
- 'SplLK2Q3AF8i7XWiXQ9ubmGSLDB1NsKHfCHjtVu7jh3G+LOQoFBEKHY5gDzAZkZQ\n' +
142
- 'iGhxWO1FrX2xIykZXSNqlx9JOKpSkDdiSS97Map+BYJqio18h5Q2cysCgYEAzMkf\n' +
143
- 'RflUuY1O50a3OWHe/DZTIF3rTIhwx6/fylflGHOAsBkYSvCl6FL0znxE7vwtcGK2\n' +
144
- 'uGoAn+H1WOl77QIXlyxdIGQ+DE+137r3IvSjPE/SJeWNk+1h1t6A/LyhYYEuqX4w\n' +
145
- '8A/TbSqp1o2NA4mX5Sp4dHW5o8OxwXJ4sQB1cfUCgYEAkaJoPy8h9SkC6gvNlWhc\n' +
146
- 'XKDAbpBqpJFYz2Xx0bF+29whxdiMv9uEjkTBArQbL0E3PJgN1yH5WeXKoJi4D8r8\n' +
147
- 'nZuA3Ko1FgDHTMRiTSdAiD0UYlfFKa/g5PxG7wVxVcSRPIqOgBBfPkClF+hDmjmg\n' +
148
- 'NlHMfWHFWSOfjmrhKJf25jMCgYEAiDqfCECWAR2kyKu9RXn7CZLl95ki53W4eM5h\n' +
149
- 'tEyGRZ7Ik90N0QSHiaZt3lLC1KyDWckBPmqd4b5CJZSk8QS8Rr+nb93ffPclySCq\n' +
150
- 'OOG/GWcMKFOtvCNlO7gm3HprbN6v+ObOjVQp1OxVsTnW/exxVGzNVsPd67hKLqME\n' +
151
- '8NKaTmUCgYAdBEPSHuPesPXXYgsE9aaBjUwBEP5an9ZsdH4CAOgaJ+qi6lNpHow2\n' +
152
- 'O+9rSx/VldqwlnFj++6gPEdyVGw4NRnrO2kZvRoY7zrizmVZok1Kcv2fdThzWjWB\n' +
153
- '4fdduO1lx6pBaBa4LZbOIRCNsHXYLdOInjnOJC9RJ86lsGTWr1lH6A==\n' +
154
- '-----END RSA PRIVATE KEY-----',
155
- });
156
- return firstValueFrom(
157
- this.http.delete(
158
- `https://futuraitsrl.sharepoint.com/sites/hr/_api/web/lists('${listId}')/subscriptions('${subscriptionId}')`,
159
- {
160
- headers: {
161
- Authorization: `Bearer ${auth.accessToken}`,
162
- },
163
- },
164
- ),
165
- );
166
- };
167
-
168
- getSubscriptions = async (listId: string) => {
169
- const auth = await this.loginWithCertificate({
170
- clientId: process.env.AZURE_AD_CLIENT_ID,
171
- scopes: [`${process.env.AZURE_AD_SCOPE}`],
172
- tenantId: process.env.AZURE_AD_TENANT_ID,
173
- thumbprint: process.env.CERTIFICATE_THUMBPRINT,
174
- privateKey:
175
- '-----BEGIN RSA PRIVATE KEY-----\n' +
176
- 'MIIEpAIBAAKCAQEAwRdWyopVfuYKxbg4+4JQKAnHcA/lGsotrZAjhQJoix+aFlw/\n' +
177
- '3vKQC/33fKEApK2odsmVAJUP1k1p31Fb8eddNlsM4cPacsWSHZ2x+Qcds1gouSdO\n' +
178
- 'CROkQmro0jybH+3puFEV2Gr3E5LIo62p9LFL9nvCvM1fHrsXTOV2mJAVdLTgqkoC\n' +
179
- 'oVTUZji+tcde64jsFx6zvgedKWRkUOXZOJC5gkfkcrkbjWwEq/lSYtbm4sRif9Eu\n' +
180
- 'FdqjYM3XqiF+TwEu1HIm37UyEE4jKn22PyG7JhiIffKvVHo7dIZPFcI9j8wBfeBA\n' +
181
- 'PZjZ0qh+i9/b8odQ6u0S/siYP82rHovKg5kzJwIDAQABAoIBAC/wanTouWdDF+OU\n' +
182
- '5FjVNq9qFiDlYV0wWvzfb2Ijge8gjnIEvzrMACVqDVrc4jsAfnXXgG3flEoBeEqg\n' +
183
- 'eXJqncLUAjO/G2opUSiXMUuBj8cqGRo2/vHT9ZEj19/yehUITWGciA7uJ5+tbrDs\n' +
184
- 'eeitaA2vFl8nofkQPC20PqiMBTevDd6h6wsuZFKQWKI5P0fu67UvD8kLXyUApx+h\n' +
185
- 'Z+vV41cgWuOBit5q1k6CZs4eZZw0mr81Wu7i6ueUwQTZbHE1AF5luh1lxrT+v05B\n' +
186
- 'Nu0XNMCuEjjsgKe91xVdyqwTg9EpQ8kO+4NTn/ZMDXLOix36S12w/22WkC5f8hy3\n' +
187
- 'B05JjnkCgYEA8WGCMFvj+y0r71b+H7KhdlnOKA4zEAlo2yJAGylky0lHtzEztnrL\n' +
188
- 'SplLK2Q3AF8i7XWiXQ9ubmGSLDB1NsKHfCHjtVu7jh3G+LOQoFBEKHY5gDzAZkZQ\n' +
189
- 'iGhxWO1FrX2xIykZXSNqlx9JOKpSkDdiSS97Map+BYJqio18h5Q2cysCgYEAzMkf\n' +
190
- 'RflUuY1O50a3OWHe/DZTIF3rTIhwx6/fylflGHOAsBkYSvCl6FL0znxE7vwtcGK2\n' +
191
- 'uGoAn+H1WOl77QIXlyxdIGQ+DE+137r3IvSjPE/SJeWNk+1h1t6A/LyhYYEuqX4w\n' +
192
- '8A/TbSqp1o2NA4mX5Sp4dHW5o8OxwXJ4sQB1cfUCgYEAkaJoPy8h9SkC6gvNlWhc\n' +
193
- 'XKDAbpBqpJFYz2Xx0bF+29whxdiMv9uEjkTBArQbL0E3PJgN1yH5WeXKoJi4D8r8\n' +
194
- 'nZuA3Ko1FgDHTMRiTSdAiD0UYlfFKa/g5PxG7wVxVcSRPIqOgBBfPkClF+hDmjmg\n' +
195
- 'NlHMfWHFWSOfjmrhKJf25jMCgYEAiDqfCECWAR2kyKu9RXn7CZLl95ki53W4eM5h\n' +
196
- 'tEyGRZ7Ik90N0QSHiaZt3lLC1KyDWckBPmqd4b5CJZSk8QS8Rr+nb93ffPclySCq\n' +
197
- 'OOG/GWcMKFOtvCNlO7gm3HprbN6v+ObOjVQp1OxVsTnW/exxVGzNVsPd67hKLqME\n' +
198
- '8NKaTmUCgYAdBEPSHuPesPXXYgsE9aaBjUwBEP5an9ZsdH4CAOgaJ+qi6lNpHow2\n' +
199
- 'O+9rSx/VldqwlnFj++6gPEdyVGw4NRnrO2kZvRoY7zrizmVZok1Kcv2fdThzWjWB\n' +
200
- '4fdduO1lx6pBaBa4LZbOIRCNsHXYLdOInjnOJC9RJ86lsGTWr1lH6A==\n' +
201
- '-----END RSA PRIVATE KEY-----',
202
- });
203
- return firstValueFrom(
204
- this.http.get(
205
- `https://futuraitsrl.sharepoint.com/sites/hr/_api/web/lists('${listId}')/subscriptions`,
206
- {
207
- headers: {
208
- Authorization: `Bearer ${auth.accessToken}`,
209
- },
210
- },
211
- ),
212
- );
213
- };
214
-
215
- getListItem = async (options: {
216
- siteId: string;
217
- listId: string;
218
- itemId: string;
219
- }) => {
220
- const auth = await this.simpleLogin({
221
- clientId: process.env.AZURE_AD_SIMPLE_CLIENT_ID,
222
- clientSecret: process.env.AZURE_AD_SIMPLE_CLIENT_SECRET,
223
- grantType: process.env.AZURE_AD_GRANT_TYPE,
224
- tenantId: process.env.AZURE_AD_TENANT_ID,
225
- scope: process.env.AZURE_AD_SIMPLE_SCOPE,
226
- });
227
- return firstValueFrom(
228
- this.http.get<HRListItem>(
229
- `https://graph.microsoft.com/beta/sites/${options.siteId}/lists/${options.listId}/items/${options.itemId}?expand=fields`,
230
- {
231
- headers: {
232
- Authorization: `Bearer ${auth.data.access_token}`,
233
- },
234
- },
235
- ),
236
- );
237
- };
238
-
239
- getListLogs = async (options: { listId: string; from: Date }) => {
240
- const auth = await this.loginWithCertificate({
241
- clientId: process.env.AZURE_AD_CLIENT_ID,
242
- scopes: [`${process.env.AZURE_AD_SCOPE}`],
243
- tenantId: process.env.AZURE_AD_TENANT_ID,
244
- thumbprint: process.env.CERTIFICATE_THUMBPRINT,
245
- privateKey:
246
- '-----BEGIN RSA PRIVATE KEY-----\n' +
247
- 'MIIEpAIBAAKCAQEAwRdWyopVfuYKxbg4+4JQKAnHcA/lGsotrZAjhQJoix+aFlw/\n' +
248
- '3vKQC/33fKEApK2odsmVAJUP1k1p31Fb8eddNlsM4cPacsWSHZ2x+Qcds1gouSdO\n' +
249
- 'CROkQmro0jybH+3puFEV2Gr3E5LIo62p9LFL9nvCvM1fHrsXTOV2mJAVdLTgqkoC\n' +
250
- 'oVTUZji+tcde64jsFx6zvgedKWRkUOXZOJC5gkfkcrkbjWwEq/lSYtbm4sRif9Eu\n' +
251
- 'FdqjYM3XqiF+TwEu1HIm37UyEE4jKn22PyG7JhiIffKvVHo7dIZPFcI9j8wBfeBA\n' +
252
- 'PZjZ0qh+i9/b8odQ6u0S/siYP82rHovKg5kzJwIDAQABAoIBAC/wanTouWdDF+OU\n' +
253
- '5FjVNq9qFiDlYV0wWvzfb2Ijge8gjnIEvzrMACVqDVrc4jsAfnXXgG3flEoBeEqg\n' +
254
- 'eXJqncLUAjO/G2opUSiXMUuBj8cqGRo2/vHT9ZEj19/yehUITWGciA7uJ5+tbrDs\n' +
255
- 'eeitaA2vFl8nofkQPC20PqiMBTevDd6h6wsuZFKQWKI5P0fu67UvD8kLXyUApx+h\n' +
256
- 'Z+vV41cgWuOBit5q1k6CZs4eZZw0mr81Wu7i6ueUwQTZbHE1AF5luh1lxrT+v05B\n' +
257
- 'Nu0XNMCuEjjsgKe91xVdyqwTg9EpQ8kO+4NTn/ZMDXLOix36S12w/22WkC5f8hy3\n' +
258
- 'B05JjnkCgYEA8WGCMFvj+y0r71b+H7KhdlnOKA4zEAlo2yJAGylky0lHtzEztnrL\n' +
259
- 'SplLK2Q3AF8i7XWiXQ9ubmGSLDB1NsKHfCHjtVu7jh3G+LOQoFBEKHY5gDzAZkZQ\n' +
260
- 'iGhxWO1FrX2xIykZXSNqlx9JOKpSkDdiSS97Map+BYJqio18h5Q2cysCgYEAzMkf\n' +
261
- 'RflUuY1O50a3OWHe/DZTIF3rTIhwx6/fylflGHOAsBkYSvCl6FL0znxE7vwtcGK2\n' +
262
- 'uGoAn+H1WOl77QIXlyxdIGQ+DE+137r3IvSjPE/SJeWNk+1h1t6A/LyhYYEuqX4w\n' +
263
- '8A/TbSqp1o2NA4mX5Sp4dHW5o8OxwXJ4sQB1cfUCgYEAkaJoPy8h9SkC6gvNlWhc\n' +
264
- 'XKDAbpBqpJFYz2Xx0bF+29whxdiMv9uEjkTBArQbL0E3PJgN1yH5WeXKoJi4D8r8\n' +
265
- 'nZuA3Ko1FgDHTMRiTSdAiD0UYlfFKa/g5PxG7wVxVcSRPIqOgBBfPkClF+hDmjmg\n' +
266
- 'NlHMfWHFWSOfjmrhKJf25jMCgYEAiDqfCECWAR2kyKu9RXn7CZLl95ki53W4eM5h\n' +
267
- 'tEyGRZ7Ik90N0QSHiaZt3lLC1KyDWckBPmqd4b5CJZSk8QS8Rr+nb93ffPclySCq\n' +
268
- 'OOG/GWcMKFOtvCNlO7gm3HprbN6v+ObOjVQp1OxVsTnW/exxVGzNVsPd67hKLqME\n' +
269
- '8NKaTmUCgYAdBEPSHuPesPXXYgsE9aaBjUwBEP5an9ZsdH4CAOgaJ+qi6lNpHow2\n' +
270
- 'O+9rSx/VldqwlnFj++6gPEdyVGw4NRnrO2kZvRoY7zrizmVZok1Kcv2fdThzWjWB\n' +
271
- '4fdduO1lx6pBaBa4LZbOIRCNsHXYLdOInjnOJC9RJ86lsGTWr1lH6A==\n' +
272
- '-----END RSA PRIVATE KEY-----',
273
- });
274
- const startTick = options.from.getTime() * 10000 + 621355968000000000;
275
- const start = `1;3;${options.listId};${startTick};-1`;
276
- return firstValueFrom(
277
- this.http.post<{ value: ListLog[] }>(
278
- `https://futuraitsrl.sharepoint.com/sites/hr/_api/web/Lists(guid'${options.listId}')/getChanges`,
279
- {
280
- query: {
281
- Add: true,
282
- Alert: true,
283
- DeleteObject: true,
284
- Update: true,
285
- Item: true,
286
- ChangeTokenStart: {
287
- StringValue: start,
288
- },
289
- },
290
- },
291
- {
292
- headers: {
293
- Authorization: `Bearer ${auth.accessToken}`,
294
- },
295
- },
296
- ),
297
- );
298
- };
299
- }