@alexdevco/passport 1.0.9 → 1.0.11

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.
@@ -1,5 +1,19 @@
1
1
  import type { IPayload, IVerifyResult } from './token.interface';
2
+ /**
3
+ * Интерфейс стратегии JWT.
4
+ * Определяет методы для генерации и верификации JWT токенов.
5
+ */
2
6
  export interface IJWTStrategy {
7
+ /**
8
+ * Генерирует JWT токен на основе полезной нагрузки.
9
+ * @param payload - Данные для включения в токен.
10
+ * @returns Строка с JWT токеном.
11
+ */
3
12
  generate(payload: IPayload): string;
13
+ /**
14
+ * Проверяет действительность JWT токена.
15
+ * @param token - Токен для проверки.
16
+ * @returns Результат проверки токена.
17
+ */
4
18
  verify(token: string): IVerifyResult;
5
19
  }
@@ -1,6 +1,18 @@
1
1
  import type { FactoryProvider, ModuleMetadata } from '@nestjs/common';
2
2
  import { IPassportOptions } from './passport-options.interface';
3
+ /**
4
+ * Интерфейс для асинхронной конфигурации модуля Passport.
5
+ * Позволяет настраивать параметры Passport с использованием фабричной функции,
6
+ * что особенно полезно когда параметры зависят от других сервисов или асинхронных операций.
7
+ */
3
8
  export interface IPassportAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
9
+ /**
10
+ * Фабричная функция, которая создает параметры Passport.
11
+ * Может возвращать параметры напрямую или через Promise.
12
+ */
4
13
  useFactory: (...args: any[]) => Promise<IPassportOptions> | IPassportOptions;
14
+ /**
15
+ * Опциональный массив токенов зависимостей, которые будут внедрены в useFactory.
16
+ */
5
17
  inject?: FactoryProvider['inject'];
6
18
  }
@@ -1,5 +1,20 @@
1
+ /**
2
+ * Интерфейс параметров конфигурации для модуля Passport.
3
+ * Определяет основные настройки, необходимые для работы с JWT токенами.
4
+ */
1
5
  export interface IPassportOptions {
6
+ /**
7
+ * Секретный ключ, используемый для подписи JWT токенов.
8
+ */
2
9
  secretKey: string;
10
+ /**
11
+ * Публичный ключ, используемый для верификации JWT токенов.
12
+ * Обязателен для асимметричных алгоритмов (например, RS256).
13
+ */
3
14
  publicKey?: string;
15
+ /**
16
+ * Алгоритм шифрования, используемый для создания и проверки токенов.
17
+ * Например: 'HS256', 'RS256' и т.д.
18
+ */
4
19
  strategy: string;
5
20
  }
@@ -1,15 +1,55 @@
1
+ /**
2
+ * Интерфейс полезной нагрузки JWT токена (Payload).
3
+ * Содержит информацию о пользователе и метаданные токена.
4
+ */
1
5
  export interface IPayload {
6
+ /**
7
+ * Идентификатор (Subject ID) - уникальный идентификатор пользователя.
8
+ */
2
9
  sub: string | number;
10
+ /**
11
+ * Имя пользователя .
12
+ */
3
13
  name: string;
14
+ /**
15
+ * Время выпуска токена (Issued At) в секундах since Unix epoch.
16
+ */
4
17
  iat: number;
18
+ /**
19
+ * Время истечения срока действия токена (Expiration Time) в секундах since Unix epoch.
20
+ */
5
21
  exp: number;
6
22
  }
23
+ /**
24
+ * Интерфейс заголовка JWT токена (Header).
25
+ * Определяет тип токена и алгоритм шифрования.
26
+ */
7
27
  export interface IHeader {
28
+ /**
29
+ * Алгоритм шифрования, используемый для подписи токена.
30
+ * Например: 'HS256', 'RS256'
31
+ */
8
32
  alg: string;
33
+ /**
34
+ * Тип токена, обычно 'JWT'.
35
+ */
9
36
  typ: string;
10
37
  }
38
+ /**
39
+ * Интерфейс результата верификации токена.
40
+ * Содержит информацию о валидности токена и причине отказа, если он недействителен.
41
+ */
11
42
  export interface IVerifyResult {
43
+ /**
44
+ * Флаг, указывающий, является ли токен действительным.
45
+ */
12
46
  valid: boolean;
47
+ /**
48
+ * Причина, по которой токен недействителен (если применимо).
49
+ */
13
50
  reason?: string;
51
+ /**
52
+ * Полезная нагрузка токена, если он действителен.
53
+ */
14
54
  payload?: IPayload;
15
55
  }
@@ -1,6 +1,18 @@
1
1
  import { type DynamicModule } from '@nestjs/common';
2
2
  import type { IPassportAsyncOptions, IPassportOptions } from './interfaces';
3
3
  export declare class PassportModule {
4
+ /**
5
+ * Регистрирует модуль паспорта с синхронными опциями конфигурации.
6
+ *
7
+ * @param options - Объект с параметрами конфигурации паспорта.
8
+ * @returns Динамический модуль NestJS с настроенными провайдерами и экспортируемыми сервисами.
9
+ */
4
10
  static register(options: IPassportOptions): DynamicModule;
11
+ /**
12
+ * Регистрирует модуль паспорта с асинхронными опциями конфигурации.
13
+ *
14
+ * @param options - Объект с асинхронными параметрами конфигурации паспорта.
15
+ * @returns Динамический модуль NestJS с настроенными провайдерами и экспортируемыми сервисами.
16
+ */
5
17
  static registerAsync(options: IPassportAsyncOptions): DynamicModule;
6
18
  }
@@ -13,6 +13,12 @@ const constants_1 = require("./constants");
13
13
  const passport_providers_1 = require("./passport.providers");
14
14
  const passport_service_1 = require("./passport.service");
15
15
  let PassportModule = PassportModule_1 = class PassportModule {
16
+ /**
17
+ * Регистрирует модуль паспорта с синхронными опциями конфигурации.
18
+ *
19
+ * @param options - Объект с параметрами конфигурации паспорта.
20
+ * @returns Динамический модуль NestJS с настроенными провайдерами и экспортируемыми сервисами.
21
+ */
16
22
  static register(options) {
17
23
  const optionsProvider = (0, passport_providers_1.createPassportOptionsProvider)(options);
18
24
  return {
@@ -21,6 +27,12 @@ let PassportModule = PassportModule_1 = class PassportModule {
21
27
  exports: [passport_service_1.PassportService, constants_1.PASSPORT_OPTIONS]
22
28
  };
23
29
  }
30
+ /**
31
+ * Регистрирует модуль паспорта с асинхронными опциями конфигурации.
32
+ *
33
+ * @param options - Объект с асинхронными параметрами конфигурации паспорта.
34
+ * @returns Динамический модуль NestJS с настроенными провайдерами и экспортируемыми сервисами.
35
+ */
24
36
  static registerAsync(options) {
25
37
  const optionProvider = (0, passport_providers_1.createPassportAsyncOptionsProvider)(options);
26
38
  return {
@@ -1,4 +1,16 @@
1
1
  import type { Provider } from '@nestjs/common';
2
2
  import type { IPassportAsyncOptions, IPassportOptions } from './interfaces';
3
+ /**
4
+ * Создает провайдер для синхронных опций паспорта.
5
+ *
6
+ * @param options - Синхронные опции паспорта
7
+ * @returns Провайдер NestJS с замороженными опциями паспорта
8
+ */
3
9
  export declare function createPassportOptionsProvider(options: IPassportOptions): Provider;
10
+ /**
11
+ * Создает асинхронный провайдер для опций паспорта.
12
+ *
13
+ * @param options - Асинхронные опции паспорта
14
+ * @returns Провайдер NestJS с асинхронно разрешенными и замороженными опциями паспорта
15
+ */
4
16
  export declare function createPassportAsyncOptionsProvider(options: IPassportAsyncOptions): Provider;
@@ -3,12 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createPassportOptionsProvider = createPassportOptionsProvider;
4
4
  exports.createPassportAsyncOptionsProvider = createPassportAsyncOptionsProvider;
5
5
  const constants_1 = require("./constants");
6
+ /**
7
+ * Создает провайдер для синхронных опций паспорта.
8
+ *
9
+ * @param options - Синхронные опции паспорта
10
+ * @returns Провайдер NestJS с замороженными опциями паспорта
11
+ */
6
12
  function createPassportOptionsProvider(options) {
7
13
  return {
8
14
  provide: constants_1.PASSPORT_OPTIONS,
9
15
  useValue: Object.freeze({ ...options })
10
16
  };
11
17
  }
18
+ /**
19
+ * Создает асинхронный провайдер для опций паспорта.
20
+ *
21
+ * @param options - Асинхронные опции паспорта
22
+ * @returns Провайдер NestJS с асинхронно разрешенными и замороженными опциями паспорта
23
+ */
12
24
  function createPassportAsyncOptionsProvider(options) {
13
25
  return {
14
26
  provide: constants_1.PASSPORT_OPTIONS,
@@ -1,10 +1,24 @@
1
1
  import { IPassportOptions, IPayload, IVerifyResult } from './interfaces';
2
+ /**
3
+ * Сервис для работы с JWT токенами.
4
+ * Обеспечивает генерацию и верификацию токенов с использованием заданной стратегии.
5
+ */
2
6
  export declare class PassportService {
3
7
  private readonly options;
4
8
  private readonly SECRET_KEY;
5
9
  private readonly PUBLIC_KEY;
6
10
  private readonly strategy;
7
11
  constructor(options: IPassportOptions);
12
+ /**
13
+ * Генерирует JWT токен на основе переданного payload
14
+ * @param payload - данные для включения в токен
15
+ * @returns JWT токен в виде строки
16
+ */
8
17
  generate(payload: IPayload): string;
18
+ /**
19
+ * Проверяет JWT токен и возвращает результат верификации
20
+ * @param token - JWT токен для проверки
21
+ * @returns Результат верификации токена
22
+ */
9
23
  verify(token: string): IVerifyResult;
10
24
  }
@@ -16,6 +16,10 @@ exports.PassportService = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
17
  const constants_1 = require("./constants");
18
18
  const utils_1 = require("./utils");
19
+ /**
20
+ * Сервис для работы с JWT токенами.
21
+ * Обеспечивает генерацию и верификацию токенов с использованием заданной стратегии.
22
+ */
19
23
  let PassportService = class PassportService {
20
24
  options;
21
25
  SECRET_KEY;
@@ -27,9 +31,19 @@ let PassportService = class PassportService {
27
31
  this.PUBLIC_KEY = options.publicKey;
28
32
  this.strategy = (0, utils_1.getStrategy)(options.strategy, this.SECRET_KEY, this.PUBLIC_KEY);
29
33
  }
34
+ /**
35
+ * Генерирует JWT токен на основе переданного payload
36
+ * @param payload - данные для включения в токен
37
+ * @returns JWT токен в виде строки
38
+ */
30
39
  generate(payload) {
31
40
  return this.strategy.generate(payload);
32
41
  }
42
+ /**
43
+ * Проверяет JWT токен и возвращает результат верификации
44
+ * @param token - JWT токен для проверки
45
+ * @returns Результат верификации токена
46
+ */
33
47
  verify(token) {
34
48
  return this.strategy.verify(token);
35
49
  }
@@ -6,7 +6,26 @@ export declare class HS256Strategy implements IJWTStrategy {
6
6
  private static readonly JWT_ALG;
7
7
  private static readonly PARTS_LENGTH;
8
8
  constructor(secret: string);
9
+ /**
10
+ * Генерирует JWT токен на основе переданной полезной нагрузки.
11
+ *
12
+ * @param payload - Полезная нагрузка для включения в токен.
13
+ * @returns Строка сгенерированного JWT токена.
14
+ */
9
15
  generate(payload: IPayload): string;
16
+ /**
17
+ * Проверяет действительность и срок действия переданного токена.
18
+ *
19
+ * @param token - Токен для проверки.
20
+ * @returns Результат проверки токена.
21
+ */
10
22
  verify(token: string): IVerifyResult;
23
+ /**
24
+ * Вычисляет HMAC-подпись для переданных данных, используя секретный ключ.
25
+ * Алгоритм шифрования: SHA-256.
26
+ *
27
+ * @param data - Данные, для которых необходимо вычислить подпись.
28
+ * @returns Подпись в виде строки шестнадцатеричного формата.
29
+ */
11
30
  private computeHmac;
12
31
  }
@@ -11,6 +11,12 @@ class HS256Strategy {
11
11
  constructor(secret) {
12
12
  this.SECRET_KEY = secret;
13
13
  }
14
+ /**
15
+ * Генерирует JWT токен на основе переданной полезной нагрузки.
16
+ *
17
+ * @param payload - Полезная нагрузка для включения в токен.
18
+ * @returns Строка сгенерированного JWT токена.
19
+ */
14
20
  generate(payload) {
15
21
  const header = { alg: HS256Strategy.JWT_ALG, typ: 'JWT' };
16
22
  const headerB64 = (0, utils_1.base64UrlEncode)(JSON.stringify(header));
@@ -19,6 +25,12 @@ class HS256Strategy {
19
25
  const mac = this.computeHmac(serialized);
20
26
  return (0, utils_1.serialize)([serialized, mac], HS256Strategy.INTERNAL_SEPARATOR);
21
27
  }
28
+ /**
29
+ * Проверяет действительность и срок действия переданного токена.
30
+ *
31
+ * @param token - Токен для проверки.
32
+ * @returns Результат проверки токена.
33
+ */
22
34
  verify(token) {
23
35
  const parts = token.split(HS256Strategy.INTERNAL_SEPARATOR);
24
36
  if (parts.length !== HS256Strategy.PARTS_LENGTH) {
@@ -36,10 +48,17 @@ class HS256Strategy {
36
48
  const payload = parsed;
37
49
  if (!Number.isFinite(payload.exp))
38
50
  return { valid: false, reason: 'Expired error format' };
39
- if (Date.now() > payload.exp)
51
+ if ((0, utils_1.now)() > payload.exp)
40
52
  return { valid: false, reason: 'Token is expired' };
41
53
  return { valid: true, payload };
42
54
  }
55
+ /**
56
+ * Вычисляет HMAC-подпись для переданных данных, используя секретный ключ.
57
+ * Алгоритм шифрования: SHA-256.
58
+ *
59
+ * @param data - Данные, для которых необходимо вычислить подпись.
60
+ * @returns Подпись в виде строки шестнадцатеричного формата.
61
+ */
43
62
  computeHmac(data) {
44
63
  return (0, crypto_1.createHmac)('sha256', this.SECRET_KEY).update(data).digest('hex');
45
64
  }
@@ -6,8 +6,32 @@ export declare class RS256Strategy implements IJWTStrategy {
6
6
  private static readonly INTERNAL_SEPARATOR;
7
7
  private static readonly JWT_ALG;
8
8
  private static readonly PARTS_LENGTH;
9
+ /**
10
+ * Конструктор класса RS256Strategy
11
+ *
12
+ * @param secretKey - закрытый ключ для подписи токенов
13
+ * @param publicKey - открытый ключ для проверки токенов
14
+ */
9
15
  constructor(secretKey: string, publicKey: string);
16
+ /**
17
+ * Генерация JWT токена с использованием алгоритма RS256
18
+ *
19
+ * @param payload - данные для включения в токен
20
+ * @returns сгенерированный JWT токен в виде строки
21
+ */
10
22
  generate(payload: IPayload): string;
23
+ /**
24
+ * Проверка валидности токена
25
+ *
26
+ * @param token - строка токена для проверки
27
+ * @returns результат проверки токена со статусом и возможной полезной нагрузкой
28
+ */
11
29
  verify(token: string): IVerifyResult;
30
+ /**
31
+ * Создание подписи для токена
32
+ *
33
+ * @param data - данные для шифрования
34
+ * @returns зашифрованная строка подписи
35
+ */
12
36
  private computeRSA;
13
37
  }
@@ -9,10 +9,22 @@ class RS256Strategy {
9
9
  static INTERNAL_SEPARATOR = '.';
10
10
  static JWT_ALG = 'RSA-SHA256';
11
11
  static PARTS_LENGTH = 3;
12
+ /**
13
+ * Конструктор класса RS256Strategy
14
+ *
15
+ * @param secretKey - закрытый ключ для подписи токенов
16
+ * @param publicKey - открытый ключ для проверки токенов
17
+ */
12
18
  constructor(secretKey, publicKey) {
13
19
  this.SECRET_KEY = secretKey;
14
20
  this.PUBLIC_KEY = publicKey;
15
21
  }
22
+ /**
23
+ * Генерация JWT токена с использованием алгоритма RS256
24
+ *
25
+ * @param payload - данные для включения в токен
26
+ * @returns сгенерированный JWT токен в виде строки
27
+ */
16
28
  generate(payload) {
17
29
  const header = { alg: 'RS256', typ: 'JWT' };
18
30
  const headerB64 = (0, utils_1.base64UrlEncode)(JSON.stringify(header));
@@ -21,6 +33,12 @@ class RS256Strategy {
21
33
  const mac = this.computeRSA(serialized);
22
34
  return (0, utils_1.serialize)([serialized, mac], RS256Strategy.INTERNAL_SEPARATOR);
23
35
  }
36
+ /**
37
+ * Проверка валидности токена
38
+ *
39
+ * @param token - строка токена для проверки
40
+ * @returns результат проверки токена со статусом и возможной полезной нагрузкой
41
+ */
24
42
  verify(token) {
25
43
  const parts = token.split(RS256Strategy.INTERNAL_SEPARATOR);
26
44
  if (parts.length !== RS256Strategy.PARTS_LENGTH)
@@ -37,10 +55,16 @@ class RS256Strategy {
37
55
  const payload = parsed;
38
56
  if (!Number.isFinite(payload.exp))
39
57
  return { valid: false, reason: 'Expired error format' };
40
- if (Date.now() > payload.exp)
58
+ if ((0, utils_1.now)() > payload.exp)
41
59
  return { valid: false, reason: 'Token is expired' };
42
60
  return { valid: true, payload };
43
61
  }
62
+ /**
63
+ * Создание подписи для токена
64
+ *
65
+ * @param data - данные для шифрования
66
+ * @returns зашифрованная строка подписи
67
+ */
44
68
  computeRSA(data) {
45
69
  const sign = (0, crypto_1.createSign)(RS256Strategy.JWT_ALG)
46
70
  .update(data)
@@ -1,2 +1,17 @@
1
+ /**
2
+ * Кодирует буфер или строку в формат Base64URL.
3
+ * Base64URL - это модифицированная версия стандартного Base64,
4
+ * используемая в JWT токенах для безопасной передачи данных в URL.
5
+ *
6
+ * @param buf - Буфер или строка для кодирования
7
+ * @returns Строка в формате Base64URL
8
+ */
1
9
  export declare function base64UrlEncode(buf: Buffer | string): string;
10
+ /**
11
+ * Декодирует строку из формата Base64URL в обычную строку.
12
+ * Обратная операция к base64UrlEncode.
13
+ *
14
+ * @param str - Строка в формате Base64URL для декодирования
15
+ * @returns Декодированная строка
16
+ */
2
17
  export declare function base64UrlDecode(str: string): string;
@@ -2,16 +2,32 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.base64UrlEncode = base64UrlEncode;
4
4
  exports.base64UrlDecode = base64UrlDecode;
5
+ /**
6
+ * Кодирует буфер или строку в формат Base64URL.
7
+ * Base64URL - это модифицированная версия стандартного Base64,
8
+ * используемая в JWT токенах для безопасной передачи данных в URL.
9
+ *
10
+ * @param buf - Буфер или строка для кодирования
11
+ * @returns Строка в формате Base64URL
12
+ */
5
13
  function base64UrlEncode(buf) {
6
14
  const buffer = typeof buf === 'string' ? Buffer.from(buf) : buf;
7
15
  return buffer
8
16
  .toString('base64')
9
- .replace(/\+/g, '-')
10
- .replace(/\//g, '_')
11
- .replace(/=+$/, '');
17
+ .replace(/\+/g, '-') // Заменяем + на -
18
+ .replace(/\//g, '_') // Заменяем / на _
19
+ .replace(/=+$/, ''); // Удаляем символы заполнения в конце
12
20
  }
21
+ /**
22
+ * Декодирует строку из формата Base64URL в обычную строку.
23
+ * Обратная операция к base64UrlEncode.
24
+ *
25
+ * @param str - Строка в формате Base64URL для декодирования
26
+ * @returns Декодированная строка
27
+ */
13
28
  function base64UrlDecode(str) {
14
- str = str.replace(/-/g, '+').replace(/_/g, '/');
29
+ str = str.replace(/-/g, '+').replace(/_/g, '/'); // Восстанавливаем оригинальные символы Base64
30
+ // Добавляем символы заполнения, если длина не кратна 4
15
31
  while (str.length % 4)
16
32
  str += '=';
17
33
  return Buffer.from(str, 'base64').toString();
@@ -1,3 +1,23 @@
1
1
  import { IHeader, IPayload } from '../interfaces';
2
+ /**
3
+ * Проверяет, является ли переданный объект полезной нагрузкой токена.
4
+ * Объект считается полезной нагрузкой, если:
5
+ * - свойство sub является строкой или числом
6
+ * - свойство name является строкой
7
+ * - свойство iat является числом
8
+ * - свойство exp является числом
9
+ *
10
+ * @param data - проверяемый объект
11
+ * @returns true, если объект соответствует интерфейсу IPayload, иначе false
12
+ */
2
13
  export declare function isPayload(data: any): data is IPayload;
14
+ /**
15
+ * Проверяет, является ли переданный объект заголовком токена.
16
+ * Объект считается заголовком, если:
17
+ * - свойство alg является строкой
18
+ * - свойство typ является строкой
19
+ *
20
+ * @param data - проверяемый объект
21
+ * @returns true, если объект соответствует интерфейсу IHeader, иначе false
22
+ */
3
23
  export declare function isHeader(data: any): data is IHeader;
@@ -2,12 +2,32 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isPayload = isPayload;
4
4
  exports.isHeader = isHeader;
5
+ /**
6
+ * Проверяет, является ли переданный объект полезной нагрузкой токена.
7
+ * Объект считается полезной нагрузкой, если:
8
+ * - свойство sub является строкой или числом
9
+ * - свойство name является строкой
10
+ * - свойство iat является числом
11
+ * - свойство exp является числом
12
+ *
13
+ * @param data - проверяемый объект
14
+ * @returns true, если объект соответствует интерфейсу IPayload, иначе false
15
+ */
5
16
  function isPayload(data) {
6
17
  return ((typeof data.sub === 'string' || typeof data.sub === 'number') &&
7
18
  typeof data.name === 'string' &&
8
19
  typeof data.iat === 'number' &&
9
20
  typeof data.exp === 'number');
10
21
  }
22
+ /**
23
+ * Проверяет, является ли переданный объект заголовком токена.
24
+ * Объект считается заголовком, если:
25
+ * - свойство alg является строкой
26
+ * - свойство typ является строкой
27
+ *
28
+ * @param data - проверяемый объект
29
+ * @returns true, если объект соответствует интерфейсу IHeader, иначе false
30
+ */
11
31
  function isHeader(data) {
12
32
  return typeof data.alg === 'string' && typeof data.typ === 'string';
13
33
  }
@@ -1,4 +1,21 @@
1
1
  import { Verify } from 'crypto';
2
+ /**
3
+ * Сравнивает две строки за константное время для предотвращения атак по времени
4
+ * @param a - первая строка для сравнения
5
+ * @param b - вторая строка для сравнения
6
+ * @returns true, если строки идентичны, false в противном случае
7
+ */
2
8
  export declare function constantTimeEqual(a: string, b: string): boolean;
9
+ /**
10
+ * Создаёт объект для проверки подписи RSA-SHA256 на основе переданных данных
11
+ * @param data - данные для проверки подписи
12
+ * @returns объект Verify, готовый к проверке подписи
13
+ */
3
14
  export declare function getVerifyRSA(data: string): Verify;
15
+ /**
16
+ * Объединяет массив строк в одну строку с указанным разделителем
17
+ * @param arr - массив строк для объединения
18
+ * @param separator - разделитель между элементами массива
19
+ * @returns объединённая строка
20
+ */
4
21
  export declare function serialize(arr: string[], separator: string): string;
@@ -4,6 +4,12 @@ exports.constantTimeEqual = constantTimeEqual;
4
4
  exports.getVerifyRSA = getVerifyRSA;
5
5
  exports.serialize = serialize;
6
6
  const crypto_1 = require("crypto");
7
+ /**
8
+ * Сравнивает две строки за константное время для предотвращения атак по времени
9
+ * @param a - первая строка для сравнения
10
+ * @param b - вторая строка для сравнения
11
+ * @returns true, если строки идентичны, false в противном случае
12
+ */
7
13
  function constantTimeEqual(a, b) {
8
14
  const bufA = Buffer.from(a);
9
15
  const bufB = Buffer.from(b);
@@ -11,9 +17,20 @@ function constantTimeEqual(a, b) {
11
17
  return false;
12
18
  return (0, crypto_1.timingSafeEqual)(bufA, bufB);
13
19
  }
20
+ /**
21
+ * Создаёт объект для проверки подписи RSA-SHA256 на основе переданных данных
22
+ * @param data - данные для проверки подписи
23
+ * @returns объект Verify, готовый к проверке подписи
24
+ */
14
25
  function getVerifyRSA(data) {
15
26
  return (0, crypto_1.createVerify)('RSA-SHA256').update(data);
16
27
  }
28
+ /**
29
+ * Объединяет массив строк в одну строку с указанным разделителем
30
+ * @param arr - массив строк для объединения
31
+ * @param separator - разделитель между элементами массива
32
+ * @returns объединённая строка
33
+ */
17
34
  function serialize(arr, separator) {
18
35
  return arr.join(separator);
19
36
  }
@@ -1 +1,4 @@
1
+ /**
2
+ * Возвращает текущую дату в формате timestamp (в секундах)
3
+ */
1
4
  export declare function now(): number;
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.now = now;
4
+ /**
5
+ * Возвращает текущую дату в формате timestamp (в секундах)
6
+ */
4
7
  function now() {
5
8
  return Math.floor(Date.now() / 1000);
6
9
  }
@@ -1,6 +1,22 @@
1
1
  import { IJWTStrategy } from '../interfaces/ jwt.interface';
2
+ /**
3
+ * Декодирует JWT токен без проверки подписи.
4
+ * Извлекает и парсит заголовок и полезную нагрузку из токена.
5
+ *
6
+ * @param token - JWT токен для декодирования
7
+ * @returns Объект с декодированным заголовком и полезной нагрузкой
8
+ */
2
9
  export declare function JwtDecode(token: string): {
3
10
  header: any;
4
11
  payload: any;
5
12
  };
13
+ /**
14
+ * Создает экземпляр стратегии JWT на основе указанного типа.
15
+ *
16
+ * @param type - Тип стратегии (например, 'HS256', 'RS256')
17
+ * @param secretKey - Секретный ключ для подписи токенов
18
+ * @param publicKey - Публичный ключ для верификации токенов (обязателен для RS256)
19
+ * @returns Экземпляр соответствующей стратегии JWT
20
+ * @throws Error если указана неподдерживаемая стратегия или отсутствует публичный ключ для RS256
21
+ */
6
22
  export declare function getStrategy(type: string, secretKey: string, publicKey: string | null): IJWTStrategy;
package/dist/utils/jwt.js CHANGED
@@ -5,6 +5,13 @@ exports.getStrategy = getStrategy;
5
5
  const constants_1 = require("../constants");
6
6
  const strategies_1 = require("../strategies");
7
7
  const base64_1 = require("./base64");
8
+ /**
9
+ * Декодирует JWT токен без проверки подписи.
10
+ * Извлекает и парсит заголовок и полезную нагрузку из токена.
11
+ *
12
+ * @param token - JWT токен для декодирования
13
+ * @returns Объект с декодированным заголовком и полезной нагрузкой
14
+ */
8
15
  function JwtDecode(token) {
9
16
  const [header, payload] = token.split('.');
10
17
  return {
@@ -12,6 +19,15 @@ function JwtDecode(token) {
12
19
  payload: JSON.parse((0, base64_1.base64UrlDecode)(payload))
13
20
  };
14
21
  }
22
+ /**
23
+ * Создает экземпляр стратегии JWT на основе указанного типа.
24
+ *
25
+ * @param type - Тип стратегии (например, 'HS256', 'RS256')
26
+ * @param secretKey - Секретный ключ для подписи токенов
27
+ * @param publicKey - Публичный ключ для верификации токенов (обязателен для RS256)
28
+ * @returns Экземпляр соответствующей стратегии JWT
29
+ * @throws Error если указана неподдерживаемая стратегия или отсутствует публичный ключ для RS256
30
+ */
15
31
  function getStrategy(type, secretKey, publicKey) {
16
32
  switch (type) {
17
33
  case constants_1.JWTStrategy.HS256:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alexdevco/passport",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "Lightweight AlexDevCo authentication library",
5
5
  "homepage": "https://github.com/alexdevcoru/passport#readme",
6
6
  "bugs": {