@azure/msal-node-extensions 1.0.0-alpha.9 → 1.0.0-beta.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.
- package/README.md +174 -8
- package/bin/arm64/dpapi.node +0 -0
- package/bin/ia32/dpapi.node +0 -0
- package/bin/x64/dpapi.node +0 -0
- package/dist/{dpapi-addon/Dpapi.d.ts → Dpapi.d.ts} +4 -4
- package/dist/Dpapi.esm.js +24 -0
- package/dist/Dpapi.esm.js.map +1 -0
- package/dist/Dpapi.js +24 -0
- package/dist/Dpapi.js.map +1 -0
- package/dist/broker/NativeBrokerPlugin.d.ts +20 -0
- package/dist/broker/NativeBrokerPlugin.esm.js +408 -0
- package/dist/broker/NativeBrokerPlugin.esm.js.map +1 -0
- package/dist/broker/NativeBrokerPlugin.js +410 -0
- package/dist/broker/NativeBrokerPlugin.js.map +1 -0
- package/dist/error/NativeAuthError.d.ts +6 -0
- package/dist/error/NativeAuthError.esm.js +20 -0
- package/dist/error/NativeAuthError.esm.js.map +1 -0
- package/dist/error/NativeAuthError.js +22 -0
- package/dist/error/NativeAuthError.js.map +1 -0
- package/dist/error/PersistenceError.esm.js +89 -0
- package/dist/error/PersistenceError.esm.js.map +1 -0
- package/{src/error/PersistenceError.ts → dist/error/PersistenceError.js} +23 -33
- package/dist/error/PersistenceError.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +12 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +24 -6
- package/dist/index.js.map +1 -0
- package/dist/lock/CrossPlatformLock.esm.js +94 -0
- package/dist/lock/CrossPlatformLock.esm.js.map +1 -0
- package/dist/lock/CrossPlatformLock.js +96 -0
- package/dist/lock/CrossPlatformLock.js.map +1 -0
- package/dist/lock/CrossPlatformLockOptions.d.ts +1 -1
- package/dist/packageMetadata.d.ts +2 -0
- package/dist/packageMetadata.esm.js +8 -0
- package/dist/packageMetadata.esm.js.map +1 -0
- package/dist/packageMetadata.js +11 -0
- package/dist/packageMetadata.js.map +1 -0
- package/{src/persistence/BasePersistence.ts → dist/persistence/BasePersistence.esm.js} +18 -23
- package/dist/persistence/BasePersistence.esm.js.map +1 -0
- package/dist/persistence/BasePersistence.js +38 -0
- package/dist/persistence/BasePersistence.js.map +1 -0
- package/dist/persistence/DataProtectionScope.d.ts +5 -4
- package/{src/persistence/DataProtectionScope.ts → dist/persistence/DataProtectionScope.esm.js} +9 -5
- package/dist/persistence/DataProtectionScope.esm.js.map +1 -0
- package/dist/persistence/DataProtectionScope.js +26 -0
- package/dist/persistence/DataProtectionScope.js.map +1 -0
- package/dist/persistence/FilePersistence.d.ts +1 -0
- package/dist/persistence/FilePersistence.esm.js +173 -0
- package/dist/persistence/FilePersistence.esm.js.map +1 -0
- package/dist/persistence/FilePersistence.js +175 -0
- package/dist/persistence/FilePersistence.js.map +1 -0
- package/dist/persistence/FilePersistenceWithDataProtection.esm.js +84 -0
- package/dist/persistence/FilePersistenceWithDataProtection.esm.js.map +1 -0
- package/dist/persistence/FilePersistenceWithDataProtection.js +86 -0
- package/dist/persistence/FilePersistenceWithDataProtection.js.map +1 -0
- package/dist/persistence/IPersistenceConfiguration.d.ts +2 -0
- package/dist/persistence/KeychainPersistence.d.ts +2 -2
- package/dist/persistence/KeychainPersistence.esm.js +90 -0
- package/dist/persistence/KeychainPersistence.esm.js.map +1 -0
- package/dist/persistence/KeychainPersistence.js +92 -0
- package/dist/persistence/KeychainPersistence.js.map +1 -0
- package/dist/persistence/LibSecretPersistence.d.ts +2 -2
- package/dist/persistence/LibSecretPersistence.esm.js +91 -0
- package/dist/persistence/LibSecretPersistence.esm.js.map +1 -0
- package/dist/persistence/LibSecretPersistence.js +93 -0
- package/dist/persistence/LibSecretPersistence.js.map +1 -0
- package/dist/persistence/PersistenceCachePlugin.d.ts +1 -1
- package/{src/persistence/PersistenceCachePlugin.ts → dist/persistence/PersistenceCachePlugin.esm.js} +27 -34
- package/dist/persistence/PersistenceCachePlugin.esm.js.map +1 -0
- package/dist/persistence/PersistenceCachePlugin.js +101 -0
- package/dist/persistence/PersistenceCachePlugin.js.map +1 -0
- package/dist/persistence/PersistenceCreator.d.ts +1 -1
- package/dist/persistence/PersistenceCreator.esm.js +63 -0
- package/dist/persistence/PersistenceCreator.esm.js.map +1 -0
- package/dist/persistence/PersistenceCreator.js +65 -0
- package/dist/persistence/PersistenceCreator.js.map +1 -0
- package/dist/utils/Constants.d.ts +12 -5
- package/{src/utils/Constants.ts → dist/utils/Constants.esm.js} +17 -17
- package/dist/utils/Constants.esm.js.map +1 -0
- package/dist/utils/Constants.js +66 -0
- package/dist/utils/Constants.js.map +1 -0
- package/dist/utils/Environment.d.ts +1 -1
- package/{src/utils/Environment.ts → dist/utils/Environment.esm.js} +44 -49
- package/dist/utils/Environment.esm.js.map +1 -0
- package/dist/utils/Environment.js +96 -0
- package/dist/utils/Environment.js.map +1 -0
- package/dist/utils/TypeGuards.d.ts +5 -0
- package/dist/utils/TypeGuards.esm.js +16 -0
- package/dist/utils/TypeGuards.esm.js.map +1 -0
- package/dist/utils/TypeGuards.js +18 -0
- package/dist/utils/TypeGuards.js.map +1 -0
- package/package.json +70 -52
- package/CHANGELOG.json +0 -167
- package/binding.gyp +0 -29
- package/changelog.md +0 -77
- package/dist/msal-node-extensions.cjs.development.js +0 -902
- package/dist/msal-node-extensions.cjs.development.js.map +0 -1
- package/dist/msal-node-extensions.cjs.production.min.js +0 -2
- package/dist/msal-node-extensions.cjs.production.min.js.map +0 -1
- package/dist/msal-node-extensions.esm.js +0 -902
- package/dist/msal-node-extensions.esm.js.map +0 -1
- package/src/dpapi-addon/Dpapi.ts +0 -12
- package/src/dpapi-addon/dpapi_addon.h +0 -6
- package/src/dpapi-addon/dpapi_not_supported.cpp +0 -19
- package/src/dpapi-addon/dpapi_win.cpp +0 -114
- package/src/dpapi-addon/main.cpp +0 -32
- package/src/index.ts +0 -16
- package/src/lock/CrossPlatformLock.ts +0 -89
- package/src/lock/CrossPlatformLockOptions.ts +0 -15
- package/src/persistence/FilePersistence.ts +0 -140
- package/src/persistence/FilePersistenceWithDataProtection.ts +0 -92
- package/src/persistence/IPersistence.ts +0 -17
- package/src/persistence/IPersistenceConfiguration.ts +0 -14
- package/src/persistence/KeychainPersistence.ts +0 -86
- package/src/persistence/LibSecretPersistence.ts +0 -87
- package/src/persistence/PersistenceCreator.ts +0 -73
|
@@ -1,101 +1,91 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
1
5
|
/*
|
|
2
6
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
7
|
* Licensed under the MIT License.
|
|
4
8
|
*/
|
|
5
|
-
|
|
6
9
|
/**
|
|
7
10
|
* Error thrown when trying to write MSAL cache to persistence.
|
|
8
11
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
// Short string denoting error
|
|
12
|
-
errorCode: string;
|
|
13
|
-
// Detailed description of error
|
|
14
|
-
errorMessage: string;
|
|
15
|
-
|
|
16
|
-
constructor(errorCode: string, errorMessage: string) {
|
|
12
|
+
class PersistenceError extends Error {
|
|
13
|
+
constructor(errorCode, errorMessage) {
|
|
17
14
|
const errorString = errorMessage ? `${errorCode}: ${errorMessage}` : errorCode;
|
|
18
15
|
super(errorString);
|
|
19
16
|
Object.setPrototypeOf(this, PersistenceError.prototype);
|
|
20
|
-
|
|
21
17
|
this.errorCode = errorCode;
|
|
22
18
|
this.errorMessage = errorMessage;
|
|
23
19
|
this.name = "PersistenceError";
|
|
24
20
|
}
|
|
25
|
-
|
|
26
21
|
/**
|
|
27
22
|
* Error thrown when trying to access the file system.
|
|
28
23
|
*/
|
|
29
|
-
static createFileSystemError(errorCode
|
|
24
|
+
static createFileSystemError(errorCode, errorMessage) {
|
|
30
25
|
return new PersistenceError(errorCode, errorMessage);
|
|
31
26
|
}
|
|
32
|
-
|
|
33
27
|
/**
|
|
34
28
|
* Error thrown when trying to write, load, or delete data from secret service on linux.
|
|
35
29
|
* Libsecret is used to access secret service.
|
|
36
30
|
*/
|
|
37
|
-
static createLibSecretError(errorMessage
|
|
31
|
+
static createLibSecretError(errorMessage) {
|
|
38
32
|
return new PersistenceError("GnomeKeyringError", errorMessage);
|
|
39
33
|
}
|
|
40
|
-
|
|
41
34
|
/**
|
|
42
35
|
* Error thrown when trying to write, load, or delete data from keychain on macOs.
|
|
43
36
|
*/
|
|
44
|
-
static createKeychainPersistenceError(errorMessage
|
|
37
|
+
static createKeychainPersistenceError(errorMessage) {
|
|
45
38
|
return new PersistenceError("KeychainError", errorMessage);
|
|
46
39
|
}
|
|
47
|
-
|
|
48
40
|
/**
|
|
49
41
|
* Error thrown when trying to encrypt or decrypt data using DPAPI on Windows.
|
|
50
42
|
*/
|
|
51
|
-
static createFilePersistenceWithDPAPIError(errorMessage
|
|
43
|
+
static createFilePersistenceWithDPAPIError(errorMessage) {
|
|
52
44
|
return new PersistenceError("DPAPIEncryptedFileError", errorMessage);
|
|
53
45
|
}
|
|
54
|
-
|
|
55
46
|
/**
|
|
56
47
|
* Error thrown when using the cross platform lock.
|
|
57
48
|
*/
|
|
58
|
-
static createCrossPlatformLockError(errorMessage
|
|
49
|
+
static createCrossPlatformLockError(errorMessage) {
|
|
59
50
|
return new PersistenceError("CrossPlatformLockError", errorMessage);
|
|
60
51
|
}
|
|
61
|
-
|
|
62
52
|
/**
|
|
63
53
|
* Throw cache persistence error
|
|
64
|
-
*
|
|
54
|
+
*
|
|
65
55
|
* @param errorMessage string
|
|
66
56
|
* @returns PersistenceError
|
|
67
57
|
*/
|
|
68
|
-
static createCachePersistenceError(errorMessage
|
|
58
|
+
static createCachePersistenceError(errorMessage) {
|
|
69
59
|
return new PersistenceError("CachePersistenceError", errorMessage);
|
|
70
60
|
}
|
|
71
|
-
|
|
72
61
|
/**
|
|
73
62
|
* Throw unsupported error
|
|
74
|
-
*
|
|
63
|
+
*
|
|
75
64
|
* @param errorMessage string
|
|
76
65
|
* @returns PersistenceError
|
|
77
66
|
*/
|
|
78
|
-
static createNotSupportedError(errorMessage
|
|
67
|
+
static createNotSupportedError(errorMessage) {
|
|
79
68
|
return new PersistenceError("NotSupportedError", errorMessage);
|
|
80
69
|
}
|
|
81
|
-
|
|
82
70
|
/**
|
|
83
71
|
* Throw persistence not verified error
|
|
84
|
-
*
|
|
72
|
+
*
|
|
85
73
|
* @param errorMessage string
|
|
86
74
|
* @returns PersistenceError
|
|
87
75
|
*/
|
|
88
|
-
static createPersistenceNotVerifiedError(errorMessage
|
|
76
|
+
static createPersistenceNotVerifiedError(errorMessage) {
|
|
89
77
|
return new PersistenceError("PersistenceNotVerifiedError", errorMessage);
|
|
90
78
|
}
|
|
91
|
-
|
|
92
79
|
/**
|
|
93
80
|
* Throw persistence creation validation error
|
|
94
|
-
*
|
|
81
|
+
*
|
|
95
82
|
* @param errorMessage string
|
|
96
83
|
* @returns PersistenceError
|
|
97
84
|
*/
|
|
98
|
-
static createPersistenceNotValidatedError(errorMessage
|
|
85
|
+
static createPersistenceNotValidatedError(errorMessage) {
|
|
99
86
|
return new PersistenceError("PersistenceNotValidatedError", errorMessage);
|
|
100
87
|
}
|
|
101
|
-
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
exports.PersistenceError = PersistenceError;
|
|
91
|
+
//# sourceMappingURL=PersistenceError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersistenceError.js","sources":["../../src/error/PersistenceError.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAAA;;;AAGG;AAEH;;AAEG;AACG,MAAO,gBAAiB,SAAQ,KAAK,CAAA;IAOvC,WAAY,CAAA,SAAiB,EAAE,YAAoB,EAAA;AAC/C,QAAA,MAAM,WAAW,GAAG,YAAY,GAAG,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,YAAY,CAAE,CAAA,GAAG,SAAS,CAAC;QAC/E,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAExD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;KAClC;AAED;;AAEG;AACH,IAAA,OAAO,qBAAqB,CAAC,SAAiB,EAAE,YAAoB,EAAA;AAChE,QAAA,OAAO,IAAI,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;KACxD;AAED;;;AAGG;IACH,OAAO,oBAAoB,CAAC,YAAoB,EAAA;AAC5C,QAAA,OAAO,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;KAClE;AAED;;AAEG;IACH,OAAO,8BAA8B,CAAC,YAAoB,EAAA;AACtD,QAAA,OAAO,IAAI,gBAAgB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;KAC9D;AAED;;AAEG;IACH,OAAO,mCAAmC,CAAC,YAAoB,EAAA;AAC3D,QAAA,OAAO,IAAI,gBAAgB,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;KACxE;AAED;;AAEG;IACH,OAAO,4BAA4B,CAAC,YAAoB,EAAA;AACpD,QAAA,OAAO,IAAI,gBAAgB,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;KACvE;AAED;;;;;AAKG;IACH,OAAO,2BAA2B,CAAC,YAAoB,EAAA;AACnD,QAAA,OAAO,IAAI,gBAAgB,CAAC,uBAAuB,EAAE,YAAY,CAAC,CAAC;KACtE;AAED;;;;;AAKG;IACH,OAAO,uBAAuB,CAAC,YAAoB,EAAA;AAC/C,QAAA,OAAO,IAAI,gBAAgB,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;KAClE;AAED;;;;;AAKG;IACH,OAAO,iCAAiC,CAAC,YAAoB,EAAA;AACzD,QAAA,OAAO,IAAI,gBAAgB,CAAC,6BAA6B,EAAE,YAAY,CAAC,CAAC;KAC5E;AAED;;;;;AAKG;IACH,OAAO,kCAAkC,CAAC,YAAoB,EAAA;AAC1D,QAAA,OAAO,IAAI,gBAAgB,CAAC,8BAA8B,EAAE,YAAY,CAAC,CAAC;KAC7E;AACJ;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,3 +9,4 @@ export { CrossPlatformLockOptions } from "./lock/CrossPlatformLockOptions";
|
|
|
9
9
|
export { PersistenceCreator } from "./persistence/PersistenceCreator";
|
|
10
10
|
export { IPersistenceConfiguration } from "./persistence/IPersistenceConfiguration";
|
|
11
11
|
export { Environment } from "./utils/Environment";
|
|
12
|
+
export { NativeBrokerPlugin } from "./broker/NativeBrokerPlugin";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
export { PersistenceCachePlugin } from './persistence/PersistenceCachePlugin.esm.js';
|
|
4
|
+
export { FilePersistence } from './persistence/FilePersistence.esm.js';
|
|
5
|
+
export { FilePersistenceWithDataProtection } from './persistence/FilePersistenceWithDataProtection.esm.js';
|
|
6
|
+
export { DataProtectionScope } from './persistence/DataProtectionScope.esm.js';
|
|
7
|
+
export { KeychainPersistence } from './persistence/KeychainPersistence.esm.js';
|
|
8
|
+
export { LibSecretPersistence } from './persistence/LibSecretPersistence.esm.js';
|
|
9
|
+
export { PersistenceCreator } from './persistence/PersistenceCreator.esm.js';
|
|
10
|
+
export { Environment } from './utils/Environment.esm.js';
|
|
11
|
+
export { NativeBrokerPlugin } from './broker/NativeBrokerPlugin.esm.js';
|
|
12
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,26 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
'use strict';
|
|
1
4
|
|
|
2
|
-
|
|
5
|
+
var PersistenceCachePlugin = require('./persistence/PersistenceCachePlugin.js');
|
|
6
|
+
var FilePersistence = require('./persistence/FilePersistence.js');
|
|
7
|
+
var FilePersistenceWithDataProtection = require('./persistence/FilePersistenceWithDataProtection.js');
|
|
8
|
+
var DataProtectionScope = require('./persistence/DataProtectionScope.js');
|
|
9
|
+
var KeychainPersistence = require('./persistence/KeychainPersistence.js');
|
|
10
|
+
var LibSecretPersistence = require('./persistence/LibSecretPersistence.js');
|
|
11
|
+
var PersistenceCreator = require('./persistence/PersistenceCreator.js');
|
|
12
|
+
var Environment = require('./utils/Environment.js');
|
|
13
|
+
var NativeBrokerPlugin = require('./broker/NativeBrokerPlugin.js');
|
|
3
14
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
exports.PersistenceCachePlugin = PersistenceCachePlugin.PersistenceCachePlugin;
|
|
18
|
+
exports.FilePersistence = FilePersistence.FilePersistence;
|
|
19
|
+
exports.FilePersistenceWithDataProtection = FilePersistenceWithDataProtection.FilePersistenceWithDataProtection;
|
|
20
|
+
exports.DataProtectionScope = DataProtectionScope.DataProtectionScope;
|
|
21
|
+
exports.KeychainPersistence = KeychainPersistence.KeychainPersistence;
|
|
22
|
+
exports.LibSecretPersistence = LibSecretPersistence.LibSecretPersistence;
|
|
23
|
+
exports.PersistenceCreator = PersistenceCreator.PersistenceCreator;
|
|
24
|
+
exports.Environment = Environment.Environment;
|
|
25
|
+
exports.NativeBrokerPlugin = NativeBrokerPlugin.NativeBrokerPlugin;
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
import { promises } from 'fs';
|
|
4
|
+
import { pid } from 'process';
|
|
5
|
+
import { Constants } from '../utils/Constants.esm.js';
|
|
6
|
+
import { PersistenceError } from '../error/PersistenceError.esm.js';
|
|
7
|
+
import { isNodeError } from '../utils/TypeGuards.esm.js';
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
11
|
+
* Licensed under the MIT License.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Cross-process lock that works on all platforms.
|
|
15
|
+
*/
|
|
16
|
+
class CrossPlatformLock {
|
|
17
|
+
constructor(lockFilePath, logger, lockOptions) {
|
|
18
|
+
this.lockFilePath = lockFilePath;
|
|
19
|
+
this.retryNumber = lockOptions ? lockOptions.retryNumber : 500;
|
|
20
|
+
this.retryDelay = lockOptions ? lockOptions.retryDelay : 100;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Locks cache from read or writes by creating file with same path and name as
|
|
25
|
+
* cache file but with .lockfile extension. If another process has already created
|
|
26
|
+
* the lockfile, will back off and retry based on configuration settings set by CrossPlatformLockOptions
|
|
27
|
+
*/
|
|
28
|
+
async lock() {
|
|
29
|
+
for (let tryCount = 0; tryCount < this.retryNumber; tryCount++) {
|
|
30
|
+
try {
|
|
31
|
+
this.logger.info(`Pid ${pid} trying to acquire lock`);
|
|
32
|
+
this.lockFileHandle = await promises.open(this.lockFilePath, "wx+");
|
|
33
|
+
this.logger.info(`Pid ${pid} acquired lock`);
|
|
34
|
+
await this.lockFileHandle.write(pid.toString());
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
if (isNodeError(err)) {
|
|
39
|
+
if (err.code === Constants.EEXIST_ERROR || err.code === Constants.EPERM_ERROR) {
|
|
40
|
+
this.logger.info(err.message);
|
|
41
|
+
await this.sleep(this.retryDelay);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.logger.error(`${pid} was not able to acquire lock. Ran into error: ${err.message}`);
|
|
45
|
+
throw PersistenceError.createCrossPlatformLockError(err.message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
this.logger.error(`${pid} was not able to acquire lock. Exceeded amount of retries set in the options`);
|
|
54
|
+
throw PersistenceError.createCrossPlatformLockError("Not able to acquire lock. Exceeded amount of retries set in options");
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* unlocks cache file by deleting .lockfile.
|
|
58
|
+
*/
|
|
59
|
+
async unlock() {
|
|
60
|
+
try {
|
|
61
|
+
if (this.lockFileHandle) {
|
|
62
|
+
// if we have a file handle to the .lockfile, delete lock file
|
|
63
|
+
await promises.unlink(this.lockFilePath);
|
|
64
|
+
await this.lockFileHandle.close();
|
|
65
|
+
this.logger.info("lockfile deleted");
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.logger.warning("lockfile handle does not exist, so lockfile could not be deleted");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
if (isNodeError(err)) {
|
|
73
|
+
if (err.code === Constants.ENOENT_ERROR) {
|
|
74
|
+
this.logger.info("Tried to unlock but lockfile does not exist");
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.logger.error(`${pid} was not able to release lock. Ran into error: ${err.message}`);
|
|
78
|
+
throw PersistenceError.createCrossPlatformLockError(err.message);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
throw err;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
sleep(ms) {
|
|
87
|
+
return new Promise((resolve) => {
|
|
88
|
+
setTimeout(resolve, ms);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { CrossPlatformLock };
|
|
94
|
+
//# sourceMappingURL=CrossPlatformLock.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrossPlatformLock.esm.js","sources":["../../src/lock/CrossPlatformLock.ts"],"sourcesContent":[null],"names":["fs"],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
var fs = require('fs');
|
|
6
|
+
var process = require('process');
|
|
7
|
+
var Constants = require('../utils/Constants.js');
|
|
8
|
+
var PersistenceError = require('../error/PersistenceError.js');
|
|
9
|
+
var TypeGuards = require('../utils/TypeGuards.js');
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
13
|
+
* Licensed under the MIT License.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Cross-process lock that works on all platforms.
|
|
17
|
+
*/
|
|
18
|
+
class CrossPlatformLock {
|
|
19
|
+
constructor(lockFilePath, logger, lockOptions) {
|
|
20
|
+
this.lockFilePath = lockFilePath;
|
|
21
|
+
this.retryNumber = lockOptions ? lockOptions.retryNumber : 500;
|
|
22
|
+
this.retryDelay = lockOptions ? lockOptions.retryDelay : 100;
|
|
23
|
+
this.logger = logger;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Locks cache from read or writes by creating file with same path and name as
|
|
27
|
+
* cache file but with .lockfile extension. If another process has already created
|
|
28
|
+
* the lockfile, will back off and retry based on configuration settings set by CrossPlatformLockOptions
|
|
29
|
+
*/
|
|
30
|
+
async lock() {
|
|
31
|
+
for (let tryCount = 0; tryCount < this.retryNumber; tryCount++) {
|
|
32
|
+
try {
|
|
33
|
+
this.logger.info(`Pid ${process.pid} trying to acquire lock`);
|
|
34
|
+
this.lockFileHandle = await fs.promises.open(this.lockFilePath, "wx+");
|
|
35
|
+
this.logger.info(`Pid ${process.pid} acquired lock`);
|
|
36
|
+
await this.lockFileHandle.write(process.pid.toString());
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
if (TypeGuards.isNodeError(err)) {
|
|
41
|
+
if (err.code === Constants.Constants.EEXIST_ERROR || err.code === Constants.Constants.EPERM_ERROR) {
|
|
42
|
+
this.logger.info(err.message);
|
|
43
|
+
await this.sleep(this.retryDelay);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
this.logger.error(`${process.pid} was not able to acquire lock. Ran into error: ${err.message}`);
|
|
47
|
+
throw PersistenceError.PersistenceError.createCrossPlatformLockError(err.message);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
this.logger.error(`${process.pid} was not able to acquire lock. Exceeded amount of retries set in the options`);
|
|
56
|
+
throw PersistenceError.PersistenceError.createCrossPlatformLockError("Not able to acquire lock. Exceeded amount of retries set in options");
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* unlocks cache file by deleting .lockfile.
|
|
60
|
+
*/
|
|
61
|
+
async unlock() {
|
|
62
|
+
try {
|
|
63
|
+
if (this.lockFileHandle) {
|
|
64
|
+
// if we have a file handle to the .lockfile, delete lock file
|
|
65
|
+
await fs.promises.unlink(this.lockFilePath);
|
|
66
|
+
await this.lockFileHandle.close();
|
|
67
|
+
this.logger.info("lockfile deleted");
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.logger.warning("lockfile handle does not exist, so lockfile could not be deleted");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
if (TypeGuards.isNodeError(err)) {
|
|
75
|
+
if (err.code === Constants.Constants.ENOENT_ERROR) {
|
|
76
|
+
this.logger.info("Tried to unlock but lockfile does not exist");
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.logger.error(`${process.pid} was not able to release lock. Ran into error: ${err.message}`);
|
|
80
|
+
throw PersistenceError.PersistenceError.createCrossPlatformLockError(err.message);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
sleep(ms) {
|
|
89
|
+
return new Promise((resolve) => {
|
|
90
|
+
setTimeout(resolve, ms);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
exports.CrossPlatformLock = CrossPlatformLock;
|
|
96
|
+
//# sourceMappingURL=CrossPlatformLock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrossPlatformLock.js","sources":["../../src/lock/CrossPlatformLock.ts"],"sourcesContent":[null],"names":["pid","fs","isNodeError","Constants","PersistenceError"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* retryNumber: Numbers of times we should try to acquire a lock. Defaults to 500.
|
|
5
5
|
* retryDelay: Time to wait before trying to retry a lock acquisition. Defaults to 100 ms.
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
7
|
+
export type CrossPlatformLockOptions = {
|
|
8
8
|
retryNumber: number;
|
|
9
9
|
retryDelay: number;
|
|
10
10
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
/* eslint-disable header/header */
|
|
4
|
+
const name = "@azure/msal-node-extensions";
|
|
5
|
+
const version = "1.0.0-beta.1";
|
|
6
|
+
|
|
7
|
+
export { name, version };
|
|
8
|
+
//# sourceMappingURL=packageMetadata.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageMetadata.esm.js","sources":["../src/packageMetadata.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;AACO,MAAM,IAAI,GAAG,8BAA8B;AAC3C,MAAM,OAAO,GAAG;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
/* eslint-disable header/header */
|
|
6
|
+
const name = "@azure/msal-node-extensions";
|
|
7
|
+
const version = "1.0.0-beta.1";
|
|
8
|
+
|
|
9
|
+
exports.name = name;
|
|
10
|
+
exports.version = version;
|
|
11
|
+
//# sourceMappingURL=packageMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageMetadata.js","sources":["../src/packageMetadata.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAAA;AACO,MAAM,IAAI,GAAG,8BAA8B;AAC3C,MAAM,OAAO,GAAG;;;;;"}
|
|
@@ -1,41 +1,36 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
import { PersistenceError } from '../error/PersistenceError.esm.js';
|
|
4
|
+
import { Constants } from '../utils/Constants.esm.js';
|
|
5
|
+
|
|
1
6
|
/*
|
|
2
7
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
8
|
* Licensed under the MIT License.
|
|
4
9
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import { Constants } from "../utils/Constants";
|
|
8
|
-
import { IPersistence } from "./IPersistence";
|
|
9
|
-
|
|
10
|
-
export abstract class BasePersistence {
|
|
11
|
-
public abstract createForPersistenceValidation(): Promise<IPersistence>;
|
|
12
|
-
|
|
13
|
-
public async verifyPersistence(): Promise<boolean> {
|
|
10
|
+
class BasePersistence {
|
|
11
|
+
async verifyPersistence() {
|
|
14
12
|
// We are using a different location for the test to avoid overriding the functional cache
|
|
15
13
|
const persistenceValidator = await this.createForPersistenceValidation();
|
|
16
|
-
|
|
17
14
|
try {
|
|
18
15
|
await persistenceValidator.save(Constants.PERSISTENCE_TEST_DATA);
|
|
19
|
-
|
|
20
16
|
const retrievedDummyData = await persistenceValidator.load();
|
|
21
|
-
|
|
22
17
|
if (!retrievedDummyData) {
|
|
23
|
-
throw PersistenceError.createCachePersistenceError(
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
);
|
|
18
|
+
throw PersistenceError.createCachePersistenceError("Persistence check failed. Data was written but it could not be read. " +
|
|
19
|
+
"Possible cause: on Linux, LibSecret is installed but D-Bus isn't running \
|
|
20
|
+
because it cannot be started over SSH.");
|
|
27
21
|
}
|
|
28
|
-
|
|
29
22
|
if (retrievedDummyData !== Constants.PERSISTENCE_TEST_DATA) {
|
|
30
|
-
throw PersistenceError.createCachePersistenceError(
|
|
31
|
-
|
|
32
|
-
);
|
|
23
|
+
throw PersistenceError.createCachePersistenceError(`Persistence check failed. Data written ${Constants.PERSISTENCE_TEST_DATA} is different \
|
|
24
|
+
from data read ${retrievedDummyData}`);
|
|
33
25
|
}
|
|
34
26
|
await persistenceValidator.delete();
|
|
35
27
|
return true;
|
|
36
|
-
}
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
37
30
|
throw PersistenceError.createCachePersistenceError(`Verifing persistence failed with the error: ${e}`);
|
|
38
31
|
}
|
|
39
32
|
}
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { BasePersistence };
|
|
36
|
+
//# sourceMappingURL=BasePersistence.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasePersistence.esm.js","sources":["../../src/persistence/BasePersistence.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;AAGG;MAMmB,eAAe,CAAA;AAG1B,IAAA,MAAM,iBAAiB,GAAA;;AAE1B,QAAA,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAEzE,IAAI;YACA,MAAM,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAEjE,YAAA,MAAM,kBAAkB,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAC;YAE7D,IAAI,CAAC,kBAAkB,EAAE;AACrB,gBAAA,MAAM,gBAAgB,CAAC,2BAA2B,CAC9C,uEAAuE;AACvE,oBAAA;AACuC,2DAAA,CAC1C,CAAC;AACL,aAAA;AAED,YAAA,IAAI,kBAAkB,KAAK,SAAS,CAAC,qBAAqB,EAAE;AACxD,gBAAA,MAAM,gBAAgB,CAAC,2BAA2B,CAC9C,CAA0C,uCAAA,EAAA,SAAS,CAAC,qBAAqB,CAAA;qCACxD,kBAAkB,CAAA,CAAE,CACxC,CAAC;AACL,aAAA;AACD,YAAA,MAAM,oBAAoB,CAAC,MAAM,EAAE,CAAC;AACpC,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;YACR,MAAM,gBAAgB,CAAC,2BAA2B,CAAC,+CAA+C,CAAC,CAAA,CAAE,CAAC,CAAC;AAC1G,SAAA;KACJ;AAEJ;;;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
var PersistenceError = require('../error/PersistenceError.js');
|
|
6
|
+
var Constants = require('../utils/Constants.js');
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
10
|
+
* Licensed under the MIT License.
|
|
11
|
+
*/
|
|
12
|
+
class BasePersistence {
|
|
13
|
+
async verifyPersistence() {
|
|
14
|
+
// We are using a different location for the test to avoid overriding the functional cache
|
|
15
|
+
const persistenceValidator = await this.createForPersistenceValidation();
|
|
16
|
+
try {
|
|
17
|
+
await persistenceValidator.save(Constants.Constants.PERSISTENCE_TEST_DATA);
|
|
18
|
+
const retrievedDummyData = await persistenceValidator.load();
|
|
19
|
+
if (!retrievedDummyData) {
|
|
20
|
+
throw PersistenceError.PersistenceError.createCachePersistenceError("Persistence check failed. Data was written but it could not be read. " +
|
|
21
|
+
"Possible cause: on Linux, LibSecret is installed but D-Bus isn't running \
|
|
22
|
+
because it cannot be started over SSH.");
|
|
23
|
+
}
|
|
24
|
+
if (retrievedDummyData !== Constants.Constants.PERSISTENCE_TEST_DATA) {
|
|
25
|
+
throw PersistenceError.PersistenceError.createCachePersistenceError(`Persistence check failed. Data written ${Constants.Constants.PERSISTENCE_TEST_DATA} is different \
|
|
26
|
+
from data read ${retrievedDummyData}`);
|
|
27
|
+
}
|
|
28
|
+
await persistenceValidator.delete();
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
throw PersistenceError.PersistenceError.createCachePersistenceError(`Verifing persistence failed with the error: ${e}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
exports.BasePersistence = BasePersistence;
|
|
38
|
+
//# sourceMappingURL=BasePersistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasePersistence.js","sources":["../../src/persistence/BasePersistence.ts"],"sourcesContent":[null],"names":["Constants","PersistenceError"],"mappings":";;;;;;;AAAA;;;AAGG;MAMmB,eAAe,CAAA;AAG1B,IAAA,MAAM,iBAAiB,GAAA;;AAE1B,QAAA,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAEzE,IAAI;YACA,MAAM,oBAAoB,CAAC,IAAI,CAACA,mBAAS,CAAC,qBAAqB,CAAC,CAAC;AAEjE,YAAA,MAAM,kBAAkB,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAC;YAE7D,IAAI,CAAC,kBAAkB,EAAE;AACrB,gBAAA,MAAMC,iCAAgB,CAAC,2BAA2B,CAC9C,uEAAuE;AACvE,oBAAA;AACuC,2DAAA,CAC1C,CAAC;AACL,aAAA;AAED,YAAA,IAAI,kBAAkB,KAAKD,mBAAS,CAAC,qBAAqB,EAAE;AACxD,gBAAA,MAAMC,iCAAgB,CAAC,2BAA2B,CAC9C,CAA0C,uCAAA,EAAAD,mBAAS,CAAC,qBAAqB,CAAA;qCACxD,kBAAkB,CAAA,CAAE,CACxC,CAAC;AACL,aAAA;AACD,YAAA,MAAM,oBAAoB,CAAC,MAAM,EAAE,CAAC;AACpC,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;YACR,MAAMC,iCAAgB,CAAC,2BAA2B,CAAC,+CAA+C,CAAC,CAAA,CAAE,CAAC,CAAC;AAC1G,SAAA;KACJ;AAEJ;;;;"}
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* application on the computer can unprotect, access, and modify the data.
|
|
10
10
|
*
|
|
11
11
|
*/
|
|
12
|
-
export declare
|
|
13
|
-
CurrentUser
|
|
14
|
-
LocalMachine
|
|
15
|
-
}
|
|
12
|
+
export declare const DataProtectionScope: {
|
|
13
|
+
readonly CurrentUser: "CurrentUser";
|
|
14
|
+
readonly LocalMachine: "LocalMachine";
|
|
15
|
+
};
|
|
16
|
+
export type DataProtectionScope = typeof DataProtectionScope[keyof typeof DataProtectionScope];
|
package/{src/persistence/DataProtectionScope.ts → dist/persistence/DataProtectionScope.esm.js}
RENAMED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
1
3
|
/*
|
|
2
4
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
5
|
* Licensed under the MIT License.
|
|
4
6
|
*/
|
|
5
|
-
|
|
6
7
|
/**
|
|
7
8
|
* Specifies the scope of the data protection - either the current user or the local
|
|
8
9
|
* machine.
|
|
@@ -14,7 +15,10 @@
|
|
|
14
15
|
* application on the computer can unprotect, access, and modify the data.
|
|
15
16
|
*
|
|
16
17
|
*/
|
|
17
|
-
|
|
18
|
-
CurrentUser
|
|
19
|
-
LocalMachine
|
|
20
|
-
}
|
|
18
|
+
const DataProtectionScope = {
|
|
19
|
+
CurrentUser: "CurrentUser",
|
|
20
|
+
LocalMachine: "LocalMachine",
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { DataProtectionScope };
|
|
24
|
+
//# sourceMappingURL=DataProtectionScope.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataProtectionScope.esm.js","sources":["../../src/persistence/DataProtectionScope.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;;AAGG;AAEH;;;;;;;;;;AAUG;AACU,MAAA,mBAAmB,GAAG;AAC/B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,YAAY,EAAE,cAAc;;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*! @azure/msal-node-extensions v1.0.0-beta.1 2023-07-06 */
|
|
2
|
+
'use strict';
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
7
|
+
* Licensed under the MIT License.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Specifies the scope of the data protection - either the current user or the local
|
|
11
|
+
* machine.
|
|
12
|
+
*
|
|
13
|
+
* You do not need a key to protect or unprotect the data.
|
|
14
|
+
* If you set the Scope to CurrentUser, only applications running on your credentials can
|
|
15
|
+
* unprotect the data; however, that means that any application running on your credentials
|
|
16
|
+
* can access the protected data. If you set the Scope to LocalMachine, any full-trust
|
|
17
|
+
* application on the computer can unprotect, access, and modify the data.
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
const DataProtectionScope = {
|
|
21
|
+
CurrentUser: "CurrentUser",
|
|
22
|
+
LocalMachine: "LocalMachine",
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.DataProtectionScope = DataProtectionScope;
|
|
26
|
+
//# sourceMappingURL=DataProtectionScope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataProtectionScope.js","sources":["../../src/persistence/DataProtectionScope.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAAA;;;AAGG;AAEH;;;;;;;;;;AAUG;AACU,MAAA,mBAAmB,GAAG;AAC/B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,YAAY,EAAE,cAAc;;;;;"}
|
|
@@ -11,6 +11,7 @@ import { BasePersistence } from "./BasePersistence";
|
|
|
11
11
|
export declare class FilePersistence extends BasePersistence implements IPersistence {
|
|
12
12
|
private filePath;
|
|
13
13
|
private logger;
|
|
14
|
+
private constructor();
|
|
14
15
|
static create(fileLocation: string, loggerOptions?: LoggerOptions): Promise<FilePersistence>;
|
|
15
16
|
save(contents: string): Promise<void>;
|
|
16
17
|
saveBuffer(contents: Uint8Array): Promise<void>;
|