@plyaz/auth 1.0.0 → 1.0.2
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/commits.txt +3 -3
- package/dist/common/index.cjs +3 -1
- package/dist/common/index.cjs.map +1 -1
- package/dist/common/index.mjs +3 -1
- package/dist/common/index.mjs.map +1 -1
- package/dist/index.cjs +424 -154
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +421 -152
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
- package/release_message.txt +28 -0
- package/src/adapters/auth-adapter-factory.ts +4 -3
- package/src/adapters/auth-adapter.mapper.ts +2 -2
- package/src/adapters/base-auth.adapter.ts +17 -9
- package/src/adapters/clerk/clerk.adapter.ts +9 -12
- package/src/adapters/custom/custom.adapter.ts +19 -10
- package/src/adapters/index.ts +0 -1
- package/src/adapters/next-auth/authOptions.ts +20 -16
- package/src/adapters/next-auth/next-auth.adapter.ts +13 -15
- package/src/api/client.ts +4 -6
- package/src/audit/audit.logger.ts +19 -10
- package/src/client/components/ProtectedRoute.tsx +15 -11
- package/src/client/hooks/useAuth.ts +23 -21
- package/src/client/hooks/useConnectedAccounts.ts +57 -45
- package/src/client/hooks/usePermissions.ts +1 -1
- package/src/client/hooks/useRBAC.ts +6 -6
- package/src/client/hooks/useSession.ts +5 -5
- package/src/client/providers/AuthProvider.tsx +23 -17
- package/src/client/store/auth.store.ts +71 -62
- package/src/client/utils/storage.ts +45 -18
- package/src/common/constants/oauth-providers.ts +10 -7
- package/src/common/errors/auth.errors.ts +4 -4
- package/src/common/errors/specific-auth-errors.ts +5 -9
- package/src/common/regex/index.ts +6 -4
- package/src/common/types/auth.types.ts +47 -38
- package/src/common/types/index.ts +12 -6
- package/src/common/utils/index.ts +15 -11
- package/src/core/blacklist/token.blacklist.ts +13 -7
- package/src/core/index.ts +2 -2
- package/src/core/jwt/jwt.manager.ts +47 -22
- package/src/core/session/session.manager.ts +17 -14
- package/src/db/repositories/connected-account.repository.ts +120 -78
- package/src/db/repositories/role.repository.ts +41 -26
- package/src/db/repositories/session.repository.ts +9 -10
- package/src/db/repositories/user.repository.ts +105 -91
- package/src/flows/index.ts +2 -2
- package/src/flows/sign-in.flow.ts +28 -14
- package/src/flows/sign-up.flow.ts +31 -20
- package/src/index.ts +36 -37
- package/src/libs/clerk.helper.ts +6 -7
- package/src/libs/supabase.helper.ts +79 -61
- package/src/libs/supabaseClient.ts +3 -3
- package/src/providers/base/auth-provider.interface.ts +13 -11
- package/src/providers/base/index.ts +1 -1
- package/src/providers/index.ts +1 -1
- package/src/providers/oauth/facebook.provider.ts +63 -39
- package/src/providers/oauth/github.provider.ts +14 -10
- package/src/providers/oauth/google.provider.ts +39 -28
- package/src/providers/oauth/index.ts +1 -1
- package/src/rbac/dynamic-roles.ts +88 -54
- package/src/rbac/index.ts +4 -4
- package/src/rbac/permission-checker.ts +147 -75
- package/src/rbac/role-hierarchy.ts +8 -8
- package/src/rbac/role.manager.ts +11 -8
- package/src/security/csrf/csrf.protection.ts +9 -7
- package/src/security/index.ts +2 -2
- package/src/security/rate-limiting/auth/auth.controller.ts +2 -4
- package/src/security/rate-limiting/auth/rate-limiting.interface.ts +26 -6
- package/src/security/rate-limiting/auth.module.ts +1 -2
- package/src/server/auth.module.ts +55 -52
- package/src/server/decorators/auth.decorator.ts +9 -11
- package/src/server/decorators/auth.decorators.ts +8 -9
- package/src/server/decorators/current-user.decorator.ts +6 -6
- package/src/server/decorators/permission.decorator.ts +17 -9
- package/src/server/guards/auth.guard.ts +21 -16
- package/src/server/guards/custom-throttler.guard.ts +4 -9
- package/src/server/guards/permissions.guard.ts +32 -23
- package/src/server/guards/roles.guard.ts +14 -12
- package/src/server/middleware/auth.middleware.ts +4 -4
- package/src/server/middleware/session.middleware.ts +4 -4
- package/src/server/services/account.service.ts +96 -48
- package/src/server/services/auth.service.ts +57 -28
- package/src/server/services/brute-force.service.ts +24 -19
- package/src/server/services/index.ts +1 -1
- package/src/server/services/rate-limiter.service.ts +9 -4
- package/src/server/services/session.service.ts +84 -48
- package/src/server/services/token.service.ts +71 -51
- package/src/session/cookie-store.ts +47 -34
- package/src/session/enhanced-session-manager.ts +69 -48
- package/src/session/index.ts +5 -5
- package/src/session/memory-store.ts +37 -30
- package/src/session/redis-store.ts +105 -72
- package/src/strategies/oauth.strategy.ts +10 -9
- package/src/strategies/traditional-auth.strategy.ts +41 -29
- package/src/tokens/index.ts +4 -4
- package/src/tokens/refresh-token-manager.ts +70 -55
- package/src/tokens/token-validator.ts +109 -53
- package/vitest.setup.d.ts +2 -2
- package/vitest.setup.ts +1 -1
package/commits.txt
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
- chore: Add npm pacakge (usmangq12)
|
|
2
|
+
- chore: Update pnpm version (usmangq12)
|
|
3
|
+
- chore: Fixed formatting issues (usmangq12)
|
|
1
4
|
- chore: Add types (usmangq12)
|
|
2
5
|
- chore: Fixed types issues (usmangq12)
|
|
3
|
-
- chore: Fixed types issues (usmangq12)
|
|
4
|
-
- chore: Add all required dev dependencies (usmangq12)
|
|
5
|
-
- chore: Add eslint plugin (usmangq12)
|
package/dist/common/index.cjs
CHANGED
|
@@ -26,7 +26,9 @@ function maskSensitiveData(data, sensitiveFields = ["password", "token", "secret
|
|
|
26
26
|
if (typeof data !== "object" || data === null) {
|
|
27
27
|
return data;
|
|
28
28
|
}
|
|
29
|
-
const masked = {
|
|
29
|
+
const masked = {
|
|
30
|
+
...data
|
|
31
|
+
};
|
|
30
32
|
const four = 4;
|
|
31
33
|
for (const field of sensitiveFields) {
|
|
32
34
|
if (field in masked) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common/utils/index.ts"],"names":["NUMERIX"],"mappings":";;;;;;;AAgBO,SAAS,oBAAA,CAAqB,SAAiB,EAAA,EAAY;AAChE,EAAA,MAAM,KAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/common/utils/index.ts"],"names":["NUMERIX"],"mappings":";;;;;;;AAgBO,SAAS,oBAAA,CAAqB,SAAiB,EAAA,EAAY;AAChE,EAAA,MAAM,KAAA,GACJ,gEAAA;AACF,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,MAAA,IAAU,KAAA,CAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,MAAA;AACT;AARgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAkBT,SAAS,gBAAA,GAA2B;AACzC,EAAA,OAAO,CAAA,EAAG,KAAK,GAAA,EAAK,IAAI,oBAAA,CAAqBA,cAAA,CAAQ,OAAO,CAAC,CAAA,CAAA;AAC/D;AAFgB,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAaT,SAAS,MAAM,EAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,QAAQ,CAAC,OAAA,KAAY,WAAW,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACpE;AAFgB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AAeT,SAAS,kBACd,IAAA,EACA,eAAA,GAA4B,CAAC,UAAA,EAAY,OAAA,EAAS,QAAQ,CAAA,EACjD;AACT,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,GAAI;AAAA,GACN;AACA,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,KAAA,MAAW,SAAS,eAAA,EAAiB;AACnC,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,QAAA,MAAA,CAAO,KAAK,CAAA,GACV,KAAA,CAAM,SAAA,CAAU,GAAG,IAAI,CAAA,GACvB,GAAA,CAAI,MAAA,CAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,IAAI,CAAC,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAzBgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA","file":"index.cjs","sourcesContent":["/**\n * @fileoverview Common utility functions for @plyaz/auth\n * @module @plyaz/auth/common/utils\n */\n\nimport { NUMERIX } from \"@plyaz/config\";\n\n/**\n * Generate a random string of specified length using alphanumeric characters\n * @param length - Length of the random string (default: 32)\n * @returns Random alphanumeric string\n * @example\n * ```typescript\n * const randomId = generateRandomString(16); // \"a1B2c3D4e5F6g7H8\"\n * ```\n */\nexport function generateRandomString(length: number = 32): string {\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n}\n\n/**\n * Generate a cryptographically secure random ID with timestamp prefix\n * @returns Unique identifier with timestamp and random suffix\n * @example\n * ```typescript\n * const id = generateSecureId(); // \"1703123456789_a1B2c3D4e5F6g7H8\"\n * ```\n */\nexport function generateSecureId(): string {\n return `${Date.now()}_${generateRandomString(NUMERIX.SIXTEEN)}`;\n}\n\n/**\n * Sleep for specified milliseconds (async delay)\n * @param ms - Milliseconds to sleep\n * @returns Promise that resolves after the delay\n * @example\n * ```typescript\n * await sleep(1000); // Wait 1 second\n * ```\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => globalThis.setTimeout(resolve, ms));\n}\n\n/**\n * Mask sensitive data fields for safe logging\n * @param data - Object containing potentially sensitive data\n * @param sensitiveFields - Array of field names to mask (default: ['password', 'token', 'secret'])\n * @returns Object with sensitive fields masked\n * @example\n * ```typescript\n * const masked = maskSensitiveData({ email: 'user@example.com', password: 'secret123' });\n * // Result: { email: 'user@example.com', password: 'secr*****' }\n * ```\n */\nexport function maskSensitiveData(\n data: unknown,\n sensitiveFields: string[] = [\"password\", \"token\", \"secret\"],\n): unknown {\n if (typeof data !== \"object\" || data === null) {\n return data;\n }\n\n // Type assertion to allow indexing by string\n const masked: Record<string, string> = {\n ...(data as Record<string, string>),\n };\n const four = 4;\n for (const field of sensitiveFields) {\n if (field in masked) {\n const value = masked[field];\n if (typeof value === \"string\" && value.length > 0) {\n masked[field] =\n value.substring(0, four) +\n \"*\".repeat(Math.max(0, value.length - four));\n }\n }\n }\n\n return masked;\n}\n"]}
|
package/dist/common/index.mjs
CHANGED
|
@@ -24,7 +24,9 @@ function maskSensitiveData(data, sensitiveFields = ["password", "token", "secret
|
|
|
24
24
|
if (typeof data !== "object" || data === null) {
|
|
25
25
|
return data;
|
|
26
26
|
}
|
|
27
|
-
const masked = {
|
|
27
|
+
const masked = {
|
|
28
|
+
...data
|
|
29
|
+
};
|
|
28
30
|
const four = 4;
|
|
29
31
|
for (const field of sensitiveFields) {
|
|
30
32
|
if (field in masked) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common/utils/index.ts"],"names":[],"mappings":";;;;;AAgBO,SAAS,oBAAA,CAAqB,SAAiB,EAAA,EAAY;AAChE,EAAA,MAAM,KAAA,
|
|
1
|
+
{"version":3,"sources":["../../src/common/utils/index.ts"],"names":[],"mappings":";;;;;AAgBO,SAAS,oBAAA,CAAqB,SAAiB,EAAA,EAAY;AAChE,EAAA,MAAM,KAAA,GACJ,gEAAA;AACF,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,MAAA,IAAU,KAAA,CAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,MAAA;AACT;AARgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAkBT,SAAS,gBAAA,GAA2B;AACzC,EAAA,OAAO,CAAA,EAAG,KAAK,GAAA,EAAK,IAAI,oBAAA,CAAqB,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAA;AAC/D;AAFgB,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAaT,SAAS,MAAM,EAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,QAAQ,CAAC,OAAA,KAAY,WAAW,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACpE;AAFgB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AAeT,SAAS,kBACd,IAAA,EACA,eAAA,GAA4B,CAAC,UAAA,EAAY,OAAA,EAAS,QAAQ,CAAA,EACjD;AACT,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,GAAI;AAAA,GACN;AACA,EAAA,MAAM,IAAA,GAAO,CAAA;AACb,EAAA,KAAA,MAAW,SAAS,eAAA,EAAiB;AACnC,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,QAAA,MAAA,CAAO,KAAK,CAAA,GACV,KAAA,CAAM,SAAA,CAAU,GAAG,IAAI,CAAA,GACvB,GAAA,CAAI,MAAA,CAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,IAAI,CAAC,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAzBgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA","file":"index.mjs","sourcesContent":["/**\n * @fileoverview Common utility functions for @plyaz/auth\n * @module @plyaz/auth/common/utils\n */\n\nimport { NUMERIX } from \"@plyaz/config\";\n\n/**\n * Generate a random string of specified length using alphanumeric characters\n * @param length - Length of the random string (default: 32)\n * @returns Random alphanumeric string\n * @example\n * ```typescript\n * const randomId = generateRandomString(16); // \"a1B2c3D4e5F6g7H8\"\n * ```\n */\nexport function generateRandomString(length: number = 32): string {\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let result = \"\";\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n}\n\n/**\n * Generate a cryptographically secure random ID with timestamp prefix\n * @returns Unique identifier with timestamp and random suffix\n * @example\n * ```typescript\n * const id = generateSecureId(); // \"1703123456789_a1B2c3D4e5F6g7H8\"\n * ```\n */\nexport function generateSecureId(): string {\n return `${Date.now()}_${generateRandomString(NUMERIX.SIXTEEN)}`;\n}\n\n/**\n * Sleep for specified milliseconds (async delay)\n * @param ms - Milliseconds to sleep\n * @returns Promise that resolves after the delay\n * @example\n * ```typescript\n * await sleep(1000); // Wait 1 second\n * ```\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => globalThis.setTimeout(resolve, ms));\n}\n\n/**\n * Mask sensitive data fields for safe logging\n * @param data - Object containing potentially sensitive data\n * @param sensitiveFields - Array of field names to mask (default: ['password', 'token', 'secret'])\n * @returns Object with sensitive fields masked\n * @example\n * ```typescript\n * const masked = maskSensitiveData({ email: 'user@example.com', password: 'secret123' });\n * // Result: { email: 'user@example.com', password: 'secr*****' }\n * ```\n */\nexport function maskSensitiveData(\n data: unknown,\n sensitiveFields: string[] = [\"password\", \"token\", \"secret\"],\n): unknown {\n if (typeof data !== \"object\" || data === null) {\n return data;\n }\n\n // Type assertion to allow indexing by string\n const masked: Record<string, string> = {\n ...(data as Record<string, string>),\n };\n const four = 4;\n for (const field of sensitiveFields) {\n if (field in masked) {\n const value = masked[field];\n if (typeof value === \"string\" && value.length > 0) {\n masked[field] =\n value.substring(0, four) +\n \"*\".repeat(Math.max(0, value.length - four));\n }\n }\n }\n\n return masked;\n}\n"]}
|