@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.
- package/dist/server/index.d.ts +23 -1
- package/dist/server/index.js +69 -26
- package/package.json +1 -1
package/dist/server/index.d.ts
CHANGED
|
@@ -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 };
|
package/dist/server/index.js
CHANGED
|
@@ -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:
|
|
458
|
+
z: z3,
|
|
459
459
|
localeArray,
|
|
460
460
|
exist
|
|
461
461
|
}) {
|
|
462
|
-
const trimmedString = () =>
|
|
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
|
|
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
|
-
},
|
|
474
|
+
}, z3.number().min(0).max(MAX_NUMBER));
|
|
475
475
|
}
|
|
476
476
|
function url() {
|
|
477
|
-
return
|
|
477
|
+
return z3.preprocess((val) => {
|
|
478
478
|
if (typeof val === "string" && val.trim() === "" || val === null)
|
|
479
479
|
return null;
|
|
480
480
|
return val;
|
|
481
|
-
},
|
|
481
|
+
}, z3.url().max(2048).nullable());
|
|
482
482
|
}
|
|
483
483
|
function email() {
|
|
484
|
-
return
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
594
|
+
z: z3,
|
|
595
595
|
schemas
|
|
596
596
|
}) {
|
|
597
|
-
const tocItem =
|
|
598
|
-
() =>
|
|
597
|
+
const tocItem = z3.lazy(
|
|
598
|
+
() => z3.object({
|
|
599
599
|
text: schemas.text(),
|
|
600
600
|
id: schemas.text(),
|
|
601
|
-
level:
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
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:
|
|
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 };
|