@edirect/oidc-client 1.0.6 → 3.0.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.
Files changed (46) hide show
  1. package/.eslintrc.js +46 -0
  2. package/.husky/pre-commit +4 -0
  3. package/.husky/pre-push +4 -0
  4. package/.prettierrc.js +6 -0
  5. package/dist/connect.d.ts +11 -0
  6. package/dist/connect.js +42 -0
  7. package/dist/connect.js.map +1 -0
  8. package/dist/grant-type/client_credentials.d.ts +16 -0
  9. package/dist/grant-type/client_credentials.js +58 -0
  10. package/dist/grant-type/client_credentials.js.map +1 -0
  11. package/dist/grant-type/password.d.ts +14 -0
  12. package/dist/grant-type/password.js +58 -0
  13. package/dist/grant-type/password.js.map +1 -0
  14. package/dist/grant-type/sso.d.ts +14 -0
  15. package/dist/grant-type/sso.js +65 -0
  16. package/dist/grant-type/sso.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.js +41 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/token.d.ts +6 -0
  21. package/dist/token.js +23 -0
  22. package/dist/token.js.map +1 -0
  23. package/dist/types/connect.type.d.ts +12 -0
  24. package/dist/types/connect.type.js +3 -0
  25. package/dist/types/connect.type.js.map +1 -0
  26. package/dist/types/error-handler.type.d.ts +5 -0
  27. package/dist/types/error-handler.type.js +3 -0
  28. package/dist/types/error-handler.type.js.map +1 -0
  29. package/dist/types/token-set.type.d.ts +21 -0
  30. package/dist/types/token-set.type.js +3 -0
  31. package/dist/types/token-set.type.js.map +1 -0
  32. package/dist/utils/error-handler.d.ts +5 -0
  33. package/dist/utils/error-handler.js +13 -0
  34. package/dist/utils/error-handler.js.map +1 -0
  35. package/dist/utils/parse-token.d.ts +3 -0
  36. package/dist/utils/parse-token.js +26 -0
  37. package/dist/utils/parse-token.js.map +1 -0
  38. package/package.json +21 -14
  39. package/.eslintrc.json +0 -163
  40. package/src/connect.js +0 -53
  41. package/src/grant-type/client_credentials.js +0 -54
  42. package/src/grant-type/password.js +0 -54
  43. package/src/index.js +0 -14
  44. package/src/token.js +0 -23
  45. package/src/utils/error-handler.js +0 -15
  46. package/src/utils/parse-token.js +0 -27
package/.eslintrc.js ADDED
@@ -0,0 +1,46 @@
1
+ module.exports = {
2
+ root: true,
3
+ env: {
4
+ node: true,
5
+ es6: true,
6
+ },
7
+ parserOptions: {
8
+ ecmaFeatures: {
9
+ jsx: true,
10
+ },
11
+ ecmaVersion: 2018,
12
+ sourceType: 'module',
13
+ project: './tsconfig.json',
14
+ tsconfigRootDir: __dirname,
15
+ },
16
+ ignorePatterns: ['node_modules/*', 'dist/*', '!.prettierrc.js'],
17
+ extends: ['eslint:recommended'],
18
+ overrides: [
19
+ {
20
+ files: ['./src/**/*.ts'],
21
+ parser: '@typescript-eslint/parser',
22
+ settings: {
23
+ react: {
24
+ version: 'detect',
25
+ },
26
+ },
27
+ env: {
28
+ browser: true,
29
+ node: true,
30
+ es6: true,
31
+ },
32
+ extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
33
+ rules: {
34
+ '@typescript-eslint/no-unused-vars': ['error'],
35
+
36
+ '@typescript-eslint/explicit-function-return-type': [
37
+ 'warn',
38
+ {
39
+ allowExpressions: true,
40
+ allowConciseArrowFunctionExpressionsStartingWithVoid: true,
41
+ },
42
+ ],
43
+ },
44
+ },
45
+ ],
46
+ };
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ npm run lint
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ npm run build
package/.prettierrc.js ADDED
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ singleQuote: true,
3
+ trailingComma: "all",
4
+ tabWidth: 2,
5
+ semi: true,
6
+ };
@@ -0,0 +1,11 @@
1
+ import { Client } from 'openid-client';
2
+ import { ErrorHandlerType } from './types/error-handler.type';
3
+ import { Connect } from './types/connect.type';
4
+ export default class OidcConnect {
5
+ client: Client;
6
+ baseUrl: string;
7
+ redirectUri?: string;
8
+ ErrorHandler: ErrorHandlerType;
9
+ constructor();
10
+ connect({ baseUrl, oidcPath, clientId, clientSecret, redirectUri, responseTypes, grantTypes, timeout, }: Connect): Promise<Client>;
11
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const openid_client_1 = require("openid-client");
7
+ const http_1 = __importDefault(require("http"));
8
+ const https_1 = __importDefault(require("https"));
9
+ const error_handler_1 = __importDefault(require("./utils/error-handler"));
10
+ const httpAgent = new http_1.default.Agent({ keepAlive: true });
11
+ const httpsAgent = new https_1.default.Agent({ keepAlive: true });
12
+ class OidcConnect {
13
+ constructor() {
14
+ this.ErrorHandler = error_handler_1.default;
15
+ }
16
+ connect({ baseUrl, oidcPath, clientId, clientSecret, redirectUri, responseTypes, grantTypes, timeout, }) {
17
+ this.baseUrl = baseUrl;
18
+ this.redirectUri = redirectUri;
19
+ const oidcConfiguration = {
20
+ client_id: clientId,
21
+ client_secret: clientSecret,
22
+ redirect_uris: [redirectUri],
23
+ response_types: responseTypes,
24
+ grant_types: grantTypes,
25
+ };
26
+ const protocol = (baseUrl.includes('https') && 'https:') || 'http:';
27
+ const agent = (baseUrl.includes('https') && httpsAgent) || httpAgent;
28
+ if (openid_client_1.custom && openid_client_1.custom.setHttpOptionsDefaults) {
29
+ openid_client_1.custom.setHttpOptionsDefaults({
30
+ timeout: timeout || 60000,
31
+ protocol,
32
+ agent,
33
+ });
34
+ }
35
+ return openid_client_1.Issuer.discover(`${baseUrl}/${oidcPath}`).then((oidcIssuer) => {
36
+ this.client = new oidcIssuer.Client(oidcConfiguration);
37
+ return this.client;
38
+ });
39
+ }
40
+ }
41
+ exports.default = OidcConnect;
42
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":";;;;;AAAA,iDAAuE;AACvE,gDAAwB;AACxB,kDAA0B;AAE1B,0EAAiD;AAIjD,MAAM,SAAS,GAAG,IAAI,cAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,MAAM,UAAU,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAExD,MAAqB,WAAW;IAS9B;QACE,IAAI,CAAC,YAAY,GAAG,uBAAY,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,OAAO,GACC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,MAAM,iBAAiB,GAAmB;YACxC,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,YAAY;YAC3B,aAAa,EAAE,CAAC,WAAqB,CAAC;YACtC,cAAc,EAAE,aAAa;YAC7B,WAAW,EAAE,UAAU;SACxB,CAAC;QAEF,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,OAAO,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,SAAS,CAAC;QAErE,IAAI,sBAAM,IAAI,sBAAM,CAAC,sBAAsB,EAAE;YAC3C,sBAAM,CAAC,sBAAsB,CAAC;gBAC5B,OAAO,EAAE,OAAO,IAAI,KAAK;gBACzB,QAAQ;gBACR,KAAK;aACN,CAAC,CAAC;SACJ;QAED,OAAO,sBAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YACnE,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAlDD,8BAkDC"}
@@ -0,0 +1,16 @@
1
+ import { Client } from 'openid-client';
2
+ import OidcConnect from '../connect';
3
+ import { Connect } from '../types/connect.type';
4
+ import { GrantTypeErrorHandlerType } from '../types/error-handler.type';
5
+ import { TokenSet } from '../types/token-set.type';
6
+ declare class OidcClient extends OidcConnect {
7
+ errorHandler: GrantTypeErrorHandlerType;
8
+ setToken: (token: TokenSet, revert?: boolean) => TokenSet;
9
+ getToken: (revert?: boolean) => TokenSet | null;
10
+ constructor();
11
+ connect({ baseUrl, oidcPath, clientId, clientSecret, redirectUri, }: Connect): Promise<Client>;
12
+ getAccessToken(data: Record<string, unknown>): Promise<TokenSet | null | void>;
13
+ getRefreshToken(): Promise<void>;
14
+ }
15
+ export declare const oidc: OidcClient;
16
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.oidc = void 0;
16
+ const connect_1 = __importDefault(require("../connect"));
17
+ const token_1 = __importDefault(require("../token"));
18
+ const grantType = 'client_credentials';
19
+ class OidcClient extends connect_1.default {
20
+ constructor() {
21
+ super();
22
+ this.errorHandler = this.ErrorHandler(grantType);
23
+ const { getToken, setToken } = new token_1.default();
24
+ this.getToken = getToken;
25
+ this.setToken = setToken;
26
+ }
27
+ connect({ baseUrl, oidcPath, clientId, clientSecret, redirectUri, }) {
28
+ return super.connect({
29
+ baseUrl,
30
+ oidcPath,
31
+ clientId,
32
+ clientSecret,
33
+ redirectUri,
34
+ responseTypes: ['none'],
35
+ grantTypes: [grantType],
36
+ });
37
+ }
38
+ getAccessToken(data) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ if (!this.client)
41
+ throw new Error(`[${grantType}] Client not initialized.`);
42
+ if (this.getToken())
43
+ return this.getToken();
44
+ const params = Object.assign({ grant_type: grantType }, data);
45
+ return this.client
46
+ .grant(params)
47
+ .then((tokenSet) => this.setToken(tokenSet))
48
+ .catch(this.errorHandler);
49
+ });
50
+ }
51
+ getRefreshToken() {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ throw new Error(`[${grantType}] This method is not allowed to this grant type.`);
54
+ });
55
+ }
56
+ }
57
+ exports.oidc = new OidcClient();
58
+ //# sourceMappingURL=client_credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client_credentials.js","sourceRoot":"","sources":["../../src/grant-type/client_credentials.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,yDAAqC;AACrC,qDAA6B;AAK7B,MAAM,SAAS,GAAG,oBAAoB,CAAC;AAEvC,MAAM,UAAW,SAAQ,iBAAW;IAKlC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEjD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,eAAK,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,WAAW,GACH;QACR,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,WAAW;YACX,aAAa,EAAE,CAAC,MAAM,CAAC;YACvB,UAAU,EAAE,CAAC,SAAS,CAAC;SACxB,CAAC,CAAC;IACL,CAAC;IAEK,cAAc,CAClB,IAA6B;;YAE7B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,SAAS,2BAA2B,CAAC,CAAC;YAC5E,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE5C,MAAM,MAAM,mBACV,UAAU,EAAE,SAAS,IAClB,IAAI,CACR,CAAC;YAEF,OAAO,IAAI,CAAC,MAAM;iBACf,KAAK,CAAC,MAAM,CAAC;iBACb,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAA+B,CAAC,CAAC;iBAClE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;KAAA;IAEK,eAAe;;YACnB,MAAM,IAAI,KAAK,CACb,IAAI,SAAS,kDAAkD,CAChE,CAAC;QACJ,CAAC;KAAA;CACF;AAEY,QAAA,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Client } from 'openid-client';
2
+ import { Connect } from '../types/connect.type';
3
+ import { GrantTypeErrorHandlerType } from '../types/error-handler.type';
4
+ import { TokenSet } from '../types/token-set.type';
5
+ import OidcConnect from '../connect';
6
+ declare class OidcClient extends OidcConnect {
7
+ errorHandler: GrantTypeErrorHandlerType;
8
+ constructor();
9
+ connect({ baseUrl, oidcPath, clientId, clientSecret, redirectUri, }: Connect): Promise<Client>;
10
+ getAccessToken(data: Record<string, unknown>): Promise<TokenSet | null | void>;
11
+ getRefreshToken(tokenSet: TokenSet): Promise<TokenSet | null | void>;
12
+ }
13
+ export declare const oidc: OidcClient;
14
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.oidc = void 0;
16
+ const connect_1 = __importDefault(require("../connect"));
17
+ const parse_token_1 = __importDefault(require("../utils/parse-token"));
18
+ const grantType = 'password';
19
+ class OidcClient extends connect_1.default {
20
+ constructor() {
21
+ super();
22
+ this.errorHandler = this.ErrorHandler(grantType);
23
+ }
24
+ connect({ baseUrl, oidcPath, clientId, clientSecret, redirectUri, }) {
25
+ return super.connect({
26
+ baseUrl,
27
+ oidcPath,
28
+ clientId,
29
+ clientSecret,
30
+ redirectUri,
31
+ responseTypes: ['none'],
32
+ grantTypes: [grantType, 'refresh_token'],
33
+ });
34
+ }
35
+ getAccessToken(data) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ if (!this.client)
38
+ throw new Error(`[${grantType}] Client not initialized.`);
39
+ const params = Object.assign({ grant_type: grantType }, data);
40
+ return this.client
41
+ .grant(params)
42
+ .then((tokenSet) => (0, parse_token_1.default)(tokenSet))
43
+ .catch(this.errorHandler);
44
+ });
45
+ }
46
+ getRefreshToken(tokenSet) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ if (!this.client)
49
+ throw new Error(`[${grantType}] Client not initialized.`);
50
+ return this.client
51
+ .refresh(tokenSet.refreshToken)
52
+ .then((tokenSet) => (0, parse_token_1.default)(tokenSet))
53
+ .catch(this.errorHandler);
54
+ });
55
+ }
56
+ }
57
+ exports.oidc = new OidcClient();
58
+ //# sourceMappingURL=password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/grant-type/password.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAKA,yDAAqC;AACrC,uEAA8C;AAE9C,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B,MAAM,UAAW,SAAQ,iBAAW;IAGlC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,WAAW,GACH;QACR,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,WAAW;YACX,aAAa,EAAE,CAAC,MAAM,CAAC;YACvB,UAAU,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAEK,cAAc,CAClB,IAA6B;;YAE7B,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,SAAS,2BAA2B,CAAC,CAAC;YAE5E,MAAM,MAAM,mBACV,UAAU,EAAE,SAAS,IAClB,IAAI,CACR,CAAC;YAEF,OAAO,IAAI,CAAC,MAAM;iBACf,KAAK,CAAC,MAAM,CAAC;iBACb,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,QAA+B,CAAC,CAAC;iBAC/D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;KAAA;IAEK,eAAe,CAAC,QAAkB;;YACtC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,IAAI,SAAS,2BAA2B,CAAC,CAAC;YAE5E,OAAO,IAAI,CAAC,MAAM;iBACf,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;iBAC9B,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,QAA+B,CAAC,CAAC;iBAC/D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;KAAA;CACF;AAEY,QAAA,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Client } from 'openid-client';
2
+ import OidcConnect from '../connect';
3
+ import { Connect } from '../types/connect.type';
4
+ import { TokenSet } from '../types/token-set.type';
5
+ import { GrantTypeErrorHandlerType } from '../types/error-handler.type';
6
+ declare class OidcClient extends OidcConnect {
7
+ errorHandler: GrantTypeErrorHandlerType;
8
+ constructor();
9
+ connect({ baseUrl, oidcPath, clientId, clientSecret, redirectUri, }: Connect): Promise<Client>;
10
+ getAccessToken(data: Record<string, unknown>): Promise<TokenSet | null | void>;
11
+ getRefreshToken(tokenSet: TokenSet): Promise<TokenSet | null | void>;
12
+ }
13
+ export declare const oidc: OidcClient;
14
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.oidc = void 0;
16
+ const connect_1 = __importDefault(require("../connect"));
17
+ const parse_token_1 = __importDefault(require("../utils/parse-token"));
18
+ const grantType = 'sso';
19
+ class OidcClient extends connect_1.default {
20
+ constructor() {
21
+ super();
22
+ this.errorHandler = this.ErrorHandler(grantType);
23
+ }
24
+ connect({ baseUrl, oidcPath, clientId, clientSecret, redirectUri, }) {
25
+ return super.connect({
26
+ baseUrl,
27
+ oidcPath,
28
+ clientId,
29
+ clientSecret,
30
+ redirectUri,
31
+ responseTypes: ['none'],
32
+ grantTypes: ['sso', 'refresh_token'],
33
+ });
34
+ }
35
+ getAccessToken(data) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ try {
38
+ const params = Object.assign({ grant_type: 'sso' }, data);
39
+ return this.client
40
+ .grant(params)
41
+ .then((tokenSet) => (0, parse_token_1.default)(tokenSet))
42
+ .catch(this.errorHandler);
43
+ }
44
+ catch (error) {
45
+ return null;
46
+ }
47
+ });
48
+ }
49
+ getRefreshToken(tokenSet) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ try {
52
+ const refreshTokenSet = yield this.client
53
+ .refresh(tokenSet.refreshToken)
54
+ .then((tokenSet) => (0, parse_token_1.default)(tokenSet))
55
+ .catch(this.errorHandler);
56
+ return refreshTokenSet;
57
+ }
58
+ catch (error) {
59
+ return null;
60
+ }
61
+ });
62
+ }
63
+ }
64
+ exports.oidc = new OidcClient();
65
+ //# sourceMappingURL=sso.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sso.js","sourceRoot":"","sources":["../../src/grant-type/sso.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,yDAAqC;AAIrC,uEAA8C;AAE9C,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,MAAM,UAAW,SAAQ,iBAAW;IAGlC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,CAAC,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,WAAW,GACH;QACR,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,WAAW;YACX,aAAa,EAAE,CAAC,MAAM,CAAC;YACvB,UAAU,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAEK,cAAc,CAClB,IAA6B;;YAE7B,IAAI;gBACF,MAAM,MAAM,mBACV,UAAU,EAAE,KAAK,IACd,IAAI,CACR,CAAC;gBAEF,OAAO,IAAI,CAAC,MAAM;qBACf,KAAK,CAAC,MAAM,CAAC;qBACb,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,QAA+B,CAAC,CAAC;qBAC/D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;aAC7B;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,IAAI,CAAC;aACb;QACH,CAAC;KAAA;IAEK,eAAe,CAAC,QAAkB;;YACtC,IAAI;gBACF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM;qBACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;qBAC9B,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAA,qBAAU,EAAC,QAA+B,CAAC,CAAC;qBAC/D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE5B,OAAO,eAAe,CAAC;aACxB;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,IAAI,CAAC;aACb;QACH,CAAC;KAAA;CACF;AAEY,QAAA,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Connect } from './types/connect.type';
2
+ declare const _default: (params: Connect) => Promise<unknown>;
3
+ export default _default;
package/dist/index.js ADDED
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.default = (params) => __awaiter(void 0, void 0, void 0, function* () {
32
+ const { oidc } = yield Promise.resolve().then(() => __importStar(require(`./grant-type/${params.grantType}`)));
33
+ yield oidc.connect({
34
+ baseUrl: params.baseUrl,
35
+ oidcPath: params.oidcPath,
36
+ clientId: params.clientId,
37
+ clientSecret: params.clientSecret,
38
+ });
39
+ return oidc;
40
+ });
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,kBAAe,CAAO,MAAe,EAAoB,EAAE;IACzD,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,gBAAgB,MAAM,CAAC,SAAS,EAAE,GAAC,CAAC;IAElE,MAAM,IAAI,CAAC,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC,CAAA,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { TokenSet } from './types/token-set.type';
2
+ export default class Token {
3
+ token: TokenSet;
4
+ setToken(token: TokenSet, revert?: boolean): TokenSet;
5
+ getToken(revert?: boolean): TokenSet | null;
6
+ }
package/dist/token.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const parse_token_1 = __importDefault(require("./utils/parse-token"));
7
+ class Token {
8
+ setToken(token, revert = false) {
9
+ this.token = (0, parse_token_1.default)(token, revert);
10
+ return this.token;
11
+ }
12
+ getToken(revert = false) {
13
+ if (!this.token)
14
+ return null;
15
+ const expiresAt = this.token.expiresAt || this.token.expires_at;
16
+ const now = Math.floor(new Date().getTime() / 1000);
17
+ if (expiresAt - 60 <= now)
18
+ return null;
19
+ return (revert && (0, parse_token_1.default)(this.token, revert)) || this.token;
20
+ }
21
+ }
22
+ exports.default = Token;
23
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":";;;;;AACA,sEAA6C;AAE7C,MAAqB,KAAK;IAGxB,QAAQ,CAAC,KAAe,EAAE,MAAM,GAAG,KAAK;QACtC,IAAI,CAAC,KAAK,GAAG,IAAA,qBAAU,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,MAAM,GAAG,KAAK;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAEpD,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC;QAEvC,OAAO,CAAC,MAAM,IAAI,IAAA,qBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;IAClE,CAAC;CACF;AAnBD,wBAmBC"}
@@ -0,0 +1,12 @@
1
+ import { ResponseType } from 'openid-client';
2
+ export declare type Connect = {
3
+ grantType?: string;
4
+ baseUrl: string;
5
+ oidcPath: string;
6
+ clientId: string;
7
+ clientSecret: string;
8
+ responseTypes?: ResponseType[];
9
+ grantTypes?: string[];
10
+ timeout?: number;
11
+ redirectUri?: string;
12
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=connect.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.type.js","sourceRoot":"","sources":["../../src/types/connect.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export declare type GrantTypeErrorHandlerType = (error: Error & {
2
+ code?: number;
3
+ url?: string;
4
+ }) => void;
5
+ export declare type ErrorHandlerType = (grantType: string) => GrantTypeErrorHandlerType;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=error-handler.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.type.js","sourceRoot":"","sources":["../../src/types/error-handler.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ export declare type TokenSetParsed = {
2
+ accessToken: string;
3
+ expiresAt: number;
4
+ expiresIn: number;
5
+ idToken: string;
6
+ refreshToken: string;
7
+ scope: string;
8
+ sessionState: string;
9
+ tokenType: string;
10
+ };
11
+ export declare type TokenSetSource = {
12
+ access_token: string;
13
+ expires_at: number;
14
+ expires_in: number;
15
+ id_token: string;
16
+ refresh_token: string;
17
+ scope: string;
18
+ session_state: string;
19
+ token_type: string;
20
+ };
21
+ export declare type TokenSet = TokenSetSource & TokenSetParsed;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=token-set.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-set.type.js","sourceRoot":"","sources":["../../src/types/token-set.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ declare const _default: (grantType: string) => (error: Error & {
2
+ code?: number;
3
+ url?: string;
4
+ }) => never;
5
+ export default _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = (grantType) => (error) => {
4
+ const { name, code, url, message } = error;
5
+ if (name && code && url) {
6
+ throw new Error(`[${grantType}] Error: ${JSON.stringify({ name, code, url })}`);
7
+ }
8
+ if (message) {
9
+ throw new Error(`[${grantType}] Error: ${message}`);
10
+ }
11
+ throw error;
12
+ };
13
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":";;AAAA,kBAAe,CAAC,SAAiB,EAAE,EAAE,CACnC,CAAC,KAA8C,EAAE,EAAE;IACjD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE3C,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE;QACvB,MAAM,IAAI,KAAK,CACb,IAAI,SAAS,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAC/D,CAAC;KACH;IAED,IAAI,OAAO,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,IAAI,SAAS,YAAY,OAAO,EAAE,CAAC,CAAC;KACrD;IAED,MAAM,KAAK,CAAC;AACd,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { TokenSet } from '../types/token-set.type';
2
+ declare const _default: (tokenSet: TokenSet, revert?: boolean) => TokenSet;
3
+ export default _default;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tokenMapper = {
4
+ accessToken: 'access_token',
5
+ expiresAt: 'expires_at',
6
+ expiresIn: 'expires_in',
7
+ idToken: 'id_token',
8
+ refreshToken: 'refresh_token',
9
+ scope: 'scope',
10
+ sessionState: 'session_state',
11
+ tokenType: 'token_type',
12
+ };
13
+ exports.default = (tokenSet, revert = false) => {
14
+ const tokenSetParsed = {};
15
+ Object.keys(tokenMapper).forEach((mapperKey) => {
16
+ const key = ((revert && tokenMapper[mapperKey]) ||
17
+ mapperKey);
18
+ const value = (revert && tokenSet[mapperKey]) ||
19
+ tokenSet[tokenMapper[mapperKey]];
20
+ if (typeof value !== 'undefined') {
21
+ tokenSetParsed[key] = value;
22
+ }
23
+ });
24
+ return tokenSetParsed;
25
+ };
26
+ //# sourceMappingURL=parse-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-token.js","sourceRoot":"","sources":["../../src/utils/parse-token.ts"],"names":[],"mappings":";;AAMA,MAAM,WAAW,GAAuD;IACtE,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,UAAU;IACnB,YAAY,EAAE,eAAe;IAC7B,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,YAAY;CACxB,CAAC;AAEF,kBAAe,CAAC,QAAkB,EAAE,MAAM,GAAG,KAAK,EAAY,EAAE;IAC9D,MAAM,cAAc,GAAG,EAAqC,CAAC;IAE7D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,SAAiC,CAAC,CAAC;YACrE,SAAS,CAAyB,CAAC;QACrC,MAAM,KAAK,GACT,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAiC,CAAC,CAAC;YACvD,QAAQ,CAAC,WAAW,CAAC,SAAiC,CAAC,CAAC,CAAC;QAE3D,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAChC,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SAC7B;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,cAA0B,CAAC;AACpC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,32 +1,39 @@
1
1
  {
2
2
  "name": "@edirect/oidc-client",
3
- "version": "1.0.6",
3
+ "version": "3.0.0",
4
4
  "description": "OpenId Connect Client",
5
- "main": "src/index.js",
5
+ "author": "Bolttech <devs@bolttech.io>",
6
+ "license": "UNLICENSED",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
6
9
  "packageScope": "@edirect",
7
- "author": "EDirectInsure",
8
- "license": "ISC",
9
10
  "engines": {
10
- "node": "^10.x.x"
11
+ "node": "^14.x.x"
11
12
  },
12
13
  "scripts": {
13
- "eslint": "./node_modules/eslint/bin/eslint.js ./ --fix"
14
+ "build": "npm run clean && npx tsc --project tsconfig.json",
15
+ "clean": "rimraf dist",
16
+ "lint": "npm run eslint && npm run prettier",
17
+ "prettier": "prettier --parser typescript --single-quote --write \"./src/**/*.ts\"",
18
+ "eslint": "eslint --fix \"./src/**/*.ts\""
14
19
  },
15
20
  "dependencies": {
16
21
  "openid-client": "^3.8.3"
17
22
  },
18
23
  "devDependencies": {
19
- "eslint": "^6.7.2",
20
- "eslint-config-standard": "^14.1.0",
21
- "eslint-plugin-import": "^2.18.2",
22
- "eslint-plugin-node": "^10.0.0",
23
- "eslint-plugin-promise": "^4.2.1",
24
- "eslint-plugin-standard": "^4.0.1",
25
- "husky": "^3.1.0"
24
+ "@types/node": "^17.0.12",
25
+ "@typescript-eslint/eslint-plugin": "^5.10.1",
26
+ "@typescript-eslint/parser": "^5.10.1",
27
+ "eslint": "^8.7.0",
28
+ "husky": "^7.0.4",
29
+ "prettier": "^2.5.1",
30
+ "rimraf": "^3.0.2",
31
+ "typescript": "^4.5.5"
26
32
  },
27
33
  "husky": {
28
34
  "hooks": {
29
- "pre-commit": "npm run eslint"
35
+ "pre-commit": "npm run lint",
36
+ "pre-push": "npm run build"
30
37
  }
31
38
  }
32
39
  }
package/.eslintrc.json DELETED
@@ -1,163 +0,0 @@
1
- {
2
- "extends": [
3
- "standard",
4
- "plugin:node/recommended",
5
- "plugin:promise/recommended",
6
- "plugin:import/errors",
7
- "plugin:import/warnings"
8
- ],
9
- "plugins": [
10
- "standard"
11
- ],
12
- "rules": {
13
- "camelcase": [
14
- 0
15
- ],
16
- "indent": [
17
- 2,
18
- 2,
19
- {
20
- "SwitchCase": 2
21
- }
22
- ],
23
- "object-curly-spacing": [
24
- "error",
25
- "always"
26
- ],
27
- "eqeqeq": [
28
- "error",
29
- "always"
30
- ],
31
- "no-else-return": [
32
- "error",
33
- {
34
- "allowElseIf": false
35
- }
36
- ],
37
- "no-multi-spaces": "error",
38
- "no-new-wrappers": "error",
39
- "no-redeclare": "error",
40
- "no-undef-init": "error",
41
- "no-unused-vars": "error",
42
- "no-use-before-define": [
43
- "error",
44
- {
45
- "functions": false
46
- }
47
- ],
48
- "comma-dangle": [
49
- "error",
50
- "never"
51
- ],
52
- "comma-spacing": [
53
- "error",
54
- {
55
- "before": false,
56
- "after": true
57
- }
58
- ],
59
- "comma-style": [
60
- "error",
61
- "last"
62
- ],
63
- "no-implied-eval": "error",
64
- "no-mixed-operators": "off",
65
- "node/exports-style": [
66
- "error",
67
- "module.exports"
68
- ],
69
- "node/no-unpublished-require": "off",
70
- "promise/no-callback-in-promise": "off",
71
- "promise/no-nesting": "off",
72
- "max-len": [
73
- "error",
74
- {
75
- "code": 120,
76
- "tabWidth": 2,
77
- "comments": 100,
78
- "ignoreTrailingComments": true,
79
- "ignoreUrls": true,
80
- "ignoreStrings": true,
81
- "ignoreTemplateLiterals": true,
82
- "ignoreRegExpLiterals": true
83
- }
84
- ],
85
- "max-lines": [
86
- "error",
87
- {
88
- "max": 400,
89
- "skipBlankLines": true,
90
- "skipComments": true
91
- }
92
- ],
93
- "complexity": [
94
- "error",
95
- {
96
- "max": 20
97
- }
98
- ],
99
- "prefer-arrow-callback": [
100
- "error",
101
- {
102
- "allowNamedFunctions": false,
103
- "allowUnboundThis": true
104
- }
105
- ],
106
- "arrow-parens": [
107
- 2,
108
- "as-needed"
109
- ],
110
- "dot-notation": [
111
- "error",
112
- {
113
- "allowKeywords": true
114
- }
115
- ],
116
- "require-atomic-updates": "error",
117
- "no-regex-spaces": "error",
118
- "no-template-curly-in-string": "error",
119
- "no-unreachable": "error",
120
- "no-return-await": "error",
121
- "no-return-assign": "error",
122
- "no-unused-expressions": "error",
123
- "no-useless-return": "error",
124
- "no-throw-literal": "error",
125
- "handle-callback-err": "error",
126
- "key-spacing": [
127
- "error",
128
- {
129
- "beforeColon": false,
130
- "afterColon": true,
131
- "mode": "strict"
132
- }
133
- ],
134
- "linebreak-style": [
135
- "error",
136
- "unix"
137
- ],
138
- "no-trailing-spaces": "error",
139
- "no-whitespace-before-property": "error",
140
- "no-unneeded-ternary": "error",
141
- "prefer-object-spread": "error",
142
- "array-callback-return": "error",
143
- "arrow-body-style": [
144
- "error",
145
- "as-needed"
146
- ],
147
- "semi": [
148
- "error",
149
- "always"
150
- ],
151
- "node/no-extraneous-require": [
152
- "error",
153
- {
154
- "allowModules": ["qs"]
155
- }
156
- ],
157
- "space-before-function-paren": 0,
158
- "array-bracket-spacing": 0
159
- },
160
- "globals": {
161
- "logs": true
162
- }
163
- }
package/src/connect.js DELETED
@@ -1,53 +0,0 @@
1
- 'use strict';
2
-
3
- const { custom, Issuer } = require('openid-client');
4
- const http = require('http');
5
- const https = require('https');
6
- const httpAgent = new http.Agent({ keepAlive: true });
7
- const httpsAgent = new https.Agent({ keepAlive: true });
8
- const ErrorHandler = require('./utils/error-handler');
9
-
10
- class OidcConnect {
11
- constructor() {
12
- this.ErrorHandler = ErrorHandler;
13
- }
14
-
15
- connect({
16
- baseUrl,
17
- oidcPath,
18
- clientId,
19
- clientSecret,
20
- redirectUri,
21
- responseTypes,
22
- grantTypes,
23
- timeout
24
- }) {
25
- this.baseUrl = baseUrl;
26
- this.redirectUri = redirectUri;
27
-
28
- const oidcConfiguration = {
29
- client_id: clientId,
30
- client_secret: clientSecret,
31
- redirect_uris: [redirectUri],
32
- response_types: responseTypes,
33
- grant_types: grantTypes
34
- };
35
-
36
- const protocol = (baseUrl.includes('https') && 'https:') || 'http:';
37
- const agent = (baseUrl.includes('https') && httpsAgent) || httpAgent;
38
-
39
- if (custom && custom.setHttpOptionsDefaults) {
40
- custom.setHttpOptionsDefaults({
41
- timeout: timeout || 60000, protocol, agent
42
- });
43
- }
44
-
45
- return Issuer.discover(`${baseUrl}/${oidcPath}`)
46
- .then(oidcIssuer => {
47
- this.client = new oidcIssuer.Client(oidcConfiguration);
48
- return this.client;
49
- });
50
- }
51
- }
52
-
53
- module.exports = OidcConnect;
@@ -1,54 +0,0 @@
1
- 'use strict';
2
-
3
- const grantType = 'client_credentials';
4
- const OidcConnect = require('../connect');
5
- const Token = require('../token');
6
-
7
- class OidcClient extends OidcConnect {
8
- constructor() {
9
- super();
10
- this.errorHandler = this.ErrorHandler(grantType);
11
-
12
- const { getToken, setToken } = new Token();
13
- this.getToken = getToken;
14
- this.setToken = setToken;
15
- }
16
-
17
- connect({
18
- baseUrl,
19
- oidcPath,
20
- clientId,
21
- clientSecret,
22
- redirectUri
23
- }) {
24
- return super.connect({
25
- baseUrl,
26
- oidcPath,
27
- clientId,
28
- clientSecret,
29
- redirectUri,
30
- responseTypes: ['none'],
31
- grantTypes: [grantType]
32
- });
33
- }
34
-
35
- async getAccessToken(data) {
36
- if (!this.client) throw new Error(`[${grantType}] Client not initialized.`);
37
- if (this.getToken()) return this.getToken();
38
-
39
- const params = {
40
- grant_type: grantType,
41
- ...data
42
- };
43
-
44
- return this.client.grant(params)
45
- .then(tokenSet => this.setToken(tokenSet))
46
- .catch(this.errorHandler);
47
- }
48
-
49
- async getRefreshToken() {
50
- throw new Error(`[${grantType}] This method is not allowed to this grant type.`);
51
- }
52
- }
53
-
54
- module.exports = new OidcClient();
@@ -1,54 +0,0 @@
1
- 'use strict';
2
-
3
- const grantType = 'password';
4
- const OidcConnect = require('../connect');
5
- const parseToken = require('../utils/parse-token');
6
-
7
- class OidcClient extends OidcConnect {
8
- constructor() {
9
- super();
10
- this.errorHandler = this.ErrorHandler(grantType);
11
- }
12
-
13
- connect({
14
- baseUrl,
15
- oidcPath,
16
- clientId,
17
- clientSecret,
18
- redirectUri
19
- }) {
20
- return super.connect({
21
- baseUrl,
22
- oidcPath,
23
- clientId,
24
- clientSecret,
25
- redirectUri,
26
- responseTypes: ['none'],
27
- grantTypes: [grantType, 'refresh_token']
28
- });
29
- }
30
-
31
- async getAccessToken(data) {
32
- if (!this.client) throw new Error(`[${grantType}] Client not initialized.`);
33
-
34
- const params = {
35
- grant_type: grantType,
36
- ...data
37
- };
38
-
39
- return this.client.grant(params)
40
- .then(tokenSet => parseToken(tokenSet))
41
- .catch(this.errorHandler);
42
- }
43
-
44
- async getRefreshToken(tokenSet) {
45
- if (!this.client) throw new Error(`[${grantType}] Client not initialized.`);
46
-
47
- return this.client
48
- .refresh(tokenSet.refreshToken)
49
- .then(tokenSet => parseToken(tokenSet))
50
- .catch(this.errorHandler);
51
- }
52
- }
53
-
54
- module.exports = new OidcClient();
package/src/index.js DELETED
@@ -1,14 +0,0 @@
1
- 'use strict';
2
-
3
- module.exports = async params => {
4
- const oidc = require(`./grant-type/${params.grantType}`);
5
-
6
- await oidc.connect({
7
- baseUrl: params.baseUrl,
8
- oidcPath: params.oidcPath,
9
- clientId: params.clientId,
10
- clientSecret: params.clientSecret
11
- });
12
-
13
- return oidc;
14
- };
package/src/token.js DELETED
@@ -1,23 +0,0 @@
1
- 'use strict';
2
-
3
- const parseToken = require('./utils/parse-token');
4
-
5
- class Token {
6
- setToken(token, revert = false) {
7
- this.token = parseToken(token, revert);
8
- return this.token;
9
- }
10
-
11
- getToken(revert = false) {
12
- if (!this.token) return null;
13
-
14
- const expiresAt = this.token.expiresAt || this.token.expires_at;
15
- const now = Math.floor((new Date()).getTime() / 1000);
16
-
17
- if ((expiresAt - 60) <= now) return null;
18
-
19
- return (revert && parseToken(this.token, revert)) || this.token;
20
- }
21
- }
22
-
23
- module.exports = Token;
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- module.exports = grantType => error => {
4
- const { name, code, url, message } = error;
5
-
6
- if (name && code && url) {
7
- throw new Error(`[${grantType}] Error: ${JSON.stringify({ name, code, url })}`);
8
- }
9
-
10
- if (message) {
11
- throw new Error(`[${grantType}] Error: ${message}`);
12
- }
13
-
14
- throw error;
15
- };
@@ -1,27 +0,0 @@
1
- 'use strict';
2
-
3
- const tokenMapper = {
4
- accessToken: 'access_token',
5
- expiresAt: 'expires_at',
6
- expiresIn: 'expires_in',
7
- idToken: 'id_token',
8
- refreshToken: 'refresh_token',
9
- scope: 'scope',
10
- sessionState: 'session_state',
11
- tokenType: 'token_type'
12
- };
13
-
14
- module.exports = (tokenSet, revert = false) => {
15
- const tokenSetParsed = {};
16
-
17
- Object.keys(tokenMapper).forEach(mapperKey => {
18
- const key = revert && tokenMapper[mapperKey] || mapperKey;
19
- const value = revert && tokenSet[mapperKey] || tokenSet[tokenMapper[mapperKey]];
20
-
21
- if (typeof value !== 'undefined') {
22
- tokenSetParsed[key] = value;
23
- }
24
- });
25
-
26
- return tokenSetParsed;
27
- };