@pnp/nodejs 2.8.0 → 2.12.0

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.
@@ -1,107 +1,104 @@
1
- import { __awaiter, __extends, __generator } from "tslib";
2
- import { getGUID, isFunc, stringIsNullOrEmpty } from "@pnp/common";
3
- import { ODataParser, extendFactory, headers } from "@pnp/odata";
4
- import { File, Files } from "@pnp/sp/files/index.js";
5
- import { spPost, odataUrlFrom, escapeQueryStrValue } from "@pnp/sp";
6
- var StreamParser = /** @class */ (function (_super) {
7
- __extends(StreamParser, _super);
8
- function StreamParser() {
9
- return _super !== null && _super.apply(this, arguments) || this;
10
- }
11
- StreamParser.prototype.parseImpl = function (r, resolve) {
12
- resolve({ body: r.body, knownLength: parseInt(r.headers.get("content-length"), 10) });
13
- };
14
- return StreamParser;
15
- }(ODataParser));
16
- export { StreamParser };
17
- extendFactory(File, {
18
- getStream: function () {
19
- return this.clone(File, "$value", false).usingParser(new StreamParser())(headers({ "binaryStringResponseBody": "true" }));
20
- },
21
- /**
22
- * Sets the contents of a file using a chunked upload approach. Not supported in batching.
23
- *
24
- * @param stream The file to upload (as readable stream)
25
- * @param progress A callback function which can be used to track the progress of the upload
26
- * @param chunkSize The size of each file chunks, in bytes (default: 10485760)
27
- */
28
- setStreamContentChunked: function (stream, progress, chunkSize) {
29
- if (chunkSize === void 0) { chunkSize = 10485760; }
30
- return __awaiter(this, void 0, void 0, function () {
31
- var uploadId, blockNumber, currentPointer, fileSize, totalBlocks, chunkBuffer;
32
- return __generator(this, function (_a) {
33
- switch (_a.label) {
34
- case 0:
35
- if (!isFunc(progress)) {
36
- progress = function () { return null; };
37
- }
38
- uploadId = getGUID();
39
- blockNumber = 1;
40
- currentPointer = 0;
41
- fileSize = null;
42
- totalBlocks = null;
43
- chunkBuffer = null;
44
- _a.label = 1;
45
- case 1:
46
- if (!(null !== (chunkBuffer = stream.read(chunkSize)))) return [3 /*break*/, 6];
47
- if (!(currentPointer === 0)) return [3 /*break*/, 3];
48
- progress({ uploadId: uploadId, blockNumber: blockNumber, chunkSize: chunkSize, currentPointer: currentPointer, fileSize: fileSize, stage: "starting", totalBlocks: totalBlocks });
49
- return [4 /*yield*/, this.startUpload(uploadId, chunkBuffer)];
50
- case 2:
51
- _a.sent();
52
- return [3 /*break*/, 5];
53
- case 3:
54
- progress({ uploadId: uploadId, blockNumber: blockNumber, chunkSize: chunkSize, currentPointer: currentPointer, fileSize: fileSize, stage: "continue", totalBlocks: totalBlocks });
55
- return [4 /*yield*/, this.continueUpload(uploadId, currentPointer, chunkBuffer)];
56
- case 4:
57
- _a.sent();
58
- _a.label = 5;
59
- case 5:
60
- blockNumber += 1;
61
- currentPointer += chunkBuffer.length;
62
- return [3 /*break*/, 1];
63
- case 6:
64
- progress({ uploadId: uploadId, blockNumber: blockNumber, chunkSize: chunkSize, currentPointer: currentPointer, fileSize: fileSize, stage: "finishing", totalBlocks: totalBlocks });
65
- return [2 /*return*/, this.finishUpload(uploadId, currentPointer, Buffer.from([]))];
66
- }
67
- });
68
- });
69
- },
70
- });
71
- extendFactory(Files, {
72
- /**
73
- * Uploads a file. Not supported for batching
74
- *
75
- * @param url The folder-relative url of the file
76
- * @param content The Blob file content or File readable stream to add
77
- * @param progress A callback function which can be used to track the progress of the upload
78
- * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true)
79
- * @param chunkSize The size of each file slice, in bytes (default: 10485760)
80
- * @returns The new File and the raw response.
81
- */
82
- // @tag("fis.addChunked")
83
- addChunked: function (url, content, progress, shouldOverWrite, chunkSize) {
84
- if (shouldOverWrite === void 0) { shouldOverWrite = true; }
85
- if (chunkSize === void 0) { chunkSize = 10485760; }
86
- return __awaiter(this, void 0, void 0, function () {
87
- var response, odataUrl, file;
88
- return __generator(this, function (_a) {
89
- switch (_a.label) {
90
- case 0: return [4 /*yield*/, spPost(this.clone(Files, "add(overwrite=" + shouldOverWrite + ",url='" + escapeQueryStrValue(url) + "')", false))];
91
- case 1:
92
- response = _a.sent();
93
- odataUrl = odataUrlFrom(response);
94
- if (!stringIsNullOrEmpty(odataUrl) && /%27/i.test(odataUrl)) {
95
- odataUrl = odataUrl.replace(/%27/ig, "''");
96
- }
97
- file = File(odataUrl);
98
- if ("function" === typeof content.read) {
99
- return [2 /*return*/, file.setStreamContentChunked(content, progress, chunkSize)];
100
- }
101
- return [2 /*return*/, file.setContentChunked(content, progress, chunkSize)];
102
- }
103
- });
104
- });
105
- },
106
- });
1
+ import { __awaiter, __extends, __generator } from "tslib";
2
+ import { getGUID, isFunc, stringIsNullOrEmpty } from "@pnp/common";
3
+ import { ODataParser, extendFactory, headers } from "@pnp/odata";
4
+ import { File, Files } from "@pnp/sp/files/index.js";
5
+ import { spPost, odataUrlFrom, escapeQueryStrValue } from "@pnp/sp";
6
+ var StreamParser = /** @class */ (function (_super) {
7
+ __extends(StreamParser, _super);
8
+ function StreamParser() {
9
+ return _super !== null && _super.apply(this, arguments) || this;
10
+ }
11
+ StreamParser.prototype.parseImpl = function (r, resolve) {
12
+ resolve({ body: r.body, knownLength: parseInt(r.headers.get("content-length"), 10) });
13
+ };
14
+ return StreamParser;
15
+ }(ODataParser));
16
+ export { StreamParser };
17
+ extendFactory(File, {
18
+ getStream: function () {
19
+ return this.clone(File, "$value", false).usingParser(new StreamParser())(headers({ "binaryStringResponseBody": "true" }));
20
+ },
21
+ /**
22
+ * Sets the contents of a file using a chunked upload approach. Not supported in batching.
23
+ *
24
+ * @param stream The file to upload (as readable stream)
25
+ * @param progress A callback function which can be used to track the progress of the upload
26
+ * @param chunkSize The size of each file chunks, in bytes (default: 10485760)
27
+ */
28
+ setStreamContentChunked: function (stream, progress) {
29
+ return __awaiter(this, void 0, void 0, function () {
30
+ var uploadId, blockNumber, promise;
31
+ var _this = this;
32
+ return __generator(this, function (_a) {
33
+ if (!isFunc(progress)) {
34
+ progress = function () { return null; };
35
+ }
36
+ uploadId = getGUID();
37
+ blockNumber = -1;
38
+ promise = Promise.resolve(0);
39
+ return [2 /*return*/, new Promise(function (resolve) {
40
+ stream.on("data", function (chunk) {
41
+ blockNumber += 1;
42
+ if (blockNumber === 0) {
43
+ promise = promise.then(function () {
44
+ progress({ uploadId: uploadId, blockNumber: blockNumber, chunkSize: chunk.length, currentPointer: 0, fileSize: -1, stage: "starting", totalBlocks: -1 });
45
+ return File(_this).startUpload(uploadId, chunk);
46
+ });
47
+ }
48
+ else {
49
+ promise = promise.then(function (cp) {
50
+ progress({ uploadId: uploadId, blockNumber: blockNumber, chunkSize: chunk.length, currentPointer: cp, fileSize: -1, stage: "continue", totalBlocks: -1 });
51
+ return File(_this).continueUpload(uploadId, cp, chunk);
52
+ });
53
+ }
54
+ });
55
+ stream.on("end", function () { return __awaiter(_this, void 0, void 0, function () {
56
+ var _this = this;
57
+ return __generator(this, function (_a) {
58
+ progress({ uploadId: uploadId, blockNumber: blockNumber, chunkSize: -1, currentPointer: -1, fileSize: -1, stage: "finishing", totalBlocks: -1 });
59
+ promise.then(function (cp) { return resolve(File(_this).finishUpload(uploadId, cp, Buffer.from([]))); });
60
+ return [2 /*return*/];
61
+ });
62
+ }); });
63
+ })];
64
+ });
65
+ });
66
+ },
67
+ });
68
+ extendFactory(Files, {
69
+ /**
70
+ * Uploads a file. Not supported for batching
71
+ *
72
+ * @param url The folder-relative url of the file
73
+ * @param content The Blob file content or File readable stream to add
74
+ * @param progress A callback function which can be used to track the progress of the upload
75
+ * @param shouldOverWrite Should a file with the same name in the same location be overwritten? (default: true)
76
+ * @param chunkSize The size of each file slice, in bytes (default: 10485760)
77
+ * @returns The new File and the raw response.
78
+ */
79
+ // @tag("fis.addChunked")
80
+ addChunked: function (url, content, progress, shouldOverWrite, chunkSize) {
81
+ if (shouldOverWrite === void 0) { shouldOverWrite = true; }
82
+ if (chunkSize === void 0) { chunkSize = 10485760; }
83
+ return __awaiter(this, void 0, void 0, function () {
84
+ var response, odataUrl, file;
85
+ return __generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0: return [4 /*yield*/, spPost(this.clone(Files, "add(overwrite=" + shouldOverWrite + ",url='" + escapeQueryStrValue(url) + "')", false))];
88
+ case 1:
89
+ response = _a.sent();
90
+ odataUrl = odataUrlFrom(response);
91
+ if (!stringIsNullOrEmpty(odataUrl) && /%27/i.test(odataUrl)) {
92
+ odataUrl = odataUrl.replace(/%27/ig, "''");
93
+ }
94
+ file = File(odataUrl);
95
+ if ("function" === typeof content.read) {
96
+ return [2 /*return*/, file.setStreamContentChunked(content, progress, chunkSize)];
97
+ }
98
+ return [2 /*return*/, file.setContentChunked(content, progress, chunkSize)];
99
+ }
100
+ });
101
+ });
102
+ },
103
+ });
107
104
  //# sourceMappingURL=stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../../packages/nodejs/sp-extensions/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../../packages/nodejs/sp-extensions/stream.ts"],"names":[],"mappings":"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"}
package/sptokenutils.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { ITypedHash } from "@pnp/common";
2
- import { AuthToken } from "./types.js";
3
- export declare function validateProviderHostedRequestToken(requestToken: string, clientSecret: string): Promise<ITypedHash<string>>;
4
- /**
5
- * Gets an add-in only authentication token based on the supplied site url, client id and secret
6
- */
7
- export declare function getAddInOnlyAccessToken(siteUrl: string, clientId: string, clientSecret: string, realm: string, stsUri: string): Promise<AuthToken>;
8
- /**
9
- * Gets a user authentication token based on the supplied site url, client id, client secret, and refresh token
10
- */
11
- export declare function getUserAccessToken(siteUrl: string, clientId: string, clientSecret: string, refreshToken: string, realm: string, stsUri: string, cacheKey: string): Promise<AuthToken>;
1
+ import { ITypedHash } from "@pnp/common";
2
+ import { AuthToken } from "./types.js";
3
+ export declare function validateProviderHostedRequestToken(requestToken: string, clientSecret: string): Promise<ITypedHash<string>>;
4
+ /**
5
+ * Gets an add-in only authentication token based on the supplied site url, client id and secret
6
+ */
7
+ export declare function getAddInOnlyAccessToken(siteUrl: string, clientId: string, clientSecret: string, realm: string, stsUri: string): Promise<AuthToken>;
8
+ /**
9
+ * Gets a user authentication token based on the supplied site url, client id, client secret, and refresh token
10
+ */
11
+ export declare function getUserAccessToken(siteUrl: string, clientId: string, clientSecret: string, refreshToken: string, realm: string, stsUri: string, cacheKey: string): Promise<AuthToken>;
12
12
  //# sourceMappingURL=sptokenutils.d.ts.map
package/sptokenutils.js CHANGED
@@ -1,112 +1,112 @@
1
- import { __awaiter, __generator } from "tslib";
2
- import { parse } from "url";
3
- import * as jwt from "jsonwebtoken";
4
- import { SharePointServicePrincipal } from "./types.js";
5
- import { fetch } from "./net/fetch.js";
6
- var MapCacheManager = /** @class */ (function () {
7
- function MapCacheManager() {
8
- this.map = new Map();
9
- }
10
- MapCacheManager.prototype.getAccessToken = function (realm, cacheKey) {
11
- return this.map.get(this.buildKey(realm, cacheKey));
12
- };
13
- MapCacheManager.prototype.setAccessToken = function (realm, cacheKey, token) {
14
- this.map.set(this.buildKey(realm, cacheKey), token);
15
- };
16
- MapCacheManager.prototype.buildKey = function (realm, cacheKey) {
17
- return realm + ":" + cacheKey;
18
- };
19
- return MapCacheManager;
20
- }());
21
- var tokenCache = new MapCacheManager();
22
- export function validateProviderHostedRequestToken(requestToken, clientSecret) {
23
- return __awaiter(this, void 0, void 0, function () {
24
- return __generator(this, function (_a) {
25
- return [2 /*return*/, new Promise(function (resolve, reject) {
26
- var secret = Buffer.from(clientSecret, "base64");
27
- jwt.verify(requestToken, secret, function (err, decoded) {
28
- if (err) {
29
- return reject(err);
30
- }
31
- resolve(decoded);
32
- });
33
- })];
34
- });
35
- });
36
- }
37
- /**
38
- * Gets an add-in only authentication token based on the supplied site url, client id and secret
39
- */
40
- export function getAddInOnlyAccessToken(siteUrl, clientId, clientSecret, realm, stsUri) {
41
- return __awaiter(this, void 0, void 0, function () {
42
- return __generator(this, function (_a) {
43
- return [2 /*return*/, getTokenInternal({ siteUrl: siteUrl, clientId: clientId, clientSecret: clientSecret, refreshToken: null, realm: realm, stsUri: stsUri, cacheKey: "addinonly:" + clientId })];
44
- });
45
- });
46
- }
47
- /**
48
- * Gets a user authentication token based on the supplied site url, client id, client secret, and refresh token
49
- */
50
- // eslint-disable-next-line max-len
51
- export function getUserAccessToken(siteUrl, clientId, clientSecret, refreshToken, realm, stsUri, cacheKey) {
52
- return getTokenInternal({ siteUrl: siteUrl, clientId: clientId, clientSecret: clientSecret, refreshToken: refreshToken, realm: realm, stsUri: stsUri, cacheKey: "user:" + cacheKey });
53
- }
54
- function getTokenInternal(params) {
55
- return __awaiter(this, void 0, void 0, function () {
56
- var accessToken, resource, formattedClientId, body, r;
57
- return __generator(this, function (_a) {
58
- switch (_a.label) {
59
- case 0:
60
- accessToken = tokenCache.getAccessToken(params.realm, params.cacheKey);
61
- if (accessToken && new Date() < toDate(accessToken.expires_on)) {
62
- return [2 /*return*/, accessToken];
63
- }
64
- resource = getFormattedPrincipal(SharePointServicePrincipal, parse(params.siteUrl).hostname, params.realm);
65
- formattedClientId = getFormattedPrincipal(params.clientId, "", params.realm);
66
- body = [];
67
- if (params.refreshToken) {
68
- body.push("grant_type=refresh_token");
69
- body.push("refresh_token=" + encodeURIComponent(params.refreshToken));
70
- }
71
- else {
72
- body.push("grant_type=client_credentials");
73
- }
74
- body.push("client_id=" + formattedClientId);
75
- body.push("client_secret=" + encodeURIComponent(params.clientSecret));
76
- body.push("resource=" + resource);
77
- return [4 /*yield*/, fetch(params.stsUri, {
78
- body: body.join("&"),
79
- headers: {
80
- "Content-Type": "application/x-www-form-urlencoded",
81
- },
82
- method: "POST",
83
- })];
84
- case 1:
85
- r = _a.sent();
86
- return [4 /*yield*/, r.json()];
87
- case 2:
88
- accessToken = _a.sent();
89
- tokenCache.setAccessToken(params.realm, params.cacheKey, accessToken);
90
- return [2 /*return*/, accessToken];
91
- }
92
- });
93
- });
94
- }
95
- function getFormattedPrincipal(principalName, hostName, realm) {
96
- var resource = principalName;
97
- if (hostName !== null && hostName !== "") {
98
- resource += "/" + hostName;
99
- }
100
- resource += "@" + realm;
101
- return resource;
102
- }
103
- function toDate(epoch) {
104
- var tmp = parseInt(epoch, 10);
105
- if (tmp < 10000000000) {
106
- tmp *= 1000;
107
- }
108
- var d = new Date();
109
- d.setTime(tmp);
110
- return d;
111
- }
1
+ import { __awaiter, __generator } from "tslib";
2
+ import { parse } from "url";
3
+ import * as jwt from "jsonwebtoken";
4
+ import { SharePointServicePrincipal } from "./types.js";
5
+ import { fetch } from "./net/fetch.js";
6
+ var MapCacheManager = /** @class */ (function () {
7
+ function MapCacheManager() {
8
+ this.map = new Map();
9
+ }
10
+ MapCacheManager.prototype.getAccessToken = function (realm, cacheKey) {
11
+ return this.map.get(this.buildKey(realm, cacheKey));
12
+ };
13
+ MapCacheManager.prototype.setAccessToken = function (realm, cacheKey, token) {
14
+ this.map.set(this.buildKey(realm, cacheKey), token);
15
+ };
16
+ MapCacheManager.prototype.buildKey = function (realm, cacheKey) {
17
+ return realm + ":" + cacheKey;
18
+ };
19
+ return MapCacheManager;
20
+ }());
21
+ var tokenCache = new MapCacheManager();
22
+ export function validateProviderHostedRequestToken(requestToken, clientSecret) {
23
+ return __awaiter(this, void 0, void 0, function () {
24
+ return __generator(this, function (_a) {
25
+ return [2 /*return*/, new Promise(function (resolve, reject) {
26
+ var secret = Buffer.from(clientSecret, "base64");
27
+ jwt.verify(requestToken, secret, function (err, decoded) {
28
+ if (err) {
29
+ return reject(err);
30
+ }
31
+ resolve(decoded);
32
+ });
33
+ })];
34
+ });
35
+ });
36
+ }
37
+ /**
38
+ * Gets an add-in only authentication token based on the supplied site url, client id and secret
39
+ */
40
+ export function getAddInOnlyAccessToken(siteUrl, clientId, clientSecret, realm, stsUri) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ return __generator(this, function (_a) {
43
+ return [2 /*return*/, getTokenInternal({ siteUrl: siteUrl, clientId: clientId, clientSecret: clientSecret, refreshToken: null, realm: realm, stsUri: stsUri, cacheKey: "addinonly:" + clientId })];
44
+ });
45
+ });
46
+ }
47
+ /**
48
+ * Gets a user authentication token based on the supplied site url, client id, client secret, and refresh token
49
+ */
50
+ // eslint-disable-next-line max-len
51
+ export function getUserAccessToken(siteUrl, clientId, clientSecret, refreshToken, realm, stsUri, cacheKey) {
52
+ return getTokenInternal({ siteUrl: siteUrl, clientId: clientId, clientSecret: clientSecret, refreshToken: refreshToken, realm: realm, stsUri: stsUri, cacheKey: "user:" + cacheKey });
53
+ }
54
+ function getTokenInternal(params) {
55
+ return __awaiter(this, void 0, void 0, function () {
56
+ var accessToken, resource, formattedClientId, body, r;
57
+ return __generator(this, function (_a) {
58
+ switch (_a.label) {
59
+ case 0:
60
+ accessToken = tokenCache.getAccessToken(params.realm, params.cacheKey);
61
+ if (accessToken && new Date() < toDate(accessToken.expires_on)) {
62
+ return [2 /*return*/, accessToken];
63
+ }
64
+ resource = getFormattedPrincipal(SharePointServicePrincipal, parse(params.siteUrl).hostname, params.realm);
65
+ formattedClientId = getFormattedPrincipal(params.clientId, "", params.realm);
66
+ body = [];
67
+ if (params.refreshToken) {
68
+ body.push("grant_type=refresh_token");
69
+ body.push("refresh_token=" + encodeURIComponent(params.refreshToken));
70
+ }
71
+ else {
72
+ body.push("grant_type=client_credentials");
73
+ }
74
+ body.push("client_id=" + formattedClientId);
75
+ body.push("client_secret=" + encodeURIComponent(params.clientSecret));
76
+ body.push("resource=" + resource);
77
+ return [4 /*yield*/, fetch(params.stsUri, {
78
+ body: body.join("&"),
79
+ headers: {
80
+ "Content-Type": "application/x-www-form-urlencoded",
81
+ },
82
+ method: "POST",
83
+ })];
84
+ case 1:
85
+ r = _a.sent();
86
+ return [4 /*yield*/, r.json()];
87
+ case 2:
88
+ accessToken = _a.sent();
89
+ tokenCache.setAccessToken(params.realm, params.cacheKey, accessToken);
90
+ return [2 /*return*/, accessToken];
91
+ }
92
+ });
93
+ });
94
+ }
95
+ function getFormattedPrincipal(principalName, hostName, realm) {
96
+ var resource = principalName;
97
+ if (hostName !== null && hostName !== "") {
98
+ resource += "/" + hostName;
99
+ }
100
+ resource += "@" + realm;
101
+ return resource;
102
+ }
103
+ function toDate(epoch) {
104
+ var tmp = parseInt(epoch, 10);
105
+ if (tmp < 10000000000) {
106
+ tmp *= 1000;
107
+ }
108
+ var d = new Date();
109
+ d.setTime(tmp);
110
+ return d;
111
+ }
112
112
  //# sourceMappingURL=sptokenutils.js.map
package/types.d.ts CHANGED
@@ -1,34 +1,34 @@
1
- export declare const SharePointServicePrincipal = "00000003-0000-0ff1-ce00-000000000000";
2
- export interface AADToken {
3
- accessToken: string;
4
- expiresIn: number;
5
- expiresOn: string | Date;
6
- isMRRT?: boolean;
7
- resource: string;
8
- tokenType: string;
9
- }
10
- export declare enum SPOAuthEnv {
11
- SPO = 0,
12
- China = 1,
13
- Germany = 2,
14
- USDef = 3,
15
- USGov = 4
16
- }
17
- export interface AuthToken {
18
- token_type: string;
19
- expires_in: string;
20
- not_before: string;
21
- expires_on: string;
22
- resource: string;
23
- access_token: string;
24
- }
25
- export interface ProviderHostedConfigurationOptions {
26
- headers: {
27
- Authorization: string;
28
- };
29
- }
30
- export interface ITokenCacheManager {
31
- getAccessToken(realm: string, cacheKey: string): AuthToken;
32
- setAccessToken(realm: string, cacheKey: string, token: AuthToken): void;
33
- }
1
+ export declare const SharePointServicePrincipal = "00000003-0000-0ff1-ce00-000000000000";
2
+ export interface AADToken {
3
+ accessToken: string;
4
+ expiresIn: number;
5
+ expiresOn: string | Date;
6
+ isMRRT?: boolean;
7
+ resource: string;
8
+ tokenType: string;
9
+ }
10
+ export declare enum SPOAuthEnv {
11
+ SPO = 0,
12
+ China = 1,
13
+ Germany = 2,
14
+ USDef = 3,
15
+ USGov = 4
16
+ }
17
+ export interface AuthToken {
18
+ token_type: string;
19
+ expires_in: string;
20
+ not_before: string;
21
+ expires_on: string;
22
+ resource: string;
23
+ access_token: string;
24
+ }
25
+ export interface ProviderHostedConfigurationOptions {
26
+ headers: {
27
+ Authorization: string;
28
+ };
29
+ }
30
+ export interface ITokenCacheManager {
31
+ getAccessToken(realm: string, cacheKey: string): AuthToken;
32
+ setAccessToken(realm: string, cacheKey: string, token: AuthToken): void;
33
+ }
34
34
  //# sourceMappingURL=types.d.ts.map
package/types.js CHANGED
@@ -1,10 +1,10 @@
1
- export var SharePointServicePrincipal = "00000003-0000-0ff1-ce00-000000000000";
2
- export var SPOAuthEnv;
3
- (function (SPOAuthEnv) {
4
- SPOAuthEnv[SPOAuthEnv["SPO"] = 0] = "SPO";
5
- SPOAuthEnv[SPOAuthEnv["China"] = 1] = "China";
6
- SPOAuthEnv[SPOAuthEnv["Germany"] = 2] = "Germany";
7
- SPOAuthEnv[SPOAuthEnv["USDef"] = 3] = "USDef";
8
- SPOAuthEnv[SPOAuthEnv["USGov"] = 4] = "USGov";
9
- })(SPOAuthEnv || (SPOAuthEnv = {}));
1
+ export var SharePointServicePrincipal = "00000003-0000-0ff1-ce00-000000000000";
2
+ export var SPOAuthEnv;
3
+ (function (SPOAuthEnv) {
4
+ SPOAuthEnv[SPOAuthEnv["SPO"] = 0] = "SPO";
5
+ SPOAuthEnv[SPOAuthEnv["China"] = 1] = "China";
6
+ SPOAuthEnv[SPOAuthEnv["Germany"] = 2] = "Germany";
7
+ SPOAuthEnv[SPOAuthEnv["USDef"] = 3] = "USDef";
8
+ SPOAuthEnv[SPOAuthEnv["USGov"] = 4] = "USGov";
9
+ })(SPOAuthEnv || (SPOAuthEnv = {}));
10
10
  //# sourceMappingURL=types.js.map