@yimingliao/cms 0.0.39 → 0.0.41

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.
@@ -801,6 +801,28 @@ declare function createAuthMiddleware({ adminRefreshTokenCommandRepository, auth
801
801
  authenticate(): Promise<AdminFull>;
802
802
  };
803
803
 
804
+ declare const signInValidator: (schemas: ReturnType<typeof createSchemas>) => zod__default.ZodObject<{
805
+ email: zod__default.ZodEmail;
806
+ password: zod__default.ZodString;
807
+ }, zod__default.core.$strip>;
808
+
809
+ type SignInFormData = zod__default.infer<typeof signInValidator>;
810
+ interface CreateSignInActionParams {
811
+ adminQueryRepository: ReturnType<typeof createAdminQueryRepository>;
812
+ adminRefreshTokenCommandRepository: ReturnType<typeof createAdminRefreshTokenCommandRepository>;
813
+ executeAction: ReturnType<typeof createExecuteAction>;
814
+ ipRateLimiter: (options: RateLimiterOptions) => Promise<void>;
815
+ authUseCases: ReturnType<typeof createAuthUseCases>;
816
+ headers: () => Promise<Headers>;
817
+ schemas: ReturnType<typeof createSchemas>;
818
+ }
819
+ declare function createSignInAction({ executeAction, ipRateLimiter, authUseCases, headers, adminQueryRepository, adminRefreshTokenCommandRepository, schemas, }: CreateSignInActionParams): ({ formData, deviceInfo, }: {
820
+ formData: SignInFormData;
821
+ deviceInfo: DeviceInfo;
822
+ }) => Promise<Result<{
823
+ admin: AdminFull;
824
+ }>>;
825
+
804
826
  declare class ServerError extends Error {
805
827
  readonly i18nKey?: string;
806
828
  readonly statusCode?: number;
@@ -819,4 +841,4 @@ declare class ServerError extends Error {
819
841
  static internalServerError(): ServerError;
820
842
  }
821
843
 
822
- export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, type RawCacheKey, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createCookieService, createCryptoService, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createSchemas, createSeoMetadataCommandRepository, createTocItemSchema, createUnique, createVerifyAccessToken, createVerifyRefreshToken, createZod, normalizeCacheKey };
844
+ export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, type RawCacheKey, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createCookieService, createCryptoService, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createSchemas, createSeoMetadataCommandRepository, createSignInAction, createTocItemSchema, createUnique, createVerifyAccessToken, createVerifyRefreshToken, createZod, normalizeCacheKey };
@@ -6,7 +6,7 @@ import crypto, { timingSafeEqual } from 'crypto';
6
6
  import { headers } from 'next/headers';
7
7
  import KeyvRedis from '@keyv/redis';
8
8
  import Keyv from 'keyv';
9
- import { z, ZodError } from 'zod';
9
+ import z2, { z, ZodError } from 'zod';
10
10
  import { ulid } from 'ulid';
11
11
  import { NextResponse } from 'next/server';
12
12
 
@@ -455,11 +455,11 @@ function createZod({
455
455
 
456
456
  // src/server/infrastructure/zod/schemas/schemas.ts
457
457
  function createSchemas({
458
- z: z2,
458
+ z: z3,
459
459
  localeArray,
460
460
  exist
461
461
  }) {
462
- const trimmedString = () => z2.string().trim();
462
+ const trimmedString = () => z3.string().trim();
463
463
  const MAX_NUMBER = 2147483647;
464
464
  const MAX_STRING = 1e5;
465
465
  const localeSet = new Set(localeArray);
@@ -467,21 +467,21 @@ function createSchemas({
467
467
  return trimmedString().max(MAX_STRING);
468
468
  }
469
469
  function positiveNumber() {
470
- return z2.preprocess((val) => {
470
+ return z3.preprocess((val) => {
471
471
  if (val == null || val === "") return;
472
472
  const num = Number(String(val).trim());
473
473
  return Number.isNaN(num) ? void 0 : num;
474
- }, z2.number().min(0).max(MAX_NUMBER));
474
+ }, z3.number().min(0).max(MAX_NUMBER));
475
475
  }
476
476
  function url() {
477
- return z2.preprocess((val) => {
477
+ return z3.preprocess((val) => {
478
478
  if (typeof val === "string" && val.trim() === "" || val === null)
479
479
  return null;
480
480
  return val;
481
- }, z2.url().max(2048).nullable());
481
+ }, z3.url().max(2048).nullable());
482
482
  }
483
483
  function email() {
484
- return z2.email().max(254).toLowerCase();
484
+ return z3.email().max(254).toLowerCase();
485
485
  }
486
486
  function password() {
487
487
  return trimmedString().min(6).max(255);
@@ -492,7 +492,7 @@ function createSchemas({
492
492
  );
493
493
  }
494
494
  function array(schema) {
495
- return z2.array(schema).max(100).transform(
495
+ return z3.array(schema).max(100).transform(
496
496
  (arr) => arr.filter((v) => v != null)
497
497
  );
498
498
  }
@@ -517,7 +517,7 @@ function createSchemas({
517
517
  });
518
518
  }
519
519
  function singleItem(options) {
520
- return z2.object({
520
+ return z3.object({
521
521
  id: id().refine((v) => exist(v, options), {
522
522
  error: "Resource does not exist"
523
523
  })
@@ -525,7 +525,7 @@ function createSchemas({
525
525
  }
526
526
  function multiItems(options) {
527
527
  return array(
528
- z2.object({
528
+ z3.object({
529
529
  id: id().refine((v) => exist(v, options), {
530
530
  error: "Resource does not exist"
531
531
  })
@@ -556,14 +556,14 @@ function createSchemas({
556
556
 
557
557
  // src/server/infrastructure/zod/schemas/file.ts
558
558
  function createFileSchema({
559
- z: z2,
559
+ z: z3,
560
560
  maxSizeInMb
561
561
  }) {
562
562
  return function fileSchema({
563
563
  size = maxSizeInMb * SIZE.MB,
564
564
  extensions = []
565
565
  } = {}) {
566
- return z2.instanceof(File, { error: "Invalid file" }).refine((file) => file.size <= size, {
566
+ return z3.instanceof(File, { error: "Invalid file" }).refine((file) => file.size <= size, {
567
567
  error: `File is too large, max ${size / SIZE.MB}MB`
568
568
  }).refine(
569
569
  (file) => {
@@ -577,7 +577,7 @@ function createFileSchema({
577
577
  };
578
578
  }
579
579
  function createMultiFileSchema({
580
- z: z2,
580
+ z: z3,
581
581
  fileSchema,
582
582
  maxSizeInMb
583
583
  }) {
@@ -585,27 +585,27 @@ function createMultiFileSchema({
585
585
  size = maxSizeInMb * SIZE.MB,
586
586
  extensions = []
587
587
  } = {}) {
588
- return z2.array(fileSchema({ size, extensions }));
588
+ return z3.array(fileSchema({ size, extensions }));
589
589
  };
590
590
  }
591
591
 
592
592
  // src/server/infrastructure/zod/schemas/toc-item.ts
593
593
  function createTocItemSchema({
594
- z: z2,
594
+ z: z3,
595
595
  schemas
596
596
  }) {
597
- const tocItem = z2.lazy(
598
- () => z2.object({
597
+ const tocItem = z3.lazy(
598
+ () => z3.object({
599
599
  text: schemas.text(),
600
600
  id: schemas.text(),
601
- level: z2.union([
602
- z2.literal(2),
603
- z2.literal(3),
604
- z2.literal(4),
605
- z2.literal(5),
606
- z2.literal(6)
601
+ level: z3.union([
602
+ z3.literal(2),
603
+ z3.literal(3),
604
+ z3.literal(4),
605
+ z3.literal(5),
606
+ z3.literal(6)
607
607
  ]),
608
- children: z2.array(tocItem).default([])
608
+ children: z3.array(tocItem).default([])
609
609
  })
610
610
  );
611
611
  return tocItem;
@@ -1910,6 +1910,49 @@ function createVerifyRefreshToken({
1910
1910
  }
1911
1911
  };
1912
1912
  }
1913
+ var signInValidator = (schemas) => z2.object({
1914
+ email: schemas.email(),
1915
+ password: schemas.password()
1916
+ });
1917
+
1918
+ // src/server/interfaces/actions/auth/sign-in/create-sign-in-action.ts
1919
+ function createSignInAction({
1920
+ executeAction,
1921
+ ipRateLimiter,
1922
+ authUseCases,
1923
+ headers: headers2,
1924
+ adminQueryRepository,
1925
+ adminRefreshTokenCommandRepository,
1926
+ schemas
1927
+ }) {
1928
+ return async function signInAction({
1929
+ formData,
1930
+ deviceInfo
1931
+ }) {
1932
+ return executeAction(async () => {
1933
+ await ipRateLimiter({ key: ["sign-in"] });
1934
+ const { email, password } = await signInValidator(schemas).parseAsync(formData);
1935
+ const verified = await authUseCases.verifyCredentials({
1936
+ email,
1937
+ password
1938
+ });
1939
+ const admin = await adminQueryRepository.findFull({
1940
+ id: verified.id
1941
+ });
1942
+ if (!admin) throw ServerError.notFound();
1943
+ await authUseCases.refreshTokens({
1944
+ admin,
1945
+ deviceInfo,
1946
+ ip: (await headers2()).get("x-forwarded-for") || "unknown"
1947
+ });
1948
+ await adminRefreshTokenCommandRepository.deleteManyByExpired();
1949
+ return {
1950
+ i18nKey: "ok.sign-in-ok",
1951
+ data: { admin }
1952
+ };
1953
+ });
1954
+ };
1955
+ }
1913
1956
 
1914
1957
  // src/server/applications/auth/create-auth-use-cases.ts
1915
1958
  function createAuthUseCases({
@@ -2035,4 +2078,4 @@ function createAuthUseCases({
2035
2078
  };
2036
2079
  }
2037
2080
 
2038
- export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createCookieService, createCryptoService, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createSchemas, createSeoMetadataCommandRepository, createTocItemSchema, createUnique, createVerifyAccessToken, createVerifyRefreshToken, createZod, normalizeCacheKey };
2081
+ export { ADMIN_ORDER_BY, ORDER_BY, POST_ORDER_BY, ServerError, createAdminCommandRepository, createAdminQueryRepository, createAdminRefreshTokenCommandRepository, createAdminRefreshTokenQueryRepository, createArgon2Service, createAuthMiddleware, createAuthUseCases, createCache, createCacheResult, createCookieService, createCryptoService, createExecuteAction, createExecuteApi, createExist, createFileCommandRepository, createFileQueryRepository, createFileSchema, createFolderCommandRepository, createFolderQueryRepository, createIpRateLimiter, createJwtService, createMultiFileSchema, createPostCommandRepository, createPostQueryRepository, createSchemas, createSeoMetadataCommandRepository, createSignInAction, createTocItemSchema, createUnique, createVerifyAccessToken, createVerifyRefreshToken, createZod, normalizeCacheKey };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yimingliao/cms",
3
- "version": "0.0.39",
3
+ "version": "0.0.41",
4
4
  "author": "Yiming Liao",
5
5
  "license": "MIT",
6
6
  "type": "module",