@leancodepl/login-manager 8.3.6 → 8.5.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.
package/package.json CHANGED
@@ -1,20 +1,57 @@
1
1
  {
2
2
  "name": "@leancodepl/login-manager",
3
- "version": "8.3.6",
3
+ "version": "8.5.0",
4
4
  "license": "Apache-2.0",
5
5
  "dependencies": {
6
6
  "buffer": ">=6.0.0"
7
7
  },
8
+ "publishConfig": {
9
+ "access": "public",
10
+ "registry": "https://registry.npmjs.org/"
11
+ },
12
+ "engines": {
13
+ "node": ">=18.0.0"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/leancodepl/js_corelibrary.git",
18
+ "directory": "packages/login-manager"
19
+ },
20
+ "homepage": "https://github.com/leancodepl/js_corelibrary",
21
+ "bugs": {
22
+ "url": "https://github.com/leancodepl/js_corelibrary/issues"
23
+ },
24
+ "description": "OAuth2 and token-based authentication management utilities",
25
+ "keywords": [
26
+ "oauth2",
27
+ "authentication",
28
+ "tokens",
29
+ "login",
30
+ "auth",
31
+ "typescript",
32
+ "javascript",
33
+ "leancode"
34
+ ],
35
+ "author": {
36
+ "name": "LeanCode",
37
+ "url": "https://leancode.co"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "README.md",
42
+ "CHANGELOG.md"
43
+ ],
44
+ "sideEffects": false,
8
45
  "exports": {
9
46
  "./package.json": "./package.json",
10
47
  ".": {
11
48
  "module": "./index.esm.js",
12
- "types": "./index.esm.d.ts",
49
+ "types": "./index.d.ts",
13
50
  "import": "./index.cjs.mjs",
14
51
  "default": "./index.cjs.js"
15
52
  }
16
53
  },
17
54
  "module": "./index.esm.js",
18
55
  "main": "./index.cjs.js",
19
- "types": "./index.esm.d.ts"
56
+ "types": "./index.d.ts"
20
57
  }
package/index.cjs.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/index";
@@ -1 +0,0 @@
1
- exports._default = require('./index.cjs.js').default;
package/index.cjs.js DELETED
@@ -1,438 +0,0 @@
1
- 'use strict';
2
-
3
- var buffer = require('buffer');
4
-
5
- function _extends() {
6
- _extends = Object.assign || function assign(target) {
7
- for(var i = 1; i < arguments.length; i++){
8
- var source = arguments[i];
9
- for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
10
- }
11
- return target;
12
- };
13
- return _extends.apply(this, arguments);
14
- }
15
-
16
- class BaseLoginManager {
17
- trySignIn(username, password) {
18
- return this.acquireToken(this.buildSignInRequest(username, password));
19
- }
20
- trySignInWithFacebook(accessToken) {
21
- return this.acquireToken(this.buildSignInWithFacebookRequest(accessToken));
22
- }
23
- trySignInWithOneTimeToken(token) {
24
- return this.acquireToken(this.buildSignInWithOneTimeTokenRequest(token));
25
- }
26
- trySignInWithGoogle(accessToken) {
27
- return this.acquireToken(this.buildSignInWithGoogleRequest(accessToken));
28
- }
29
- trySignInWithLinkedIn(accessToken) {
30
- return this.acquireToken(this.buildSignInWithLinkedInRequest(accessToken));
31
- }
32
- async tryRefreshToken() {
33
- const token = await this.storage.getToken();
34
- if (token !== null) {
35
- return await this.tryRefreshTokenInternal(token);
36
- } else {
37
- return null;
38
- }
39
- }
40
- tryRefreshTokenInternal(token) {
41
- if (!this.isRefreshingToken) {
42
- this.isRefreshingToken = true;
43
- this.acquireToken(this.buildRefreshRequest(token)).then((result)=>{
44
- this.isRefreshingToken = false;
45
- this.refreshTokenCallbacks.forEach((c)=>c(result.type === "success"));
46
- this.refreshTokenCallbacks = [];
47
- });
48
- }
49
- return new Promise((resolve)=>{
50
- this.refreshTokenCallbacks.push(resolve);
51
- });
52
- }
53
- onChange(callback) {
54
- this.callbacks.push(callback);
55
- }
56
- removeOnChange(callback) {
57
- const idx = this.callbacks.indexOf(callback);
58
- if (idx !== -1) {
59
- this.callbacks.splice(idx, 1);
60
- }
61
- }
62
- async acquireToken(init) {
63
- try {
64
- const result = await fetch(this.endpoint + "/connect/token", init);
65
- if (!result.ok) {
66
- if (result.status === 400) {
67
- await this.signOut();
68
- }
69
- return {
70
- type: "failure"
71
- };
72
- }
73
- const tokenResult = await result.json();
74
- const expDate = new Date();
75
- expDate.setSeconds(new Date().getSeconds() + tokenResult.expires_in);
76
- await this.storage.storeToken({
77
- token: tokenResult.access_token,
78
- refreshToken: tokenResult.refresh_token,
79
- expirationDate: expDate
80
- });
81
- this.notify(true);
82
- return {
83
- type: "success"
84
- };
85
- } catch (e) {
86
- console.warn("Cannot call Auth server, error: ", e);
87
- return {
88
- type: "networkError"
89
- };
90
- }
91
- }
92
- buildSignInRequest(username, password) {
93
- const data = _extends({
94
- grant_type: "password",
95
- scope: this.scopes,
96
- username: username,
97
- password: password
98
- }, this.additionalParams);
99
- return {
100
- method: "POST",
101
- headers: this.prepareHeaders(),
102
- body: new URLSearchParams(data)
103
- };
104
- }
105
- buildSignInWithFacebookRequest(accessToken) {
106
- const data = _extends({
107
- grant_type: "facebook",
108
- scope: this.scopes,
109
- assertion: accessToken
110
- }, this.additionalParams);
111
- return {
112
- method: "POST",
113
- headers: this.prepareHeaders(),
114
- body: new URLSearchParams(data)
115
- };
116
- }
117
- buildSignInWithOneTimeTokenRequest(token) {
118
- const data = _extends({
119
- grant_type: "onetime",
120
- scope: this.scopes,
121
- token
122
- }, this.additionalParams);
123
- return {
124
- method: "POST",
125
- headers: this.prepareHeaders(),
126
- body: new URLSearchParams(data)
127
- };
128
- }
129
- buildSignInWithGoogleRequest(accessToken) {
130
- const data = _extends({
131
- grant_type: "google",
132
- scope: this.scopes,
133
- assertion: accessToken
134
- }, this.additionalParams);
135
- return {
136
- method: "POST",
137
- headers: this.prepareHeaders(),
138
- body: new URLSearchParams(data)
139
- };
140
- }
141
- buildSignInWithLinkedInRequest(accessToken) {
142
- const data = _extends({
143
- grant_type: "linkedin",
144
- scope: this.scopes,
145
- assertion: accessToken
146
- }, this.additionalParams);
147
- return {
148
- method: "POST",
149
- headers: this.prepareHeaders(),
150
- body: new URLSearchParams(data)
151
- };
152
- }
153
- buildRefreshRequest(token) {
154
- const data = _extends({
155
- grant_type: "refresh_token",
156
- scope: this.scopes,
157
- refresh_token: token.refreshToken || ""
158
- }, this.additionalParams);
159
- return {
160
- method: "POST",
161
- headers: this.prepareHeaders(),
162
- body: new URLSearchParams(data)
163
- };
164
- }
165
- prepareHeaders() {
166
- const headers = new Headers();
167
- if (this.clientSecret) {
168
- const sec = buffer.Buffer.from(`${this.clientId}:${this.clientSecret}`, "binary").toString("base64");
169
- headers.append("Authorization", "Basic " + sec);
170
- }
171
- headers.append("Content-Type", "application/x-www-form-urlencoded");
172
- return headers;
173
- }
174
- notify(isSignedIn) {
175
- for (const c of this.callbacks){
176
- c(isSignedIn);
177
- }
178
- }
179
- /* eslint-disable-next-line max-params */ constructor(storage, endpoint, clientSecret, clientId, scopes, additionalParams){
180
- this.storage = storage;
181
- this.endpoint = endpoint;
182
- this.clientSecret = clientSecret;
183
- this.clientId = clientId;
184
- this.scopes = scopes;
185
- this.additionalParams = additionalParams;
186
- this.callbacks = [];
187
- this.refreshTokenCallbacks = [];
188
- this.isRefreshingToken = false;
189
- if (!clientSecret) {
190
- this.additionalParams = _extends({}, additionalParams, {
191
- client_id: clientId
192
- });
193
- }
194
- }
195
- }
196
-
197
- class CannotRefreshToken extends Error {
198
- constructor(m){
199
- super(m);
200
- Object.setPrototypeOf(this, CannotRefreshToken.prototype);
201
- }
202
- }
203
-
204
- class AsyncLoginManager extends BaseLoginManager {
205
- async signOut() {
206
- await this.storage.resetToken();
207
- this.notify(false);
208
- }
209
- async isSigned() {
210
- return await this.storage.getToken() !== null;
211
- }
212
- async getToken() {
213
- const token = await this.storage.getToken();
214
- if (token === null) {
215
- return null;
216
- } else if (token.expirationDate < new Date()) {
217
- if (await this.tryRefreshTokenInternal(token)) {
218
- var _this;
219
- var _token;
220
- return (_token = (_this = await this.storage.getToken()) == null ? void 0 : _this.token) != null ? _token : null;
221
- } else {
222
- throw new CannotRefreshToken("Cannot refresh access token after it has expired");
223
- }
224
- } else {
225
- return token.token;
226
- }
227
- }
228
- async load() {
229
- const isSignedIn = await this.isSigned();
230
- this.notify(isSignedIn);
231
- }
232
- }
233
-
234
- /// <reference types="facebook-js-sdk" />
235
- class FacebookClient {
236
- get accessToken() {
237
- return this.token;
238
- }
239
- setup(loginCallback) {
240
- const ref = document.getElementsByTagName("script")[0];
241
- const id = "facebook-jssdk";
242
- if (document.getElementById(id)) {
243
- this.initializeSDK();
244
- this.getLoginStatus(loginCallback);
245
- return;
246
- }
247
- const js = document.createElement("script");
248
- js.id = id;
249
- js.async = true;
250
- js.src = "//connect.facebook.net/pl_PL/sdk.js";
251
- if (ref.parentNode != null) {
252
- ref.parentNode.insertBefore(js, ref);
253
- }
254
- js.onload = ()=>{
255
- this.initializeSDK();
256
- this.getLoginStatus(loginCallback);
257
- };
258
- }
259
- login(callback) {
260
- FB.login((response)=>{
261
- if (response.status === "connected") {
262
- this.isSignedIn = true;
263
- this.token = response.authResponse.accessToken;
264
- if (callback) {
265
- callback(response.authResponse.accessToken);
266
- }
267
- } else {
268
- this.isSignedIn = false;
269
- }
270
- }, {
271
- scope: this.facebookPermissions
272
- });
273
- }
274
- getLoginStatus(callback) {
275
- FB.getLoginStatus((response)=>{
276
- if (response.status === "connected") {
277
- this.isSignedIn = true;
278
- this.token = response.authResponse.accessToken;
279
- if (callback) {
280
- callback(response.authResponse.accessToken);
281
- }
282
- } else {
283
- this.isSignedIn = false;
284
- }
285
- });
286
- }
287
- initializeSDK() {
288
- FB.init({
289
- appId: this.facebookAppId,
290
- xfbml: true,
291
- version: "v2.9"
292
- });
293
- }
294
- constructor(facebookAppId, facebookPermissions){
295
- this.facebookAppId = facebookAppId;
296
- this.facebookPermissions = facebookPermissions;
297
- this.isSignedIn = undefined;
298
- this.token = "";
299
- }
300
- }
301
-
302
- class LocalTokenStorage {
303
- getToken() {
304
- if (this.hasValue(this.tokenKey)) {
305
- return {
306
- token: this.getValue(this.tokenKey),
307
- refreshToken: this.getValue(this.refreshKey),
308
- expirationDate: new Date(Number(this.getValue(this.expiryKey)))
309
- };
310
- } else {
311
- return null;
312
- }
313
- }
314
- storeToken(token) {
315
- this.setValue(this.tokenKey, token.token);
316
- this.setValue(this.refreshKey, token.refreshToken);
317
- this.setValue(this.expiryKey, token.expirationDate.getTime().toString());
318
- }
319
- resetToken() {
320
- this.remove(this.tokenKey);
321
- this.remove(this.refreshKey);
322
- this.remove(this.expiryKey);
323
- }
324
- hasValue(key) {
325
- return localStorage.getItem(key) !== null;
326
- }
327
- getValue(key) {
328
- return localStorage.getItem(key);
329
- }
330
- setValue(key, val) {
331
- localStorage.setItem(key, val);
332
- }
333
- remove(key) {
334
- localStorage.removeItem(key);
335
- }
336
- constructor(tokenKey = "token", refreshKey = "refresh_token", expiryKey = "expiration_date"){
337
- this.tokenKey = tokenKey;
338
- this.refreshKey = refreshKey;
339
- this.expiryKey = expiryKey;
340
- }
341
- }
342
-
343
- class MemoryTokenStorage {
344
- getToken() {
345
- return this.token;
346
- }
347
- storeToken(token) {
348
- this.token = {
349
- token: token.token,
350
- refreshToken: token.refreshToken,
351
- expirationDate: token.expirationDate
352
- };
353
- return Promise.resolve();
354
- }
355
- resetToken() {
356
- this.token = null;
357
- return Promise.resolve();
358
- }
359
- constructor(){
360
- this.token = null;
361
- }
362
- }
363
-
364
- class SessionTokenStorage {
365
- getToken() {
366
- if (this.hasValue(this.tokenKey)) {
367
- return {
368
- token: this.getValue(this.tokenKey),
369
- refreshToken: this.getValue(this.refreshKey),
370
- expirationDate: new Date(Number(this.getValue(this.expiryKey)))
371
- };
372
- } else {
373
- return null;
374
- }
375
- }
376
- storeToken(token) {
377
- this.setValue(this.tokenKey, token.token);
378
- this.setValue(this.refreshKey, token.refreshToken);
379
- this.setValue(this.expiryKey, token.expirationDate.getTime().toString());
380
- }
381
- resetToken() {
382
- this.remove(this.tokenKey);
383
- this.remove(this.refreshKey);
384
- this.remove(this.expiryKey);
385
- }
386
- hasValue(key) {
387
- return sessionStorage.getItem(key) !== null;
388
- }
389
- getValue(key) {
390
- return sessionStorage.getItem(key);
391
- }
392
- setValue(key, val) {
393
- sessionStorage.setItem(key, val);
394
- }
395
- remove(key) {
396
- sessionStorage.removeItem(key);
397
- }
398
- constructor(tokenKey = "token", refreshKey = "refresh_token", expiryKey = "expiration_date"){
399
- this.tokenKey = tokenKey;
400
- this.refreshKey = refreshKey;
401
- this.expiryKey = expiryKey;
402
- }
403
- }
404
-
405
- class SyncLoginManager extends BaseLoginManager {
406
- signOut() {
407
- this.storage.resetToken();
408
- this.notify(false);
409
- }
410
- isSigned() {
411
- return this.storage.getToken() !== null;
412
- }
413
- async getToken() {
414
- const token = this.storage.getToken();
415
- if (token === null) {
416
- return null;
417
- } else if (token.expirationDate < new Date()) {
418
- if (await this.tryRefreshTokenInternal(token)) {
419
- var _this_storage_getToken;
420
- var _this_storage_getToken_token;
421
- return (_this_storage_getToken_token = (_this_storage_getToken = this.storage.getToken()) == null ? void 0 : _this_storage_getToken.token) != null ? _this_storage_getToken_token : null;
422
- } else {
423
- throw new CannotRefreshToken("Cannot refresh access token after it has expired");
424
- }
425
- } else {
426
- return token.token;
427
- }
428
- }
429
- }
430
-
431
- exports.AsyncLoginManager = AsyncLoginManager;
432
- exports.BaseLoginManager = BaseLoginManager;
433
- exports.CannotRefreshToken = CannotRefreshToken;
434
- exports.FacebookClient = FacebookClient;
435
- exports.LocalTokenStorage = LocalTokenStorage;
436
- exports.MemoryTokenStorage = MemoryTokenStorage;
437
- exports.SessionTokenStorage = SessionTokenStorage;
438
- exports.SyncLoginManager = SyncLoginManager;
package/index.cjs.mjs DELETED
@@ -1,2 +0,0 @@
1
- export * from './index.cjs.js';
2
- export { _default as default } from './index.cjs.default.js';
package/index.esm.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/index";
package/index.esm.js DELETED
@@ -1,429 +0,0 @@
1
- import { Buffer } from 'buffer';
2
-
3
- function _extends() {
4
- _extends = Object.assign || function assign(target) {
5
- for(var i = 1; i < arguments.length; i++){
6
- var source = arguments[i];
7
- for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
8
- }
9
- return target;
10
- };
11
- return _extends.apply(this, arguments);
12
- }
13
-
14
- class BaseLoginManager {
15
- trySignIn(username, password) {
16
- return this.acquireToken(this.buildSignInRequest(username, password));
17
- }
18
- trySignInWithFacebook(accessToken) {
19
- return this.acquireToken(this.buildSignInWithFacebookRequest(accessToken));
20
- }
21
- trySignInWithOneTimeToken(token) {
22
- return this.acquireToken(this.buildSignInWithOneTimeTokenRequest(token));
23
- }
24
- trySignInWithGoogle(accessToken) {
25
- return this.acquireToken(this.buildSignInWithGoogleRequest(accessToken));
26
- }
27
- trySignInWithLinkedIn(accessToken) {
28
- return this.acquireToken(this.buildSignInWithLinkedInRequest(accessToken));
29
- }
30
- async tryRefreshToken() {
31
- const token = await this.storage.getToken();
32
- if (token !== null) {
33
- return await this.tryRefreshTokenInternal(token);
34
- } else {
35
- return null;
36
- }
37
- }
38
- tryRefreshTokenInternal(token) {
39
- if (!this.isRefreshingToken) {
40
- this.isRefreshingToken = true;
41
- this.acquireToken(this.buildRefreshRequest(token)).then((result)=>{
42
- this.isRefreshingToken = false;
43
- this.refreshTokenCallbacks.forEach((c)=>c(result.type === "success"));
44
- this.refreshTokenCallbacks = [];
45
- });
46
- }
47
- return new Promise((resolve)=>{
48
- this.refreshTokenCallbacks.push(resolve);
49
- });
50
- }
51
- onChange(callback) {
52
- this.callbacks.push(callback);
53
- }
54
- removeOnChange(callback) {
55
- const idx = this.callbacks.indexOf(callback);
56
- if (idx !== -1) {
57
- this.callbacks.splice(idx, 1);
58
- }
59
- }
60
- async acquireToken(init) {
61
- try {
62
- const result = await fetch(this.endpoint + "/connect/token", init);
63
- if (!result.ok) {
64
- if (result.status === 400) {
65
- await this.signOut();
66
- }
67
- return {
68
- type: "failure"
69
- };
70
- }
71
- const tokenResult = await result.json();
72
- const expDate = new Date();
73
- expDate.setSeconds(new Date().getSeconds() + tokenResult.expires_in);
74
- await this.storage.storeToken({
75
- token: tokenResult.access_token,
76
- refreshToken: tokenResult.refresh_token,
77
- expirationDate: expDate
78
- });
79
- this.notify(true);
80
- return {
81
- type: "success"
82
- };
83
- } catch (e) {
84
- console.warn("Cannot call Auth server, error: ", e);
85
- return {
86
- type: "networkError"
87
- };
88
- }
89
- }
90
- buildSignInRequest(username, password) {
91
- const data = _extends({
92
- grant_type: "password",
93
- scope: this.scopes,
94
- username: username,
95
- password: password
96
- }, this.additionalParams);
97
- return {
98
- method: "POST",
99
- headers: this.prepareHeaders(),
100
- body: new URLSearchParams(data)
101
- };
102
- }
103
- buildSignInWithFacebookRequest(accessToken) {
104
- const data = _extends({
105
- grant_type: "facebook",
106
- scope: this.scopes,
107
- assertion: accessToken
108
- }, this.additionalParams);
109
- return {
110
- method: "POST",
111
- headers: this.prepareHeaders(),
112
- body: new URLSearchParams(data)
113
- };
114
- }
115
- buildSignInWithOneTimeTokenRequest(token) {
116
- const data = _extends({
117
- grant_type: "onetime",
118
- scope: this.scopes,
119
- token
120
- }, this.additionalParams);
121
- return {
122
- method: "POST",
123
- headers: this.prepareHeaders(),
124
- body: new URLSearchParams(data)
125
- };
126
- }
127
- buildSignInWithGoogleRequest(accessToken) {
128
- const data = _extends({
129
- grant_type: "google",
130
- scope: this.scopes,
131
- assertion: accessToken
132
- }, this.additionalParams);
133
- return {
134
- method: "POST",
135
- headers: this.prepareHeaders(),
136
- body: new URLSearchParams(data)
137
- };
138
- }
139
- buildSignInWithLinkedInRequest(accessToken) {
140
- const data = _extends({
141
- grant_type: "linkedin",
142
- scope: this.scopes,
143
- assertion: accessToken
144
- }, this.additionalParams);
145
- return {
146
- method: "POST",
147
- headers: this.prepareHeaders(),
148
- body: new URLSearchParams(data)
149
- };
150
- }
151
- buildRefreshRequest(token) {
152
- const data = _extends({
153
- grant_type: "refresh_token",
154
- scope: this.scopes,
155
- refresh_token: token.refreshToken || ""
156
- }, this.additionalParams);
157
- return {
158
- method: "POST",
159
- headers: this.prepareHeaders(),
160
- body: new URLSearchParams(data)
161
- };
162
- }
163
- prepareHeaders() {
164
- const headers = new Headers();
165
- if (this.clientSecret) {
166
- const sec = Buffer.from(`${this.clientId}:${this.clientSecret}`, "binary").toString("base64");
167
- headers.append("Authorization", "Basic " + sec);
168
- }
169
- headers.append("Content-Type", "application/x-www-form-urlencoded");
170
- return headers;
171
- }
172
- notify(isSignedIn) {
173
- for (const c of this.callbacks){
174
- c(isSignedIn);
175
- }
176
- }
177
- /* eslint-disable-next-line max-params */ constructor(storage, endpoint, clientSecret, clientId, scopes, additionalParams){
178
- this.storage = storage;
179
- this.endpoint = endpoint;
180
- this.clientSecret = clientSecret;
181
- this.clientId = clientId;
182
- this.scopes = scopes;
183
- this.additionalParams = additionalParams;
184
- this.callbacks = [];
185
- this.refreshTokenCallbacks = [];
186
- this.isRefreshingToken = false;
187
- if (!clientSecret) {
188
- this.additionalParams = _extends({}, additionalParams, {
189
- client_id: clientId
190
- });
191
- }
192
- }
193
- }
194
-
195
- class CannotRefreshToken extends Error {
196
- constructor(m){
197
- super(m);
198
- Object.setPrototypeOf(this, CannotRefreshToken.prototype);
199
- }
200
- }
201
-
202
- class AsyncLoginManager extends BaseLoginManager {
203
- async signOut() {
204
- await this.storage.resetToken();
205
- this.notify(false);
206
- }
207
- async isSigned() {
208
- return await this.storage.getToken() !== null;
209
- }
210
- async getToken() {
211
- const token = await this.storage.getToken();
212
- if (token === null) {
213
- return null;
214
- } else if (token.expirationDate < new Date()) {
215
- if (await this.tryRefreshTokenInternal(token)) {
216
- var _this;
217
- var _token;
218
- return (_token = (_this = await this.storage.getToken()) == null ? void 0 : _this.token) != null ? _token : null;
219
- } else {
220
- throw new CannotRefreshToken("Cannot refresh access token after it has expired");
221
- }
222
- } else {
223
- return token.token;
224
- }
225
- }
226
- async load() {
227
- const isSignedIn = await this.isSigned();
228
- this.notify(isSignedIn);
229
- }
230
- }
231
-
232
- /// <reference types="facebook-js-sdk" />
233
- class FacebookClient {
234
- get accessToken() {
235
- return this.token;
236
- }
237
- setup(loginCallback) {
238
- const ref = document.getElementsByTagName("script")[0];
239
- const id = "facebook-jssdk";
240
- if (document.getElementById(id)) {
241
- this.initializeSDK();
242
- this.getLoginStatus(loginCallback);
243
- return;
244
- }
245
- const js = document.createElement("script");
246
- js.id = id;
247
- js.async = true;
248
- js.src = "//connect.facebook.net/pl_PL/sdk.js";
249
- if (ref.parentNode != null) {
250
- ref.parentNode.insertBefore(js, ref);
251
- }
252
- js.onload = ()=>{
253
- this.initializeSDK();
254
- this.getLoginStatus(loginCallback);
255
- };
256
- }
257
- login(callback) {
258
- FB.login((response)=>{
259
- if (response.status === "connected") {
260
- this.isSignedIn = true;
261
- this.token = response.authResponse.accessToken;
262
- if (callback) {
263
- callback(response.authResponse.accessToken);
264
- }
265
- } else {
266
- this.isSignedIn = false;
267
- }
268
- }, {
269
- scope: this.facebookPermissions
270
- });
271
- }
272
- getLoginStatus(callback) {
273
- FB.getLoginStatus((response)=>{
274
- if (response.status === "connected") {
275
- this.isSignedIn = true;
276
- this.token = response.authResponse.accessToken;
277
- if (callback) {
278
- callback(response.authResponse.accessToken);
279
- }
280
- } else {
281
- this.isSignedIn = false;
282
- }
283
- });
284
- }
285
- initializeSDK() {
286
- FB.init({
287
- appId: this.facebookAppId,
288
- xfbml: true,
289
- version: "v2.9"
290
- });
291
- }
292
- constructor(facebookAppId, facebookPermissions){
293
- this.facebookAppId = facebookAppId;
294
- this.facebookPermissions = facebookPermissions;
295
- this.isSignedIn = undefined;
296
- this.token = "";
297
- }
298
- }
299
-
300
- class LocalTokenStorage {
301
- getToken() {
302
- if (this.hasValue(this.tokenKey)) {
303
- return {
304
- token: this.getValue(this.tokenKey),
305
- refreshToken: this.getValue(this.refreshKey),
306
- expirationDate: new Date(Number(this.getValue(this.expiryKey)))
307
- };
308
- } else {
309
- return null;
310
- }
311
- }
312
- storeToken(token) {
313
- this.setValue(this.tokenKey, token.token);
314
- this.setValue(this.refreshKey, token.refreshToken);
315
- this.setValue(this.expiryKey, token.expirationDate.getTime().toString());
316
- }
317
- resetToken() {
318
- this.remove(this.tokenKey);
319
- this.remove(this.refreshKey);
320
- this.remove(this.expiryKey);
321
- }
322
- hasValue(key) {
323
- return localStorage.getItem(key) !== null;
324
- }
325
- getValue(key) {
326
- return localStorage.getItem(key);
327
- }
328
- setValue(key, val) {
329
- localStorage.setItem(key, val);
330
- }
331
- remove(key) {
332
- localStorage.removeItem(key);
333
- }
334
- constructor(tokenKey = "token", refreshKey = "refresh_token", expiryKey = "expiration_date"){
335
- this.tokenKey = tokenKey;
336
- this.refreshKey = refreshKey;
337
- this.expiryKey = expiryKey;
338
- }
339
- }
340
-
341
- class MemoryTokenStorage {
342
- getToken() {
343
- return this.token;
344
- }
345
- storeToken(token) {
346
- this.token = {
347
- token: token.token,
348
- refreshToken: token.refreshToken,
349
- expirationDate: token.expirationDate
350
- };
351
- return Promise.resolve();
352
- }
353
- resetToken() {
354
- this.token = null;
355
- return Promise.resolve();
356
- }
357
- constructor(){
358
- this.token = null;
359
- }
360
- }
361
-
362
- class SessionTokenStorage {
363
- getToken() {
364
- if (this.hasValue(this.tokenKey)) {
365
- return {
366
- token: this.getValue(this.tokenKey),
367
- refreshToken: this.getValue(this.refreshKey),
368
- expirationDate: new Date(Number(this.getValue(this.expiryKey)))
369
- };
370
- } else {
371
- return null;
372
- }
373
- }
374
- storeToken(token) {
375
- this.setValue(this.tokenKey, token.token);
376
- this.setValue(this.refreshKey, token.refreshToken);
377
- this.setValue(this.expiryKey, token.expirationDate.getTime().toString());
378
- }
379
- resetToken() {
380
- this.remove(this.tokenKey);
381
- this.remove(this.refreshKey);
382
- this.remove(this.expiryKey);
383
- }
384
- hasValue(key) {
385
- return sessionStorage.getItem(key) !== null;
386
- }
387
- getValue(key) {
388
- return sessionStorage.getItem(key);
389
- }
390
- setValue(key, val) {
391
- sessionStorage.setItem(key, val);
392
- }
393
- remove(key) {
394
- sessionStorage.removeItem(key);
395
- }
396
- constructor(tokenKey = "token", refreshKey = "refresh_token", expiryKey = "expiration_date"){
397
- this.tokenKey = tokenKey;
398
- this.refreshKey = refreshKey;
399
- this.expiryKey = expiryKey;
400
- }
401
- }
402
-
403
- class SyncLoginManager extends BaseLoginManager {
404
- signOut() {
405
- this.storage.resetToken();
406
- this.notify(false);
407
- }
408
- isSigned() {
409
- return this.storage.getToken() !== null;
410
- }
411
- async getToken() {
412
- const token = this.storage.getToken();
413
- if (token === null) {
414
- return null;
415
- } else if (token.expirationDate < new Date()) {
416
- if (await this.tryRefreshTokenInternal(token)) {
417
- var _this_storage_getToken;
418
- var _this_storage_getToken_token;
419
- return (_this_storage_getToken_token = (_this_storage_getToken = this.storage.getToken()) == null ? void 0 : _this_storage_getToken.token) != null ? _this_storage_getToken_token : null;
420
- } else {
421
- throw new CannotRefreshToken("Cannot refresh access token after it has expired");
422
- }
423
- } else {
424
- return token.token;
425
- }
426
- }
427
- }
428
-
429
- export { AsyncLoginManager, BaseLoginManager, CannotRefreshToken, FacebookClient, LocalTokenStorage, MemoryTokenStorage, SessionTokenStorage, SyncLoginManager };
package/src/index.d.ts DELETED
@@ -1,9 +0,0 @@
1
- export * from "./lib/asyncLoginManager";
2
- export * from "./lib/baseLoginManager";
3
- export * from "./lib/cannotRefreshToken";
4
- export * from "./lib/facebookClient";
5
- export * from "./lib/localTokenStorage";
6
- export * from "./lib/memoryTokenStorage";
7
- export * from "./lib/sessionTokenStorage";
8
- export * from "./lib/syncLoginManager";
9
- export * from "./lib/tokenStorage";
@@ -1,8 +0,0 @@
1
- import { BaseLoginManager, LoginManager } from "./baseLoginManager";
2
- import { AsyncTokenStorage } from "./tokenStorage";
3
- export declare class AsyncLoginManager extends BaseLoginManager<AsyncTokenStorage> implements LoginManager {
4
- signOut(): Promise<void>;
5
- isSigned(): Promise<boolean>;
6
- getToken(): Promise<string | null>;
7
- load(): Promise<void>;
8
- }
@@ -1,46 +0,0 @@
1
- import { AsyncTokenStorage, Token, TokenStorage } from "./tokenStorage";
2
- export interface LoginSuccess {
3
- readonly type: "success";
4
- }
5
- export interface LoginFailure {
6
- readonly type: "failure";
7
- }
8
- export interface LoginNetworkError {
9
- readonly type: "networkError";
10
- }
11
- export type LoginResult = LoginFailure | LoginNetworkError | LoginSuccess;
12
- export interface LoginManager extends BaseLoginManager<TokenStorage> {
13
- }
14
- export declare abstract class BaseLoginManager<TStorage extends TokenStorage> {
15
- protected storage: TStorage;
16
- private endpoint;
17
- private clientSecret;
18
- private clientId;
19
- private scopes;
20
- private additionalParams?;
21
- private callbacks;
22
- private refreshTokenCallbacks;
23
- private isRefreshingToken;
24
- constructor(storage: TStorage, endpoint: string, clientSecret: string | undefined, clientId: string, scopes: string, additionalParams?: Record<string, string> | undefined);
25
- abstract signOut(): TStorage extends AsyncTokenStorage ? Promise<void> : void;
26
- abstract isSigned(): TStorage extends AsyncTokenStorage ? Promise<boolean> : boolean;
27
- abstract getToken(): Promise<string | null>;
28
- trySignIn(username: string, password: string): Promise<LoginResult>;
29
- trySignInWithFacebook(accessToken: string): Promise<LoginResult>;
30
- trySignInWithOneTimeToken(token: string): Promise<LoginResult>;
31
- trySignInWithGoogle(accessToken: string): Promise<LoginResult>;
32
- trySignInWithLinkedIn(accessToken: string): Promise<LoginResult>;
33
- tryRefreshToken(): Promise<boolean | null>;
34
- protected tryRefreshTokenInternal(token: Token): Promise<boolean>;
35
- onChange(callback: (isSignedIn: boolean) => void): void;
36
- removeOnChange(callback: (isSignedIn: boolean) => void): void;
37
- acquireToken(init: RequestInit): Promise<LoginResult>;
38
- buildSignInRequest(username: string, password: string): RequestInit;
39
- private buildSignInWithFacebookRequest;
40
- private buildSignInWithOneTimeTokenRequest;
41
- private buildSignInWithGoogleRequest;
42
- private buildSignInWithLinkedInRequest;
43
- private buildRefreshRequest;
44
- private prepareHeaders;
45
- protected notify(isSignedIn: boolean): void;
46
- }
@@ -1,3 +0,0 @@
1
- export declare class CannotRefreshToken extends Error {
2
- constructor(m: string);
3
- }
@@ -1,12 +0,0 @@
1
- export declare class FacebookClient {
2
- private facebookAppId;
3
- private facebookPermissions;
4
- isSignedIn?: boolean;
5
- private token;
6
- constructor(facebookAppId: string, facebookPermissions: string);
7
- get accessToken(): string;
8
- setup(loginCallback?: (accessToken: string) => Promise<void>): void;
9
- login(callback?: (accessToken: string) => Promise<void>): void;
10
- private getLoginStatus;
11
- private initializeSDK;
12
- }
@@ -1,14 +0,0 @@
1
- import { SyncTokenStorage, Token } from "./tokenStorage";
2
- export declare class LocalTokenStorage implements SyncTokenStorage {
3
- private tokenKey;
4
- private refreshKey;
5
- private expiryKey;
6
- constructor(tokenKey?: string, refreshKey?: string, expiryKey?: string);
7
- getToken(): Token | null;
8
- storeToken(token: Token): void;
9
- resetToken(): void;
10
- private hasValue;
11
- private getValue;
12
- private setValue;
13
- private remove;
14
- }
@@ -1,7 +0,0 @@
1
- import { SyncTokenStorage, Token } from "./tokenStorage";
2
- export declare class MemoryTokenStorage implements SyncTokenStorage {
3
- private token;
4
- getToken(): Token | null;
5
- storeToken(token: Token): Promise<void>;
6
- resetToken(): Promise<void>;
7
- }
@@ -1,14 +0,0 @@
1
- import { SyncTokenStorage, Token } from "./tokenStorage";
2
- export declare class SessionTokenStorage implements SyncTokenStorage {
3
- private tokenKey;
4
- private refreshKey;
5
- private expiryKey;
6
- constructor(tokenKey?: string, refreshKey?: string, expiryKey?: string);
7
- getToken(): Token | null;
8
- storeToken(token: Token): void;
9
- resetToken(): void;
10
- private hasValue;
11
- private getValue;
12
- private setValue;
13
- private remove;
14
- }
@@ -1,7 +0,0 @@
1
- import { BaseLoginManager, LoginManager } from "./baseLoginManager";
2
- import { SyncTokenStorage } from "./tokenStorage";
3
- export declare class SyncLoginManager extends BaseLoginManager<SyncTokenStorage> implements LoginManager {
4
- signOut(): void;
5
- isSigned(): boolean;
6
- getToken(): Promise<string | null>;
7
- }
@@ -1,17 +0,0 @@
1
- export interface Token {
2
- token: string;
3
- refreshToken: string;
4
- expirationDate: Date;
5
- abc?: string;
6
- }
7
- export type TokenStorage = AsyncTokenStorage | SyncTokenStorage;
8
- export interface SyncTokenStorage {
9
- getToken(): Token | null;
10
- storeToken(token: Token): void;
11
- resetToken(): void;
12
- }
13
- export interface AsyncTokenStorage {
14
- getToken(): Promise<Token | null>;
15
- storeToken(token: Token): Promise<void>;
16
- resetToken(): Promise<void>;
17
- }