@logto/browser 2.2.17 → 3.0.3
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/package.json +4 -6
- package/lib/cache.cjs +0 -25
- package/lib/index.cjs +0 -102
- package/lib/storage.cjs +0 -37
- package/lib/utils/generators.cjs +0 -44
package/package.json
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@logto/browser",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"main": "./lib/index.cjs",
|
|
6
5
|
"module": "./lib/index.js",
|
|
7
6
|
"types": "./lib/index.d.ts",
|
|
8
7
|
"exports": {
|
|
9
8
|
"types": "./lib/index.d.ts",
|
|
10
|
-
"require": "./lib/index.cjs",
|
|
11
9
|
"import": "./lib/index.js",
|
|
12
10
|
"default": "./lib/index.js"
|
|
13
11
|
},
|
|
@@ -21,16 +19,16 @@
|
|
|
21
19
|
"directory": "packages/browser"
|
|
22
20
|
},
|
|
23
21
|
"dependencies": {
|
|
24
|
-
"@silverhand/essentials": "^2.
|
|
22
|
+
"@silverhand/essentials": "^2.9.2",
|
|
25
23
|
"js-base64": "^3.7.4",
|
|
26
|
-
"@logto/client": "^
|
|
24
|
+
"@logto/client": "^3.0.3"
|
|
27
25
|
},
|
|
28
26
|
"devDependencies": {
|
|
29
27
|
"@silverhand/eslint-config": "^6.0.1",
|
|
30
28
|
"@silverhand/ts-config": "^6.0.0",
|
|
31
29
|
"@vitest/coverage-v8": "^1.6.0",
|
|
32
30
|
"eslint": "^8.57.0",
|
|
33
|
-
"happy-dom": "^
|
|
31
|
+
"happy-dom": "^15.10.2",
|
|
34
32
|
"lint-staged": "^15.0.0",
|
|
35
33
|
"prettier": "^3.0.0",
|
|
36
34
|
"typescript": "^5.3.3",
|
package/lib/cache.cjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const keyPrefix = `logto_cache`;
|
|
4
|
-
class CacheStorage {
|
|
5
|
-
constructor(appId) {
|
|
6
|
-
this.appId = appId;
|
|
7
|
-
}
|
|
8
|
-
getKey(item) {
|
|
9
|
-
if (item === undefined) {
|
|
10
|
-
return `${keyPrefix}:${this.appId}`;
|
|
11
|
-
}
|
|
12
|
-
return `${keyPrefix}:${this.appId}:${item}`;
|
|
13
|
-
}
|
|
14
|
-
async getItem(key) {
|
|
15
|
-
return sessionStorage.getItem(this.getKey(key));
|
|
16
|
-
}
|
|
17
|
-
async setItem(key, value) {
|
|
18
|
-
sessionStorage.setItem(this.getKey(key), value);
|
|
19
|
-
}
|
|
20
|
-
async removeItem(key) {
|
|
21
|
-
sessionStorage.removeItem(`${this.getKey(key)}`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
exports.CacheStorage = CacheStorage;
|
package/lib/index.cjs
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var BaseClient = require('@logto/client');
|
|
6
|
-
var essentials = require('@silverhand/essentials');
|
|
7
|
-
var cache = require('./cache.cjs');
|
|
8
|
-
var storage = require('./storage.cjs');
|
|
9
|
-
var generators = require('./utils/generators.cjs');
|
|
10
|
-
|
|
11
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
-
|
|
13
|
-
var BaseClient__default = /*#__PURE__*/_interopDefault(BaseClient);
|
|
14
|
-
|
|
15
|
-
const navigate = (url) => {
|
|
16
|
-
window.location.assign(url);
|
|
17
|
-
};
|
|
18
|
-
class LogtoClient extends BaseClient__default.default {
|
|
19
|
-
/**
|
|
20
|
-
* @param config The configuration object for the client.
|
|
21
|
-
* @param [unstable_enableCache=false] Whether to enable cache for well-known data.
|
|
22
|
-
* Use sessionStorage by default.
|
|
23
|
-
*/
|
|
24
|
-
constructor(config, unstable_enableCache = false) {
|
|
25
|
-
const requester = BaseClient.createRequester(fetch);
|
|
26
|
-
super(config, {
|
|
27
|
-
requester,
|
|
28
|
-
navigate,
|
|
29
|
-
storage: new storage.BrowserStorage(config.appId),
|
|
30
|
-
unstable_cache: essentials.conditional(unstable_enableCache && new cache.CacheStorage(config.appId)),
|
|
31
|
-
generateCodeChallenge: generators.generateCodeChallenge,
|
|
32
|
-
generateCodeVerifier: generators.generateCodeVerifier,
|
|
33
|
-
generateState: generators.generateState,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
Object.defineProperty(exports, "BaseClient", {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
get: function () { return BaseClient__default.default; }
|
|
41
|
-
});
|
|
42
|
-
Object.defineProperty(exports, "LogtoClientError", {
|
|
43
|
-
enumerable: true,
|
|
44
|
-
get: function () { return BaseClient.LogtoClientError; }
|
|
45
|
-
});
|
|
46
|
-
Object.defineProperty(exports, "LogtoError", {
|
|
47
|
-
enumerable: true,
|
|
48
|
-
get: function () { return BaseClient.LogtoError; }
|
|
49
|
-
});
|
|
50
|
-
Object.defineProperty(exports, "LogtoRequestError", {
|
|
51
|
-
enumerable: true,
|
|
52
|
-
get: function () { return BaseClient.LogtoRequestError; }
|
|
53
|
-
});
|
|
54
|
-
Object.defineProperty(exports, "OidcError", {
|
|
55
|
-
enumerable: true,
|
|
56
|
-
get: function () { return BaseClient.OidcError; }
|
|
57
|
-
});
|
|
58
|
-
Object.defineProperty(exports, "PersistKey", {
|
|
59
|
-
enumerable: true,
|
|
60
|
-
get: function () { return BaseClient.PersistKey; }
|
|
61
|
-
});
|
|
62
|
-
Object.defineProperty(exports, "Prompt", {
|
|
63
|
-
enumerable: true,
|
|
64
|
-
get: function () { return BaseClient.Prompt; }
|
|
65
|
-
});
|
|
66
|
-
Object.defineProperty(exports, "ReservedResource", {
|
|
67
|
-
enumerable: true,
|
|
68
|
-
get: function () { return BaseClient.ReservedResource; }
|
|
69
|
-
});
|
|
70
|
-
Object.defineProperty(exports, "ReservedScope", {
|
|
71
|
-
enumerable: true,
|
|
72
|
-
get: function () { return BaseClient.ReservedScope; }
|
|
73
|
-
});
|
|
74
|
-
Object.defineProperty(exports, "UserScope", {
|
|
75
|
-
enumerable: true,
|
|
76
|
-
get: function () { return BaseClient.UserScope; }
|
|
77
|
-
});
|
|
78
|
-
Object.defineProperty(exports, "buildOrganizationUrn", {
|
|
79
|
-
enumerable: true,
|
|
80
|
-
get: function () { return BaseClient.buildOrganizationUrn; }
|
|
81
|
-
});
|
|
82
|
-
Object.defineProperty(exports, "createRequester", {
|
|
83
|
-
enumerable: true,
|
|
84
|
-
get: function () { return BaseClient.createRequester; }
|
|
85
|
-
});
|
|
86
|
-
Object.defineProperty(exports, "getOrganizationIdFromUrn", {
|
|
87
|
-
enumerable: true,
|
|
88
|
-
get: function () { return BaseClient.getOrganizationIdFromUrn; }
|
|
89
|
-
});
|
|
90
|
-
Object.defineProperty(exports, "isLogtoRequestError", {
|
|
91
|
-
enumerable: true,
|
|
92
|
-
get: function () { return BaseClient.isLogtoRequestError; }
|
|
93
|
-
});
|
|
94
|
-
Object.defineProperty(exports, "organizationUrnPrefix", {
|
|
95
|
-
enumerable: true,
|
|
96
|
-
get: function () { return BaseClient.organizationUrnPrefix; }
|
|
97
|
-
});
|
|
98
|
-
exports.BrowserStorage = storage.BrowserStorage;
|
|
99
|
-
exports.generateCodeChallenge = generators.generateCodeChallenge;
|
|
100
|
-
exports.generateCodeVerifier = generators.generateCodeVerifier;
|
|
101
|
-
exports.generateState = generators.generateState;
|
|
102
|
-
exports.default = LogtoClient;
|
package/lib/storage.cjs
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const keyPrefix = `logto`;
|
|
4
|
-
class BrowserStorage {
|
|
5
|
-
constructor(appId) {
|
|
6
|
-
this.appId = appId;
|
|
7
|
-
}
|
|
8
|
-
getKey(item) {
|
|
9
|
-
if (item === undefined) {
|
|
10
|
-
return `${keyPrefix}:${this.appId}`;
|
|
11
|
-
}
|
|
12
|
-
return `${keyPrefix}:${this.appId}:${item}`;
|
|
13
|
-
}
|
|
14
|
-
async getItem(key) {
|
|
15
|
-
if (key === 'signInSession') {
|
|
16
|
-
// The latter `getItem()` is for backward compatibility. Can be removed when major bump.
|
|
17
|
-
return sessionStorage.getItem(this.getKey(key)) ?? sessionStorage.getItem(this.getKey());
|
|
18
|
-
}
|
|
19
|
-
return localStorage.getItem(this.getKey(key));
|
|
20
|
-
}
|
|
21
|
-
async setItem(key, value) {
|
|
22
|
-
if (key === 'signInSession') {
|
|
23
|
-
sessionStorage.setItem(this.getKey(key), value);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
localStorage.setItem(this.getKey(key), value);
|
|
27
|
-
}
|
|
28
|
-
async removeItem(key) {
|
|
29
|
-
if (key === 'signInSession') {
|
|
30
|
-
sessionStorage.removeItem(this.getKey(key));
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
localStorage.removeItem(this.getKey(key));
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
exports.BrowserStorage = BrowserStorage;
|
package/lib/utils/generators.cjs
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var BaseClient = require('@logto/client');
|
|
4
|
-
var jsBase64 = require('js-base64');
|
|
5
|
-
|
|
6
|
-
/** @link [Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636) */
|
|
7
|
-
/**
|
|
8
|
-
* @param length The length of the raw random data.
|
|
9
|
-
*/
|
|
10
|
-
const generateRandomString = (length = 64) => jsBase64.fromUint8Array(crypto.getRandomValues(new Uint8Array(length)), true);
|
|
11
|
-
/**
|
|
12
|
-
* Generates random string for state and encodes them in url safe base64
|
|
13
|
-
*/
|
|
14
|
-
const generateState = () => generateRandomString();
|
|
15
|
-
/**
|
|
16
|
-
* Generates code verifier
|
|
17
|
-
*
|
|
18
|
-
* @link [Client Creates a Code Verifier](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1)
|
|
19
|
-
*/
|
|
20
|
-
const generateCodeVerifier = () => generateRandomString();
|
|
21
|
-
/**
|
|
22
|
-
* Calculates the S256 PKCE code challenge for an arbitrary code verifier and encodes it in url safe base64
|
|
23
|
-
*
|
|
24
|
-
* @param {String} codeVerifier Code verifier to calculate the S256 code challenge for
|
|
25
|
-
* @link [Client Creates the Code Challenge](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2)
|
|
26
|
-
*/
|
|
27
|
-
const generateCodeChallenge = async (codeVerifier) => {
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
29
|
-
if (crypto.subtle === undefined) {
|
|
30
|
-
/**
|
|
31
|
-
* `crypto.subtle` is available only in secure contexts (HTTPS) in some or all supporting browsers,
|
|
32
|
-
* https://developer.mozilla.org/en-US/docs/Web/API/Crypto/subtle
|
|
33
|
-
* https://www.chromium.org/blink/webcrypto/#accessing-it
|
|
34
|
-
*/
|
|
35
|
-
throw new BaseClient.LogtoError('crypto_subtle_unavailable');
|
|
36
|
-
}
|
|
37
|
-
const encodedCodeVerifier = new TextEncoder().encode(codeVerifier);
|
|
38
|
-
const codeChallenge = new Uint8Array(await crypto.subtle.digest('SHA-256', encodedCodeVerifier));
|
|
39
|
-
return jsBase64.fromUint8Array(codeChallenge, true);
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
exports.generateCodeChallenge = generateCodeChallenge;
|
|
43
|
-
exports.generateCodeVerifier = generateCodeVerifier;
|
|
44
|
-
exports.generateState = generateState;
|