1.2.1 - Added decodeToken function. The token is obtained directly by the function from local storage. If the token is missing, the function returns null.
parent
f38c2d9940
commit
aba635b7cc
|
@ -40,3 +40,4 @@ All tests in the package can be executed by running: `npm test`.
|
|||
1.0.4 - TuitioState's token property can be null
|
||||
1.1.0 - In this version, the account logout method and the latest changes published by Tuitio were implemented.
|
||||
1.2.0 - Has been implemented the "user-info" method exposed by the Tuitio API.
|
||||
1.2.1 - Added decodeToken function. The token is obtained directly by the function from local storage. If the token is missing, the function returns null.
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@flare/tuitio-client",
|
||||
"version": "1.2.0",
|
||||
"version": "1.2.1",
|
||||
"description": "Tuitio client is an npm package written in typescript that facilitates the integration of a javascript application with Tuitio.",
|
||||
"main": "./lib/index.js",
|
||||
"types": "./lib/index.d.ts",
|
||||
|
@ -54,7 +54,7 @@
|
|||
"typescript": "^4.9.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@flare/js-utils": "^1.0.3",
|
||||
"@flare/js-utils": "^1.0.4",
|
||||
"axios": "^1.3.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
/**
|
||||
* @jest-environment jsdom
|
||||
*/
|
||||
|
||||
// Copyright (c) 2023 Tudor Stanciu
|
||||
|
||||
import { decodeToken } from "../token";
|
||||
import { localStorage } from "@flare/js-utils";
|
||||
import { storageKeys } from "../constants";
|
||||
|
||||
const { setItem } = localStorage;
|
||||
|
||||
test("Decoded token must be null if the auth data does not exists in local storage", async () => {
|
||||
const decodedToken = decodeToken();
|
||||
expect(decodedToken).toBeNull();
|
||||
});
|
||||
|
||||
test("Token must be successfully decoded", async () => {
|
||||
const authData = {
|
||||
token:
|
||||
"eyJUb2tlbklkIjoiZDkzZjEwMzQtNjI4ZS00MWQ4LWI5OGUtNGM3MDhiMmRlODgzIiwiVXNlcklkIjoxLCJVc2VyTmFtZSI6InR1aXRpby51c2VyIiwiRmlyc3ROYW1lIjoiVHVpdGlvIiwiTGFzdE5hbWUiOiJVc2VyIiwiRW1haWwiOiJ0dWl0aW8udXNlckBsYWIuY29tIiwiU2VjdXJpdHlTdGFtcCI6InRlc3Qtc2VjdXJpdHktc3RhbXAiLCJMb2NrU3RhbXAiOiJ0ZXN0LWxvY2stc3RhbXAiLCJDcmVhdGVkQXQiOiIyMDIwLTAxLTI5VDE1OjIyOjQ5LjYyMzk5MzFaIiwiRXhwaXJlc0luIjoxMDYyfQ==",
|
||||
validUntil: new Date(),
|
||||
userName: "tuitio.user"
|
||||
};
|
||||
|
||||
setItem(storageKeys.AUTH_DATA, authData);
|
||||
const decodedToken = decodeToken();
|
||||
|
||||
expect(decodedToken?.userId).toBe(1);
|
||||
expect(decodedToken?.userName).toBe("tuitio.user");
|
||||
expect(decodedToken?.firstName).toBe("Tuitio");
|
||||
expect(decodedToken?.securityStamp).toBeDefined();
|
||||
expect(decodedToken?.lockStamp).toBeDefined();
|
||||
expect(decodedToken?.createdAt).toBeDefined();
|
||||
});
|
|
@ -2,8 +2,9 @@
|
|||
|
||||
import { TuitioClient } from "./client";
|
||||
import { fetch } from "./state";
|
||||
import { decodeToken } from "./token";
|
||||
|
||||
export * from "./types";
|
||||
|
||||
export { TuitioClient, fetch };
|
||||
export { TuitioClient, fetch, decodeToken };
|
||||
export default TuitioClient;
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// Copyright (c) 2023 Tudor Stanciu
|
||||
|
||||
import { localStorage, camelizeKeys } from "@flare/js-utils";
|
||||
import { storageKeys } from "./constants";
|
||||
import type { TuitioTokenData } from "./types";
|
||||
|
||||
const { getItem } = localStorage;
|
||||
|
||||
const decodeToken = (): TuitioTokenData | null => {
|
||||
const authData = getItem(storageKeys.AUTH_DATA);
|
||||
if (!authData) return null;
|
||||
const { token } = authData;
|
||||
const decodedTokenString = atob(token);
|
||||
const decodedToken = camelizeKeys(JSON.parse(decodedTokenString));
|
||||
return decodedToken;
|
||||
};
|
||||
|
||||
export { decodeToken };
|
15
src/types.ts
15
src/types.ts
|
@ -23,3 +23,18 @@ export type TuitioUserInfo = {
|
|||
claim?: object;
|
||||
contactOptions?: [TuitioUserContactOption];
|
||||
};
|
||||
|
||||
export type TuitioTokenData = {
|
||||
tokenId: string;
|
||||
userId: number;
|
||||
userName: string;
|
||||
firstName: string;
|
||||
lastName: string;
|
||||
email?: string;
|
||||
profilePictureUrl?: string;
|
||||
securityStamp: string;
|
||||
lockStamp: string;
|
||||
createdAt?: Date;
|
||||
expiresIn?: number;
|
||||
claim?: object;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue