@yimingliao/cms 0.0.26 → 0.0.27

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.
@@ -629,15 +629,20 @@ interface CreateAuthUseCases {
629
629
  jwtService: ReturnType<typeof createJwtService>;
630
630
  argon2Service: ReturnType<typeof createArgon2Service>;
631
631
  cryptoService: ReturnType<typeof createCryptoService>;
632
+ cookieService: ReturnType<typeof createCookieService>;
632
633
  config: {
634
+ refreshTokenName: string;
635
+ refreshTokenTtl: number;
636
+ accessTokenName: string;
637
+ accessTokenSecret: string;
638
+ accessTokenTtl: number;
633
639
  resetPasswordSecret: string;
634
640
  resetPasswordTtl: number;
635
641
  verifyEmailSecret: string;
636
642
  verifyEmailTtl: number;
637
- refreshTokenTtl: number;
638
643
  };
639
644
  }
640
- declare function createAuthUseCases({ prisma, adminQueryRepository, adminRefreshTokenCommandRepository, jwtService, argon2Service, cryptoService, config, }: CreateAuthUseCases): {
645
+ declare function createAuthUseCases({ prisma, adminQueryRepository, adminRefreshTokenCommandRepository, jwtService, argon2Service, cryptoService, cookieService, config, }: CreateAuthUseCases): {
641
646
  verifyCredentials: ({ email, password, }: {
642
647
  email: string;
643
648
  password: string;
@@ -646,6 +651,22 @@ declare function createAuthUseCases({ prisma, adminQueryRepository, adminRefresh
646
651
  email: string;
647
652
  password: string;
648
653
  }) => Promise<Admin>;
654
+ createRefreshToken: ({ admin, deviceInfo, ip, }: {
655
+ admin: {
656
+ id: string;
657
+ email: string;
658
+ };
659
+ deviceInfo: DeviceInfo;
660
+ ip: string;
661
+ }) => Promise<string>;
662
+ refreshTokens: ({ admin, deviceInfo, ip, }: {
663
+ admin: {
664
+ id: string;
665
+ email: string;
666
+ };
667
+ deviceInfo: DeviceInfo;
668
+ ip: string;
669
+ }) => Promise<void>;
649
670
  signPasswordResetToken: ({ admin }: {
650
671
  admin: AdminSafe;
651
672
  }) => string;
@@ -659,11 +680,6 @@ declare function createAuthUseCases({ prisma, adminQueryRepository, adminRefresh
659
680
  token: string;
660
681
  admin: AdminSafe;
661
682
  }) => Promise<AdminSafe>;
662
- createRefreshToken: ({ admin, deviceInfo, ip, }: {
663
- admin: AdminSafe;
664
- deviceInfo: DeviceInfo;
665
- ip: string;
666
- }) => Promise<string>;
667
683
  };
668
684
 
669
685
  declare class ServerError extends Error {
@@ -1554,6 +1554,7 @@ function createAuthUseCases({
1554
1554
  jwtService,
1555
1555
  argon2Service,
1556
1556
  cryptoService,
1557
+ cookieService,
1557
1558
  config
1558
1559
  }) {
1559
1560
  async function verifyCredentials({
@@ -1577,6 +1578,45 @@ function createAuthUseCases({
1577
1578
  });
1578
1579
  return updatedAdmin;
1579
1580
  }
1581
+ async function createRefreshToken({
1582
+ admin,
1583
+ deviceInfo,
1584
+ ip
1585
+ }) {
1586
+ const token = cryptoService.generateToken();
1587
+ const tokenHash = cryptoService.hash(token);
1588
+ await adminRefreshTokenCommandRepository.create({
1589
+ tokenHash,
1590
+ ip,
1591
+ deviceInfo,
1592
+ expiresAt: new Date(Date.now() + config.refreshTokenTtl * 1e3),
1593
+ adminId: admin.id,
1594
+ email: admin.email
1595
+ });
1596
+ return token;
1597
+ }
1598
+ async function refreshTokens({
1599
+ admin,
1600
+ deviceInfo,
1601
+ ip
1602
+ }) {
1603
+ const token = await createRefreshToken({ admin, deviceInfo, ip });
1604
+ await cookieService.setSignedCookie({
1605
+ name: config.refreshTokenName,
1606
+ value: token,
1607
+ expireSeconds: config.refreshTokenTtl
1608
+ });
1609
+ const accessToken = jwtService.sign({
1610
+ payload: { id: admin.id },
1611
+ secret: cryptoService.hash(config.accessTokenSecret),
1612
+ expiresIn: config.accessTokenTtl
1613
+ });
1614
+ await cookieService.setSignedCookie({
1615
+ name: config.accessTokenName,
1616
+ value: accessToken,
1617
+ expireSeconds: config.accessTokenTtl
1618
+ });
1619
+ }
1580
1620
  function signPasswordResetToken({ admin }) {
1581
1621
  const payload = { email: admin.email };
1582
1622
  const passwordResetToken = jwtService.sign({
@@ -1616,33 +1656,17 @@ function createAuthUseCases({
1616
1656
  });
1617
1657
  return updatedAdmin;
1618
1658
  }
1619
- async function createRefreshToken({
1620
- admin,
1621
- deviceInfo,
1622
- ip
1623
- }) {
1624
- const token = cryptoService.generateToken();
1625
- const tokenHash = cryptoService.hash(token);
1626
- await adminRefreshTokenCommandRepository.create({
1627
- tokenHash,
1628
- ip,
1629
- deviceInfo,
1630
- expiresAt: new Date(Date.now() + config.refreshTokenTtl * 1e3),
1631
- adminId: admin.id,
1632
- email: admin.email
1633
- });
1634
- return token;
1635
- }
1636
1659
  return {
1637
1660
  verifyCredentials,
1638
1661
  updatePassword,
1662
+ createRefreshToken,
1663
+ refreshTokens,
1639
1664
  // reset password
1640
1665
  signPasswordResetToken,
1641
1666
  verifyPasswordResetToken,
1642
1667
  // verify email
1643
1668
  signEmailVerificationToken,
1644
- verifyEmailAndUpdate,
1645
- createRefreshToken
1669
+ verifyEmailAndUpdate
1646
1670
  };
1647
1671
  }
1648
1672
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimingliao/cms",
3
- "version": "0.0.26",
3
+ "version": "0.0.27",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",